diff --git a/Assets/Engine/Config/engine_core.thread_config b/Assets/Engine/Config/engine_core.thread_config
deleted file mode 100644
index f9183d9174..0000000000
--- a/Assets/Engine/Config/engine_core.thread_config
+++ /dev/null
@@ -1,402 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/Assets/Engine/Config/engine_sandbox.thread_config b/Assets/Engine/Config/engine_sandbox.thread_config
deleted file mode 100644
index 7c0dc00b71..0000000000
--- a/Assets/Engine/Config/engine_sandbox.thread_config
+++ /dev/null
@@ -1,128 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/AutomatedTesting/Gem/Code/Platform/Mac/runtime_dependencies.cmake b/AutomatedTesting/Gem/Code/Platform/Mac/runtime_dependencies.cmake
index f9d1e60dda..ffcaf7293a 100644
--- a/AutomatedTesting/Gem/Code/Platform/Mac/runtime_dependencies.cmake
+++ b/AutomatedTesting/Gem/Code/Platform/Mac/runtime_dependencies.cmake
@@ -10,6 +10,4 @@
#
set(GEM_DEPENDENCIES
- Gem::Atom_RHI_Metal.Private
- Gem::Atom_RHI_Null.Private
)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/Code/Platform/Mac/tool_dependencies.cmake b/AutomatedTesting/Gem/Code/Platform/Mac/tool_dependencies.cmake
index 2e9d450ab8..ffcaf7293a 100644
--- a/AutomatedTesting/Gem/Code/Platform/Mac/tool_dependencies.cmake
+++ b/AutomatedTesting/Gem/Code/Platform/Mac/tool_dependencies.cmake
@@ -10,10 +10,4 @@
#
set(GEM_DEPENDENCIES
- Gem::Atom_RHI_Null.Private
- Gem::Atom_RHI_Null.Builders
- Gem::Atom_RHI_Metal.Private
- Gem::Atom_RHI_Metal.Builders
- Gem::Atom_RHI_Vulkan.Builders
- Gem::Atom_RHI_DX12.Builders
)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/Code/Platform/Windows/runtime_dependencies.cmake b/AutomatedTesting/Gem/Code/Platform/Windows/runtime_dependencies.cmake
index 0a1541bcfc..ffcaf7293a 100644
--- a/AutomatedTesting/Gem/Code/Platform/Windows/runtime_dependencies.cmake
+++ b/AutomatedTesting/Gem/Code/Platform/Windows/runtime_dependencies.cmake
@@ -10,7 +10,4 @@
#
set(GEM_DEPENDENCIES
- Gem::Atom_RHI_Vulkan.Private
- Gem::Atom_RHI_DX12.Private
- Gem::Atom_RHI_Null.Private
)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/Code/Platform/Windows/tool_dependencies.cmake b/AutomatedTesting/Gem/Code/Platform/Windows/tool_dependencies.cmake
index ddd3bfa6a7..933dd7927b 100644
--- a/AutomatedTesting/Gem/Code/Platform/Windows/tool_dependencies.cmake
+++ b/AutomatedTesting/Gem/Code/Platform/Windows/tool_dependencies.cmake
@@ -11,11 +11,4 @@
set(GEM_DEPENDENCIES
Gem::QtForPython.Editor
- Gem::Atom_RHI_Vulkan.Private
- Gem::Atom_RHI_Vulkan.Builders
- Gem::Atom_RHI_DX12.Private
- Gem::Atom_RHI_DX12.Builders
- Gem::Atom_RHI_Null.Private
- Gem::Atom_RHI_Null.Builders
- Gem::Atom_RHI_Metal.Builders
)
\ No newline at end of file
diff --git a/AutomatedTesting/Gem/Code/runtime_dependencies.cmake b/AutomatedTesting/Gem/Code/runtime_dependencies.cmake
index 62a6ed7f8c..280c25bcf7 100644
--- a/AutomatedTesting/Gem/Code/runtime_dependencies.cmake
+++ b/AutomatedTesting/Gem/Code/runtime_dependencies.cmake
@@ -42,17 +42,7 @@ set(GEM_DEPENDENCIES
Gem::SurfaceData
Gem::GradientSignal
Gem::Vegetation
- Gem::Atom_RHI.Private
- Gem::Atom_RPI.Private
- Gem::Atom_Feature_Common
- Gem::Atom_Bootstrap
- Gem::Atom_Component_DebugCamera
- Gem::AtomImGuiTools
- Gem::AtomLyIntegration_CommonFeatures
- Gem::EMotionFX_Atom
- Gem::ImguiAtom
Gem::Atom_AtomBridge
- Gem::AtomFont
Gem::NvCloth
Gem::Blast
)
diff --git a/AutomatedTesting/Gem/Code/tool_dependencies.cmake b/AutomatedTesting/Gem/Code/tool_dependencies.cmake
index a6bbeee350..fc50707c12 100644
--- a/AutomatedTesting/Gem/Code/tool_dependencies.cmake
+++ b/AutomatedTesting/Gem/Code/tool_dependencies.cmake
@@ -50,24 +50,9 @@ set(GEM_DEPENDENCIES
Gem::Vegetation.Editor
Gem::GraphModel.Editor
Gem::LandscapeCanvas.Editor
- Gem::Atom_RHI.Private
Gem::EMotionFX.Editor
- Gem::Atom_RPI.Builders
- Gem::Atom_RPI.Editor
- Gem::Atom_Feature_Common.Builders
- Gem::Atom_Feature_Common.Editor
Gem::ImGui.Editor
- Gem::Atom_Bootstrap
- Gem::Atom_Asset_Shader.Builders
- Gem::Atom_Component_DebugCamera
- Gem::AtomImGuiTools
- Gem::AtomLyIntegration_CommonFeatures.Editor
- Gem::EMotionFX_Atom.Editor
- Gem::ImageProcessingAtom.Editor
Gem::Atom_AtomBridge.Editor
- Gem::ImguiAtom
- Gem::AtomFont
- Gem::AtomToolsFramework.Editor
Gem::NvCloth.Editor
Gem::Blast.Editor
)
diff --git a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
index 3124f1048a..3f0827f995 100644
--- a/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
+++ b/AutomatedTesting/Gem/PythonTests/CMakeLists.txt
@@ -123,6 +123,21 @@ if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
)
endif()
+## Prefab ##
+if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
+ ly_add_pytest(
+ NAME AutomatedTesting::PrefabTests
+ TEST_SUITE main
+ TEST_SERIAL
+ PATH ${CMAKE_CURRENT_LIST_DIR}/prefab/TestSuite_Main.py
+ TIMEOUT 1500
+ RUNTIME_DEPENDENCIES
+ Legacy::Editor
+ AZ::AssetProcessor
+ AutomatedTesting.Assets
+ )
+endif()
+
## Editor Python Bindings ##
if(PAL_TRAIT_BUILD_TESTS_SUPPORTED AND PAL_TRAIT_BUILD_HOST_TOOLS)
ly_add_pytest(
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py
index 1ccfc43585..d0c6fc3c5a 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilterOverrides_InstancesPlantAtSpecifiedRadius.py
@@ -82,42 +82,34 @@ class TestDistanceBetweenFilterComponentOverrides(EditorTestHelper):
editor.EditorComponentAPIBus(bus.Broadcast, "SetComponentProperty", veg_system_settings_component,
'Configuration|Area System Settings|Sector Point Density', 16)
- # Add a Vegetation Debugger component to allow area refreshes
- hydra.add_level_component("Vegetation Debugger")
-
# 5) Add a Vegetation Distance Between Filter, toggle overrides on both the component and descriptor,
# and verify initial instance counts are accurate
spawner_entity.add_component("Vegetation Distance Between Filter")
spawner_entity.get_set_test(3, "Configuration|Allow Per-Item Overrides", True)
spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[0]|Distance Between Filter (Radius)|Override Enabled", True)
- general.run_console('veg_debugClearAllAreas')
- self.test_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 2), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 2), 5.0) and \
- self.test_success
+ num_expected = 16 * 16
+ initial_success = self.wait_for_condition(lambda: dynveg.validate_instance_count_in_entity_shape(spawner_entity.id, num_expected), 5.0)
+ self.test_success = self.test_success and initial_success
# 6) Change Radius Min to 1.0, refresh, and verify instance counts are accurate
spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[0]|Distance Between Filter (Radius)|Radius Min", 1.0)
- general.run_console('veg_debugClearAllAreas')
- self.test_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 1), 5.0) and \
- self.test_success
+ point_a_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0)
+ point_b_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0)
+ point_c_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 1), 5.0)
+ self.test_success = self.test_success and point_a_success and point_b_success and point_c_success
# 7) Change Radius Min to 2.0, refresh, and verify instance counts are accurate
spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[0]|Distance Between Filter (Radius)|Radius Min", 2.0)
- general.run_console('veg_debugClearAllAreas')
- self.test_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 0), 5.0) and \
- self.test_success
+ point_a_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0)
+ point_b_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0)
+ point_c_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 0), 5.0)
+ self.test_success = self.test_success and point_a_success and point_b_success and point_c_success
# 8) Change Radius Min to 16.0, refresh, and verify instance counts are accurate, only a single instance should plant
spawner_entity.get_set_test(2, "Configuration|Embedded Assets|[0]|Distance Between Filter (Radius)|Radius Min", 16.0)
- general.run_console('veg_debugClearAllAreas')
num_expected_instances = 1
final_check_success = self.wait_for_condition(lambda: dynveg.validate_instance_count_in_entity_shape(spawner_entity.id, num_expected_instances), 5.0)
- self.test_success = final_check_success and self.test_success
+ self.test_success = self.test_success and final_check_success
test = TestDistanceBetweenFilterComponentOverrides()
diff --git a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py
index 09c5fd63cf..d342afd7ca 100755
--- a/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py
+++ b/AutomatedTesting/Gem/PythonTests/largeworlds/dyn_veg/EditorScripts/DistanceBetweenFilter_InstancesPlantAtSpecifiedRadius.py
@@ -80,35 +80,29 @@ class TestDistanceBetweenFilterComponent(EditorTestHelper):
editor.EditorComponentAPIBus(bus.Broadcast, "SetComponentProperty", veg_system_settings_component,
'Configuration|Area System Settings|Sector Point Density', 16)
- # Add a Vegetation Debugger component to allow area refreshes
- hydra.add_level_component("Vegetation Debugger")
-
# 5) Add a Vegetation Distance Between Filter and verify initial instance counts are accurate
spawner_entity.add_component("Vegetation Distance Between Filter")
- self.test_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 2), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 2), 5.0) and \
- self.test_success
+ num_expected = 16 * 16
+ num_expected = 16 * 16
+ initial_success = self.wait_for_condition(lambda: dynveg.validate_instance_count_in_entity_shape(spawner_entity.id, num_expected), 5.0)
+ self.test_success = self.test_success and initial_success
# 6) Change Radius Min to 1.0, refresh, and verify instance counts are accurate
spawner_entity.get_set_test(3, "Configuration|Radius Min", 1.0)
- general.run_console('veg_debugClearAllAreas')
- self.test_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 1), 5.0) and \
- self.test_success
+ point_a_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0)
+ point_b_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0)
+ point_c_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 1), 5.0)
+ self.test_success = self.test_success and point_a_success and point_b_success and point_c_success
# 7) Change Radius Min to 2.0, refresh, and verify instance counts are accurate
spawner_entity.get_set_test(3, "Configuration|Radius Min", 2.0)
- general.run_console('veg_debugClearAllAreas')
- self.test_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0) and \
- self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 0), 5.0) and \
- self.test_success
+ point_a_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_a, 0.5, 1), 5.0)
+ point_b_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_b, 0.5, 0), 5.0)
+ point_c_success = self.wait_for_condition(lambda: dynveg.validate_instance_count(instance_query_point_c, 0.5, 0), 5.0)
+ self.test_success = self.test_success and point_a_success and point_b_success and point_c_success
# 8) Change Radius Min to 16.0, refresh, and verify instance counts are accurate
spawner_entity.get_set_test(3, "Configuration|Radius Min", 16.0)
- general.run_console('veg_debugClearAllAreas')
num_expected_instances = 1
final_check_success = self.wait_for_condition(lambda: dynveg.validate_instance_count_in_entity_shape(spawner_entity.id, num_expected_instances), 5.0)
self.test_success = final_check_success and self.test_success
diff --git a/AutomatedTesting/Gem/PythonTests/prefab/PrefabLevel_OpensLevelWithEntities.py b/AutomatedTesting/Gem/PythonTests/prefab/PrefabLevel_OpensLevelWithEntities.py
new file mode 100644
index 0000000000..3401c6a0a9
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/prefab/PrefabLevel_OpensLevelWithEntities.py
@@ -0,0 +1,76 @@
+"""
+All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
+its licensors.
+
+For complete copyright and license terms please see the LICENSE at the root of this
+distribution (the "License"). All use of this software is governed by the License,
+or, if provided, by the license below or the license accompanying this file. Do not
+remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+"""
+
+# fmt:off
+class Tests():
+ find_empty_entity = ("Entity: 'EmptyEntity' found", "Entity: 'EmptyEntity' *not* found in level")
+ empty_entity_pos = ("'EmptyEntity' position is at the expected position", "'EmptyEntity' position is *not* at the expected position")
+ find_pxentity = ("Entity: 'EntityWithPxCollider' found", "Entity: 'EntityWithPxCollider' *not* found in level")
+ pxentity_component = ("Entity: 'EntityWithPxCollider' has a Physx Collider", "Entity: 'EntityWithPxCollider' does *not* have a Physx Collider")
+
+# fmt:on
+
+def PrefabLevel_OpensLevelWithEntities():
+ """
+ Opens the level that contains 2 entities, "EmptyEntity" and "EntityWithPxCollider".
+ This test makes sure that both entities exist after opening the level and that:
+ - EmptyEntity is at Position: (10, 20, 30)
+ - EntityWithPxCollider has a PhysXCollider component
+ """
+
+ import os
+ import sys
+
+ from editor_python_test_tools.utils import Report
+ from editor_python_test_tools.utils import TestHelper as helper
+
+ import editor_python_test_tools.hydra_editor_utils as hydra
+
+ import azlmbr.entity as entity
+ import azlmbr.bus as bus
+ from azlmbr.math import Vector3
+
+ EXPECTED_EMPTY_ENTITY_POS = Vector3(10.00, 20.0, 30.0)
+
+ helper.init_idle()
+ helper.open_level("prefab", "PrefabLevel_OpensLevelWithEntities")
+
+ def find_entity(entity_name):
+ searchFilter = entity.SearchFilter()
+ searchFilter.names = [entity_name]
+ entityIds = entity.SearchBus(bus.Broadcast, 'SearchEntities', searchFilter)
+ if entityIds[0].IsValid():
+ return entityIds[0]
+ return None
+#Checks for an entity called "EmptyEntity"
+ helper.wait_for_condition(lambda: find_entity("EmptyEntity").IsValid(), 5.0)
+ empty_entity_id = find_entity("EmptyEntity")
+ Report.result(Tests.find_empty_entity, empty_entity_id.IsValid())
+
+# Checks if the EmptyEntity is in the correct position and if it fails, it will provide the expected postion and the actual postion of the entity in the Editor log
+ empty_entity_pos = azlmbr.components.TransformBus(azlmbr.bus.Event, "GetWorldTranslation", empty_entity_id)
+ is_at_position = empty_entity_pos.IsClose(EXPECTED_EMPTY_ENTITY_POS)
+ Report.result(Tests.empty_entity_pos, is_at_position)
+ if not is_at_position:
+ Report.info(f'Expected position: {EXPECTED_EMPTY_ENTITY_POS.ToString()}, actual position: {empty_entity_pos.ToString()}')
+
+#Checks for an entity called "EntityWithPxCollider" and if it has the PhysX Collider component
+ pxentity = find_entity("EntityWithPxCollider")
+ Report.result(Tests.find_pxentity, pxentity.IsValid())
+
+ pxcollider_id = hydra.get_component_type_id("PhysX Collider")
+ hasComponent = azlmbr.editor.EditorComponentAPIBus(azlmbr.bus.Broadcast, 'HasComponentOfType', pxentity, pxcollider_id)
+ Report.result(Tests.pxentity_component, hasComponent)
+
+if __name__ == "__main__":
+
+ from editor_python_test_tools.utils import Report
+ Report.start_test (PrefabLevel_OpensLevelWithEntities)
diff --git a/AutomatedTesting/Gem/PythonTests/prefab/TestSuite_Main.py b/AutomatedTesting/Gem/PythonTests/prefab/TestSuite_Main.py
new file mode 100644
index 0000000000..51c78a99e2
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/prefab/TestSuite_Main.py
@@ -0,0 +1,35 @@
+"""
+ All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
+ its licensors.
+
+ For complete copyright and license terms please see the LICENSE at the root of this
+ distribution (the "License"). All use of this software is governed by the License,
+ or, if provided, by the license below or the license accompanying this file. Do not
+ remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+
+ """
+
+# This suite consists of all test cases that are passing and have been verified.
+
+import pytest
+import os
+import sys
+
+from ly_test_tools import LAUNCHERS
+
+sys.path.append (os.path.dirname (os.path.abspath (__file__)) + '/../automatedtesting_shared')
+
+from base import TestAutomationBase
+
+@pytest.mark.SUITE_main
+@pytest.mark.parametrize("launcher_platform", ['windows_editor'])
+@pytest.mark.parametrize("project", ["AutomatedTesting"])
+class TestAutomation(TestAutomationBase):
+
+ def _run_prefab_test(self, request, workspace, editor, test_module):
+ self._run_test(request, workspace, editor, test_module, ["--regset=/Amazon/Preferences/EnablePrefabSystem=true"])
+
+ def test_PrefabLevel_OpensLevelWithEntities(self, request, workspace, editor, launcher_platform):
+ from . import PrefabLevel_OpensLevelWithEntities as test_module
+ self._run_prefab_test(request, workspace, editor, test_module)
diff --git a/AutomatedTesting/Gem/PythonTests/prefab/__init__.py b/AutomatedTesting/Gem/PythonTests/prefab/__init__.py
new file mode 100644
index 0000000000..79f8fa4422
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/prefab/__init__.py
@@ -0,0 +1,10 @@
+"""
+All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
+its licensors.
+
+For complete copyright and license terms please see the LICENSE at the root of this
+distribution (the "License"). All use of this software is governed by the License,
+or, if provided, by the license below or the license accompanying this file. Do not
+remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+"""
diff --git a/AutomatedTesting/Gem/PythonTests/scripting/Node_HappyPath_DuplicateNode.py b/AutomatedTesting/Gem/PythonTests/scripting/Node_HappyPath_DuplicateNode.py
new file mode 100644
index 0000000000..77d3b2fcde
--- /dev/null
+++ b/AutomatedTesting/Gem/PythonTests/scripting/Node_HappyPath_DuplicateNode.py
@@ -0,0 +1,117 @@
+"""
+All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
+its licensors.
+
+For complete copyright and license terms please see the LICENSE at the root of this
+distribution (the "License"). All use of this software is governed by the License,
+or, if provided, by the license below or the license accompanying this file. Do not
+remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+"""
+
+
+# fmt: off
+class Tests():
+ node_duplicated = ("Successfully duplicated node", "Failed to duplicate the node")
+# fmt: on
+
+
+def Node_HappyPath_DuplicateNode():
+ """
+ Summary:
+ Duplicating node in graph
+
+ Expected Behavior:
+ Upon selecting a node and pressing Ctrl+D, the node will be duplicated
+
+ Test Steps:
+ 1) Open Script Canvas window (Tools > Script Canvas)
+ 2) Open a new graph
+ 3) Add node to graph
+ 4) Duplicate node
+ 5) Verify the node was duplicated6) Verify the node was duplicated
+
+ Note:
+ - This test file must be called from the Open 3D Engine Editor command terminal
+ - Any passed and failed tests are written to the Editor.log file.
+ Parsing the file or running a log_monitor are required to observe the test results.
+
+ :return: None
+ """
+ from PySide2 import QtWidgets, QtTest
+ from PySide2.QtCore import Qt
+
+ from editor_python_test_tools.utils import Report
+ from editor_python_test_tools.utils import TestHelper as helper
+ import editor_python_test_tools.pyside_utils as pyside_utils
+
+ import azlmbr.legacy.general as general
+
+ WAIT_FRAMES = 200
+
+ NODE_NAME = "Print"
+ NODE_CATEGORY = "Debug"
+ EXPECTED_STRING = f"{NODE_NAME} - {NODE_CATEGORY} (2 Selected)"
+
+ def command_line_input(command_str):
+ cmd_action = pyside_utils.find_child_by_pattern(
+ sc_main, {"objectName": "action_ViewCommandLine", "type": QtWidgets.QAction}
+ )
+ cmd_action.trigger()
+ textbox = sc.findChild(QtWidgets.QLineEdit, "commandText")
+ QtTest.QTest.keyClicks(textbox, command_str)
+ QtTest.QTest.keyClick(textbox, Qt.Key_Enter, Qt.NoModifier)
+
+ def grab_title_text():
+ scroll_area = node_inspector.findChild(QtWidgets.QScrollArea, "")
+ QtTest.QTest.keyClick(graph, "a", Qt.ControlModifier, WAIT_FRAMES)
+ background = scroll_area.findChild(QtWidgets.QFrame, "Background")
+ title = background.findChild(QtWidgets.QLabel, "Title")
+ text = title.findChild(QtWidgets.QLabel, "Title")
+ return text.text()
+
+ # 1) Open Script Canvas window (Tools > Script Canvas)
+ general.idle_enable(True)
+ general.open_pane("Script Canvas")
+ helper.wait_for_condition(lambda: general.is_pane_visible("Script Canvas"), 5.0)
+
+ # 2) Open a new graph
+ editor_window = pyside_utils.get_editor_main_window()
+ sc = editor_window.findChild(QtWidgets.QDockWidget, "Script Canvas")
+ sc_main = sc.findChild(QtWidgets.QMainWindow)
+ create_new_graph = pyside_utils.find_child_by_pattern(
+ sc_main, {"objectName": "action_New_Script", "type": QtWidgets.QAction}
+ )
+ if sc.findChild(QtWidgets.QDockWidget, "NodeInspector") is None:
+ action = pyside_utils.find_child_by_pattern(sc, {"text": "Node Inspector", "type": QtWidgets.QAction})
+ action.trigger()
+ node_inspector = sc.findChild(QtWidgets.QDockWidget, "NodeInspector")
+ create_new_graph.trigger()
+
+ # 3) Add node
+ command_line_input("add_node Print")
+
+ # 4) Duplicate node
+ graph_view = sc.findChild(QtWidgets.QFrame, "graphicsViewFrame")
+ graph = graph_view.findChild(QtWidgets.QWidget, "")
+ # There are currently no utilities available to directly duplicate the node,
+ # therefore the node is selected using CTRL+A on the graph to select
+ # it and then CTRL+D to duplicate
+ sc_main.activateWindow()
+ QtTest.QTest.keyClick(graph, "a", Qt.ControlModifier, WAIT_FRAMES)
+ QtTest.QTest.keyClick(graph, "d", Qt.ControlModifier, WAIT_FRAMES)
+
+ # 5) Verify the node was duplicated
+ # As direct interaction with node is not available the text on the label
+ # inside the Node Inspector is validated showing two nodes exist
+ after_dup = grab_title_text()
+ Report.result(Tests.node_duplicated, after_dup == EXPECTED_STRING)
+
+
+if __name__ == "__main__":
+ import ImportPathHelper as imports
+
+ imports.init()
+ from editor_python_test_tools.utils import Report
+
+ Report.start_test(Node_HappyPath_DuplicateNode)
diff --git a/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Active.py b/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Active.py
index dda75f0a0c..2cd41d1980 100755
--- a/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Active.py
+++ b/AutomatedTesting/Gem/PythonTests/scripting/TestSuite_Active.py
@@ -84,7 +84,7 @@ class TestAutomation(TestAutomationBase):
file_system.delete([os.path.join(workspace.paths.project(), "Levels", level)], True, True)
from . import OnEntityActivatedDeactivated_PrintMessage as test_module
self._run_test(request, workspace, editor, test_module)
-
+
@pytest.mark.test_case_id("T92562993")
def test_NodePalette_ClearSelection(self, request, workspace, editor, launcher_platform, project):
from . import NodePalette_ClearSelection as test_module
@@ -122,7 +122,7 @@ class TestAutomation(TestAutomationBase):
def test_NodeInspector_RenameVariable(self, request, workspace, editor, launcher_platform, project):
from . import NodeInspector_RenameVariable as test_module
self._run_test(request, workspace, editor, test_module)
-
+
@pytest.mark.test_case_id("T92569137")
def test_Debugging_TargetMultipleGraphs(self, request, workspace, editor, launcher_platform, project):
from . import Debugging_TargetMultipleGraphs as test_module
@@ -195,7 +195,7 @@ class TestAutomation(TestAutomationBase):
def test_NodeCategory_ExpandOnClick(self, request, workspace, editor, launcher_platform):
from . import NodeCategory_ExpandOnClick as test_module
self._run_test(request, workspace, editor, test_module)
-
+
def test_NodePalette_SearchText_Deletion(self, request, workspace, editor, launcher_platform):
from . import NodePalette_SearchText_Deletion as test_module
self._run_test(request, workspace, editor, test_module)
@@ -204,6 +204,10 @@ class TestAutomation(TestAutomationBase):
from . import VariableManager_UnpinVariableType_Works as test_module
self._run_test(request, workspace, editor, test_module)
+ def test_Node_HappyPath_DuplicateNode(self, request, workspace, editor, launcher_platform):
+ from . import Node_HappyPath_DuplicateNode as test_module
+ self._run_test(request, workspace, editor, test_module)
+
# NOTE: We had to use hydra_test_utils.py, as TestAutomationBase run_test method
# fails because of pyside_utils import
@pytest.mark.SUITE_periodic
diff --git a/AutomatedTesting/Levels/Prefab/PrefabLevel_OpensLevelWithEntities/PrefabLevel_OpensLevelWithEntities.prefab b/AutomatedTesting/Levels/Prefab/PrefabLevel_OpensLevelWithEntities/PrefabLevel_OpensLevelWithEntities.prefab
new file mode 100644
index 0000000000..0776f25935
--- /dev/null
+++ b/AutomatedTesting/Levels/Prefab/PrefabLevel_OpensLevelWithEntities/PrefabLevel_OpensLevelWithEntities.prefab
@@ -0,0 +1,171 @@
+{
+ "Source": "Levels/PrefabLevel_OpensLevelWithEntities/PrefabLevel_OpensLevelWithEntities.prefab",
+ "ContainerEntity": {
+ "Id": "Entity_[403811863694]",
+ "Name": "Level",
+ "Components": {
+ "Component_[10582285743525614098]": {
+ "$type": "SelectionComponent",
+ "Id": 10582285743525614098
+ },
+ "Component_[12253783095375428046]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 12253783095375428046
+ },
+ "Component_[13764860261821571747]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 13764860261821571747,
+ "Parent Entity": ""
+ },
+ "Component_[15844324401733835865]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 15844324401733835865
+ },
+ "Component_[1605854641405361768]": {
+ "$type": "EditorLockComponent",
+ "Id": 1605854641405361768
+ },
+ "Component_[17698173984524983803]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 17698173984524983803
+ },
+ "Component_[3444251662966224826]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 3444251662966224826
+ },
+ "Component_[4231768881195179982]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 4231768881195179982
+ },
+ "Component_[4722360315410084479]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 4722360315410084479
+ },
+ "Component_[7614719100624882952]": {
+ "$type": "EditorPrefabComponent",
+ "Id": 7614719100624882952
+ },
+ "Component_[9585901769691795481]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 9585901769691795481
+ }
+ },
+ "IsDependencyReady": true
+ },
+ "Entities": {
+ "Entity_[438171602062]": {
+ "Id": "Entity_[438171602062]",
+ "Name": "EntityWithPxCollider",
+ "Components": {
+ "Component_[11161653124805884473]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 11161653124805884473
+ },
+ "Component_[13116773315299882093]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 13116773315299882093
+ },
+ "Component_[15820915681461536711]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 15820915681461536711
+ },
+ "Component_[2222061938345834243]": {
+ "$type": "SelectionComponent",
+ "Id": 2222061938345834243
+ },
+ "Component_[3861913165076405600]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 3861913165076405600
+ },
+ "Component_[7118587015611303204]": {
+ "$type": "EditorLockComponent",
+ "Id": 7118587015611303204
+ },
+ "Component_[7751174327125555504]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 7751174327125555504
+ },
+ "Component_[8304730147756374057]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 8304730147756374057,
+ "Parent Entity": "Entity_[403811863694]",
+ "Transform Data": {
+ "Translate": [
+ 0.0,
+ 20.0,
+ 34.0
+ ]
+ }
+ },
+ "Component_[8866353210615920259]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 8866353210615920259
+ },
+ "Component_[8988181228601932779]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 8988181228601932779
+ },
+ "Component_[7103333782129541775]": {
+ "$type": "EditorColliderComponent",
+ "Id": 7103333782129541775
+ }
+ },
+ "IsDependencyReady": true
+ },
+ "Entity_[532660882574]": {
+ "Id": "Entity_[532660882574]",
+ "Name": "EmptyEntity",
+ "Components": {
+ "Component_[16437814751543997955]": {
+ "$type": "EditorEntitySortComponent",
+ "Id": 16437814751543997955
+ },
+ "Component_[16751517102089557119]": {
+ "$type": "EditorPendingCompositionComponent",
+ "Id": 16751517102089557119
+ },
+ "Component_[16773275259304187949]": {
+ "$type": "EditorInspectorComponent",
+ "Id": 16773275259304187949
+ },
+ "Component_[17283539636910567200]": {
+ "$type": "SelectionComponent",
+ "Id": 17283539636910567200
+ },
+ "Component_[250004123617033400]": {
+ "$type": "EditorLockComponent",
+ "Id": 250004123617033400
+ },
+ "Component_[2791138963683667073]": {
+ "$type": "{27F1E1A1-8D9D-4C3B-BD3A-AFB9762449C0} TransformComponent",
+ "Id": 2791138963683667073,
+ "Parent Entity": "Entity_[403811863694]",
+ "Transform Data": {
+ "Translate": [
+ 10.0,
+ 20.0,
+ 30.0
+ ]
+ }
+ },
+ "Component_[3296942400051129145]": {
+ "$type": "EditorEntityIconComponent",
+ "Id": 3296942400051129145
+ },
+ "Component_[3422076964671342434]": {
+ "$type": "EditorOnlyEntityComponent",
+ "Id": 3422076964671342434
+ },
+ "Component_[3431895414183121731]": {
+ "$type": "EditorVisibilityComponent",
+ "Id": 3431895414183121731
+ },
+ "Component_[7072085777705148766]": {
+ "$type": "EditorDisabledCompositionComponent",
+ "Id": 7072085777705148766
+ }
+ },
+ "IsDependencyReady": true
+ }
+ }
+}
\ No newline at end of file
diff --git a/AutomatedTesting/Slices/1m_Cube.slice b/AutomatedTesting/Slices/1m_Cube.slice
index 5ace34bd10..b31869c7fa 100644
--- a/AutomatedTesting/Slices/1m_Cube.slice
+++ b/AutomatedTesting/Slices/1m_Cube.slice
@@ -39,6 +39,7 @@
+
@@ -61,7 +62,7 @@
-
+
@@ -122,38 +123,26 @@
-
-
-
-
-
-
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/AutomatedTesting/sounds/.gitignore b/AutomatedTesting/sounds/.gitignore
new file mode 100644
index 0000000000..80c66daa1c
--- /dev/null
+++ b/AutomatedTesting/sounds/.gitignore
@@ -0,0 +1,8 @@
+.backup/
+.cache/
+*.log
+*.akd
+*.dat
+*.prof
+*.validationcache
+*.wsettings
\ No newline at end of file
diff --git a/AutomatedTesting/sounds/wwise/Init.bnk b/AutomatedTesting/sounds/wwise/Init.bnk
index 530a7e007f..292288ff26 100644
--- a/AutomatedTesting/sounds/wwise/Init.bnk
+++ b/AutomatedTesting/sounds/wwise/Init.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:803ddb37eb27cba666f9320c2f5905219193e1a069d1144a64df92fab0e31878
-size 1243
+oid sha256:c9e6a4ef3d2f33f31827ce2bba2ed8bad87324f3fe86f79389ef2956b304a924
+size 1180
diff --git a/AutomatedTesting/sounds/wwise/Init.txt b/AutomatedTesting/sounds/wwise/Init.txt
index 038359ac1a..4b989c4017 100644
--- a/AutomatedTesting/sounds/wwise/Init.txt
+++ b/AutomatedTesting/sounds/wwise/Init.txt
@@ -21,5 +21,4 @@ Audio Bus ID Name Wwise Object Path Notes
Audio Devices ID Name Type Notes
2317455096 No_Output No Output
3859886410 System System
- 4230635974 Default_Motion_Device Wwise Motion
diff --git a/AutomatedTesting/sounds/wwise/PluginInfo.xml b/AutomatedTesting/sounds/wwise/PluginInfo.xml
index 61e689f373..19f3fe9c1b 100644
--- a/AutomatedTesting/sounds/wwise/PluginInfo.xml
+++ b/AutomatedTesting/sounds/wwise/PluginInfo.xml
@@ -1,9 +1,8 @@
-
+
-
-
-
-
+
+
+
diff --git a/AutomatedTesting/sounds/wwise/SoundbanksInfo.xml b/AutomatedTesting/sounds/wwise/SoundbanksInfo.xml
index 22ae71f4dc..d7bfecaa53 100644
--- a/AutomatedTesting/sounds/wwise/SoundbanksInfo.xml
+++ b/AutomatedTesting/sounds/wwise/SoundbanksInfo.xml
@@ -1,11 +1,11 @@
-
+
- Q:\audio\dev\AutomatedTesting\sounds\wwise_project\
- Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\
- Q:\audio\dev\AutomatedTesting\sounds\wwise\
+ D:\code\o3de\AutomatedTesting\sounds\wwise_project\
+ D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\
+ D:\code\o3de\AutomatedTesting\sounds\wwise\
- Q:\audio\dev\AutomatedTesting\sounds\wwise_project\GeneratedSoundBanks\Windows
+ D:\code\o3de\AutomatedTesting\sounds\wwise_project\GeneratedSoundBanks\Windows
@@ -28,7 +28,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank2
test_bank2
test_bank2.bnk
@@ -37,7 +37,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank3
test_bank3
test_bank3.bnk
@@ -60,7 +60,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank1
test_bank1
test_bank1.bnk
@@ -83,7 +83,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank6
test_bank6
test_bank6.bnk
@@ -102,7 +102,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank7
test_bank7
test_bank7.bnk
@@ -125,7 +125,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank4
test_bank4
test_bank4.bnk
@@ -136,7 +136,7 @@
-
+
\SoundBanks\Default Work Unit\test_bank5
test_bank5
test_bank5.bnk
@@ -169,7 +169,7 @@
-
+
Init
Init
Init.bnk
diff --git a/AutomatedTesting/sounds/wwise/test_bank1.bnk b/AutomatedTesting/sounds/wwise/test_bank1.bnk
index 9e8f50a98a..bd0e1e66cb 100644
--- a/AutomatedTesting/sounds/wwise/test_bank1.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank1.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:94ea13931c13592deba669bd4920328ff96f17e6f8fce280d03f00251a96327a
-size 94122
+oid sha256:3db299d7d823b649ff20a7ffc986dccfce1fa3189f178491e2712d6c00b317af
+size 94126
diff --git a/AutomatedTesting/sounds/wwise/test_bank1.txt b/AutomatedTesting/sounds/wwise/test_bank1.txt
index a0c6e13621..5ec2e4b96b 100644
--- a/AutomatedTesting/sounds/wwise/test_bank1.txt
+++ b/AutomatedTesting/sounds/wwise/test_bank1.txt
@@ -3,8 +3,8 @@ Event ID Name Wwise Object Path Notes
865645077 test_event_1_bank1_embedded_target \Default Work Unit\test_event_1_bank1_embedded_target
In Memory Audio ID Name Audio source file Wwise Object Path Notes Data Size
- 23965881 test_sfx_1_bank1_embedded Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\AMZ_sfx_NME_wpn_plasma_pistol_fire_impact004_56D34C19.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_1_bank1_embedded 93864
+ 23965881 test_sfx_1_bank1_embedded D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\AMZ_sfx_NME_wpn_plasma_pistol_fire_impact004_56D34C19.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_1_bank1_embedded 93864
Streamed Audio ID Name Audio source file Generated audio file Wwise Object Path Notes
- 499820003 test_sfx_2_bank1_streamed Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\env_door_scanner_scan_success_56D34C19.wem 499820003.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_2_bank1_streamed
+ 499820003 test_sfx_2_bank1_streamed D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\env_door_scanner_scan_success_56D34C19.wem 499820003.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_2_bank1_streamed
diff --git a/AutomatedTesting/sounds/wwise/test_bank2.bnk b/AutomatedTesting/sounds/wwise/test_bank2.bnk
index 2e31c359bf..ee96554646 100644
--- a/AutomatedTesting/sounds/wwise/test_bank2.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank2.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:ad73fd0981e47fe3313eff51d2841ea5fd522a99103684d696849e7353277ea9
-size 430
+oid sha256:1bdaed4dc5cc514a8a3ddfaf990f59061514af7962a7a112eb677ad5c45fcb85
+size 434
diff --git a/AutomatedTesting/sounds/wwise/test_bank3.bankdeps b/AutomatedTesting/sounds/wwise/test_bank3.bankdeps
index 606dbdbac8..51a952d463 100644
--- a/AutomatedTesting/sounds/wwise/test_bank3.bankdeps
+++ b/AutomatedTesting/sounds/wwise/test_bank3.bankdeps
@@ -2,9 +2,9 @@
"version": "1.0",
"bankName": "test_bank3.bnk",
"dependencies": [
- "196049145.wem",
+ "test_bank4.bnk",
"Init.bnk",
- "test_bank4.bnk"
+ "196049145.wem"
],
"includedEvents": [
"test_event_5_bank3_embedded_target_bank4",
diff --git a/AutomatedTesting/sounds/wwise/test_bank3.bnk b/AutomatedTesting/sounds/wwise/test_bank3.bnk
index 32e6161e6c..6b83836c18 100644
--- a/AutomatedTesting/sounds/wwise/test_bank3.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank3.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:33eabaa646e9567017946bee05b1b5a835e91862f63145ebe5a2fbdd9c9f5a49
-size 226
+oid sha256:57c75cf8745b31071a788a20d8de5a60cedbfb8a6155eae1a461b8c6501e5479
+size 230
diff --git a/AutomatedTesting/sounds/wwise/test_bank3.txt b/AutomatedTesting/sounds/wwise/test_bank3.txt
index ca6efc6e02..9a843afad7 100644
--- a/AutomatedTesting/sounds/wwise/test_bank3.txt
+++ b/AutomatedTesting/sounds/wwise/test_bank3.txt
@@ -3,5 +3,5 @@ Event ID Name Wwise Object Path Notes
645979556 test_event_6_bank3_streamed_target_bank4 \Default Work Unit\test_event_6_bank3_streamed_target_bank4 Event that lives in test_bank3. This event targets only one media, which is streamed from test_bank4.
Streamed Audio ID Name Audio source file Generated audio file Wwise Object Path Notes
- 196049145 test_sfx_6_bank4_streamed Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\AMZ_sfx_NME_wpn_plasma_pistol_fire003_56D34C19.wem 196049145.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_6_bank4_streamed
+ 196049145 test_sfx_6_bank4_streamed D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\AMZ_sfx_NME_wpn_plasma_pistol_fire003_56D34C19.wem 196049145.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_6_bank4_streamed
diff --git a/AutomatedTesting/sounds/wwise/test_bank4.bnk b/AutomatedTesting/sounds/wwise/test_bank4.bnk
index e169744d84..5f5883d559 100644
--- a/AutomatedTesting/sounds/wwise/test_bank4.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank4.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:79d308f3c50fece383fd82fd0060e26558e6a2e78a4ecd5d8afe24907489a88f
+oid sha256:3a635f7d1ccb256caed90d18ca566cd0fa56d49b491af7c88c0b5da55a3ef4fe
size 142234
diff --git a/AutomatedTesting/sounds/wwise/test_bank4.txt b/AutomatedTesting/sounds/wwise/test_bank4.txt
index 770cb7f171..7649b0eed5 100644
--- a/AutomatedTesting/sounds/wwise/test_bank4.txt
+++ b/AutomatedTesting/sounds/wwise/test_bank4.txt
@@ -1,3 +1,3 @@
In Memory Audio ID Name Audio source file Wwise Object Path Notes Data Size
- 666825490 test_sfx_5_bank4_embedded Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\AMZN_sfx_env_commsarray_apllyupdate_end_56D34C19.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_5_bank4_embedded 142170
+ 666825490 test_sfx_5_bank4_embedded D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\AMZN_sfx_env_commsarray_apllyupdate_end_56D34C19.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_5_bank4_embedded 142170
diff --git a/AutomatedTesting/sounds/wwise/test_bank5.bnk b/AutomatedTesting/sounds/wwise/test_bank5.bnk
index b4e629d9a7..168c7c1a4d 100644
--- a/AutomatedTesting/sounds/wwise/test_bank5.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank5.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:80c02f30d439ffcfb479e4a82b0269fe4f479c50019028e51f0fa6e3fea0bfdd
-size 290
+oid sha256:fa329eeb83184e88b7ab26fbff2479a98232210bcd130801041b20ccb3bcf16e
+size 294
diff --git a/AutomatedTesting/sounds/wwise/test_bank5.txt b/AutomatedTesting/sounds/wwise/test_bank5.txt
index 0f66c57f8e..3d560cf9f5 100644
--- a/AutomatedTesting/sounds/wwise/test_bank5.txt
+++ b/AutomatedTesting/sounds/wwise/test_bank5.txt
@@ -5,5 +5,5 @@ Event ID Name Wwise Object Path Notes
3546419658 test_event_7_bank5_referenced_event_bank1_embedded \Default Work Unit\test_event_7_bank5_referenced_event_bank1_embedded
Streamed Audio ID Name Audio source file Generated audio file Wwise Object Path Notes
- 499820003 test_sfx_2_bank1_streamed Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\env_door_scanner_scan_success_56D34C19.wem 499820003.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_2_bank1_streamed
+ 499820003 test_sfx_2_bank1_streamed D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\env_door_scanner_scan_success_56D34C19.wem 499820003.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_2_bank1_streamed
diff --git a/AutomatedTesting/sounds/wwise/test_bank6.bnk b/AutomatedTesting/sounds/wwise/test_bank6.bnk
index 18ee92b51d..4c942037f0 100644
--- a/AutomatedTesting/sounds/wwise/test_bank6.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank6.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:07d132d54b2c747e2409a56c05a4adca0dfa4407b791ffaa6bb14531f92f89aa
-size 494
+oid sha256:80d3014fcfd3a8ff37219515f0c9d67a2a674094002538ac6741702dca07c14d
+size 498
diff --git a/AutomatedTesting/sounds/wwise/test_bank7.bankdeps b/AutomatedTesting/sounds/wwise/test_bank7.bankdeps
index 02be60a544..56cf29c619 100644
--- a/AutomatedTesting/sounds/wwise/test_bank7.bankdeps
+++ b/AutomatedTesting/sounds/wwise/test_bank7.bankdeps
@@ -2,9 +2,9 @@
"version": "1.0",
"bankName": "test_bank7.bnk",
"dependencies": [
+ "656567798.wem",
"601903616.wem",
- "Init.bnk",
- "656567798.wem"
+ "Init.bnk"
],
"includedEvents": [
"test_event_11_bank7_streamed_target",
diff --git a/AutomatedTesting/sounds/wwise/test_bank7.bnk b/AutomatedTesting/sounds/wwise/test_bank7.bnk
index abc398d1f1..c01346fd58 100644
--- a/AutomatedTesting/sounds/wwise/test_bank7.bnk
+++ b/AutomatedTesting/sounds/wwise/test_bank7.bnk
@@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1
-oid sha256:990538a33c72e79d63cab0c191b4e0f199688b923bb6bdcc8888aab375e7d11d
-size 226
+oid sha256:0de33094b9792d7f9ff8042e16b153dd76729e9010d6713e1824d2229c653042
+size 230
diff --git a/AutomatedTesting/sounds/wwise/test_bank7.txt b/AutomatedTesting/sounds/wwise/test_bank7.txt
index 033c2ea5b9..3bf2da686b 100644
--- a/AutomatedTesting/sounds/wwise/test_bank7.txt
+++ b/AutomatedTesting/sounds/wwise/test_bank7.txt
@@ -3,6 +3,6 @@ Event ID Name Wwise Object Path Notes
2110064689 test_event_11_bank7_streamed_target \Default Work Unit\test_event_11_bank7_streamed_target
Streamed Audio ID Name Audio source file Generated audio file Wwise Object Path Notes
- 601903616 test_sfx_8_bank7_streamed Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\gun_blaster_no_trigger_shot_1_56D34C19.wem 601903616.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_8_bank7_streamed
- 656567798 test_sfx_7_bank7_streamed Q:\audio\dev\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\impact_bot_hits_metalelement_56D34C19.wem 656567798.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_7_bank7_streamed
+ 601903616 test_sfx_8_bank7_streamed D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\gun_blaster_no_trigger_shot_1_56D34C19.wem 601903616.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_8_bank7_streamed
+ 656567798 test_sfx_7_bank7_streamed D:\code\o3de\AutomatedTesting\sounds\wwise_project\.cache\Windows\SFX\impact_bot_hits_metalelement_56D34C19.wem 656567798.wem \Actor-Mixer Hierarchy\Default Work Unit\test_sfx_7_bank7_streamed
diff --git a/AutomatedTesting/sounds/wwise_project/Actor-Mixer Hierarchy/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Actor-Mixer Hierarchy/Default Work Unit.wwu
index 8cc6eeecc2..33ac513281 100644
--- a/AutomatedTesting/sounds/wwise_project/Actor-Mixer Hierarchy/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Actor-Mixer Hierarchy/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
@@ -21,6 +21,7 @@
+
@@ -50,6 +51,7 @@
+
@@ -72,6 +74,7 @@
+
@@ -101,6 +104,7 @@
+
@@ -130,6 +134,7 @@
+
@@ -159,6 +164,7 @@
+
@@ -187,6 +193,7 @@
SFX
+
@@ -215,6 +222,7 @@
SFX
+
diff --git a/AutomatedTesting/sounds/wwise_project/Attenuations/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Attenuations/Default Work Unit.wwu
index 9034f07366..955c7d9e4a 100644
--- a/AutomatedTesting/sounds/wwise_project/Attenuations/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Attenuations/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Audio Devices/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Audio Devices/Default Work Unit.wwu
index 472e9b12d1..f56682b0bf 100644
--- a/AutomatedTesting/sounds/wwise_project/Audio Devices/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Audio Devices/Default Work Unit.wwu
@@ -1,11 +1,10 @@
-
+
-
diff --git a/AutomatedTesting/sounds/wwise_project/AutomatedTesting.wproj b/AutomatedTesting/sounds/wwise_project/AutomatedTesting.wproj
new file mode 100644
index 0000000000..1aead159ad
--- /dev/null
+++ b/AutomatedTesting/sounds/wwise_project/AutomatedTesting.wproj
@@ -0,0 +1,13491 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ GeneratedSoundBanks\Windows
+
+
+
+
+ 256
+
+
+
+
+
+ ..\wwise\
+
+
+
+
+ Copy Streamed Files and Generate Dependency Info
+
+
+
+
+ "$(CopyStreamedFilesExePath)" -info "$(InfoFilePath)" -outputpath "$(SoundBankPath)" -banks "$(SoundBankListAsTextFile)" -languages "$(LanguageList)"
+"$(WwiseProjectPath)\..\..\..\python\python.cmd" "$(WwiseProjectPath)\..\..\..\Gems\AudioEngineWwise\Tools\WwiseAuthoringScripts\bank_info_parser.py" "$(InfoFilePath)" "$(SoundBankPath)"
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ -80
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 8
+
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+ -1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ -1
+
+
+
+
+ -1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 2
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ 65535
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 60
+
+
+
+
+ 0
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 10000
+
+
+
+
+ 1
+
+
+
+
+ 400
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ -96
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 16
+
+
+
+
+ -96
+
+
+
+
+ 0
+
+
+
+
+ 48000
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 16
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+ 75
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 512
+
+
+
+
+ -50
+
+
+
+
+ -30
+
+
+
+
+ -40
+
+
+
+
+ 0
+
+
+
+
+ 24024
+
+
+
+
+ 0
+
+
+
+
+ 8
+
+
+
+
+ English(US)
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 256
+
+
+
+
+
+
+
+
+
+ 50
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ -80
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 64
+
+
+
+
+ 1.5
+
+
+
+
+ 2
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 64
+
+
+
+
+ 64
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ 0.1
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 20
+
+
+
+
+ 10000
+
+
+
+
+ 0.2
+
+
+
+
+ True
+
+
+
+
+ 80
+
+
+
+
+ 0.2
+
+
+
+
+ False
+
+
+
+
+ 200
+
+
+
+
+ 0.25
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 1
+
+
+
+
+ 200
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 1
+
+
+
+
+ 200
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 40
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 160
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+ 0.2
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+ 0.2
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0.2
+
+
+
+
+ 0
+
+
+
+
+ 0.2
+
+
+
+
+ 0.2
+
+
+
+
+ 3000
+
+
+
+
+ 0.2
+
+
+
+
+ 0
+
+
+
+
+ 6
+
+
+
+
+ 15000
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 20000
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+ 0.2
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+ 0.2
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ 65535
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 60
+
+
+
+
+ 0
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ 65535
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 60
+
+
+
+
+ 0
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 2
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ True
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 5000
+
+
+
+
+ 10000
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 3
+
+
+
+
+ 9
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ 65535
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 60
+
+
+
+
+ 0
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+
+ 5000
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 96
+
+
+
+
+ -100
+
+
+
+
+ -100
+
+
+
+
+ -100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 35
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 3
+
+
+
+
+ 9
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 64
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -96
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 50
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 4000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 120
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ 65535
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 60
+
+
+
+
+ 0
+
+
+
+
+ 127
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ -1
+
+
+
+
+ 0
+
+
+
+
+ -1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 120
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 12
+
+
+
+
+ False
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+ False
+
+
+
+
+ -10
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 120
+
+
+
+
+ 4
+
+
+
+
+ 4
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 7
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ -6
+
+
+
+
+ 0
+
+
+
+
+ 90
+
+
+
+
+ 0
+
+
+
+
+ 245
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 8
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 0.2
+
+
+
+
+ False
+
+
+
+
+ 0.2
+
+
+
+
+ 0.5
+
+
+
+
+ True
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 4
+
+
+
+
+ 1
+
+
+
+
+ 440
+
+
+
+
+ -12
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -12
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ -12
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 10
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 4
+
+
+
+
+ 6
+
+
+
+
+ 5
+
+
+
+
+ 100
+
+
+
+
+ 1000
+
+
+
+
+ 12000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+ 15
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 25
+
+
+
+
+
+
+
+
+ 0.1
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 1.5
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0.1
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 3
+
+
+
+
+ 0.01
+
+
+
+
+ -40
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0.01
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 10
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 1
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 40
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 18000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 10
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ -40
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 40
+
+
+
+
+ 18000
+
+
+
+
+ -96
+
+
+
+
+ -20
+
+
+
+
+ 20
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 13.62
+
+
+
+
+ 26.09
+
+
+
+
+ 26.55
+
+
+
+
+ 26.91
+
+
+
+
+ 28.04
+
+
+
+
+ 29.09
+
+
+
+
+ 29.9
+
+
+
+
+ 30.86
+
+
+
+
+ 15.66
+
+
+
+
+ 17.52
+
+
+
+
+ 19.02
+
+
+
+
+ 20.83
+
+
+
+
+ 22.6
+
+
+
+
+ 24.05
+
+
+
+
+ 24.78
+
+
+
+
+ 25.6
+
+
+
+
+ -96.3
+
+
+
+
+ 2
+
+
+
+
+ True
+
+
+
+
+ 8
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 4
+
+
+
+
+ -35
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ -96.3
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 40
+
+
+
+
+ 1.2
+
+
+
+
+ 80
+
+
+
+
+ 50
+
+
+
+
+ 8
+
+
+
+
+ 2
+
+
+
+
+ 100
+
+
+
+
+ 15
+
+
+
+
+ 5
+
+
+
+
+ 66
+
+
+
+
+ -96.3
+
+
+
+
+ 0
+
+
+
+
+ -20
+
+
+
+
+ 23
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 3
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 3
+
+
+
+
+ 1
+
+
+
+
+ 2
+
+
+
+
+ 10000
+
+
+
+
+ 0
+
+
+
+
+ 3
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 2.25
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ -96.3
+
+
+
+
+ -96.3
+
+
+
+
+ False
+
+
+
+
+ 25
+
+
+
+
+ 8
+
+
+
+
+ 0
+
+
+
+
+ -20
+
+
+
+
+ 100
+
+
+
+
+ 50
+
+
+
+
+ 100
+
+
+
+
+ 0.8
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+ 180
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 5
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0.25
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0.5
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 10
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 440
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 440
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 50
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -96.3
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -75
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 6
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 100
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ -96.3
+
+
+
+
+ 0
+
+
+
+
+ -60
+
+
+
+
+ -96.3
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+ 48000
+
+
+
+
+ 48000
+
+
+
+
+ 48000
+
+
+
+
+ 180
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -48
+
+
+
+
+ False
+
+
+
+
+ 0.1
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 2048
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 100
+
+
+
+
+ 1
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ Recorder.wav
+
+
+
+
+ -3
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ True
+
+
+
+
+ -96.3
+
+
+
+
+ False
+
+
+
+
+ -3
+
+
+
+
+ -3
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ -100
+
+
+
+
+ True
+
+
+
+
+ -12
+
+
+
+
+ 0.1
+
+
+
+
+ -12
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ -12
+
+
+
+
+ 0.1
+
+
+
+
+ -12
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 50
+
+
+
+
+ -96
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1024
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -96
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ -6
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ -6
+
+
+
+
+ 50
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 250
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ -96
+
+
+
+
+ 3
+
+
+
+
+ True
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0.5
+
+
+
+
+ 0
+
+
+
+
+ 2400
+
+
+
+
+ 345
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 32
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 10
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 20000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0.707
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 256
+
+
+
+
+ False
+
+
+
+
+ 100
+
+
+
+
+ 100
+
+
+
+
+ 100
+
+
+
+
+ 100
+
+
+
+
+ 1000
+
+
+
+
+ 1000
+
+
+
+
+ 1000
+
+
+
+
+ 1000
+
+
+
+
+ 20000
+
+
+
+
+ 20000
+
+
+
+
+ 20000
+
+
+
+
+ 20000
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 5
+
+
+
+
+ 5
+
+
+
+
+ 9
+
+
+
+
+ 9
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 16641
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 10
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 60
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+ 0.01
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+ 0.01
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+ 0.01
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+ 0.01
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0.1
+
+
+
+
+ 0
+
+
+
+
+ 150
+
+
+
+
+ 1000
+
+
+
+
+ 6000
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 4
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ True
+
+
+
+
+ 5
+
+
+
+
+ 100
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 3
+
+
+
+
+ 200
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 3
+
+
+
+
+ 500
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 4
+
+
+
+
+ 1000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 3
+
+
+
+
+ 3000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ False
+
+
+
+
+ 3
+
+
+
+
+ 6000
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 4
+
+
+
+
+
+
+
+
+ -12
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ -12
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 6
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ 0.6
+
+
+
+
+ 0.6
+
+
+
+
+ 0.5
+
+
+
+
+ 0.3
+
+
+
+
+ 0.05
+
+
+
+
+ 0.25
+
+
+
+
+ 0.02
+
+
+
+
+ 1.5
+
+
+
+
+ 0.2
+
+
+
+
+ 0.3
+
+
+
+
+ True
+
+
+
+
+ 0.2
+
+
+
+
+ 8
+
+
+
+
+ 0.2
+
+
+
+
+ 12
+
+
+
+
+
+
+
+
+ 20
+
+
+
+
+ 0.7
+
+
+
+
+ 100
+
+
+
+
+ 0.1
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ True
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 3
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+ 2
+
+
+
+
+ 0.7
+
+
+
+
+ 1
+
+
+
+
+ 0
+
+
+
+
+ 1
+
+
+
+
+ 0.9
+
+
+
+
+ 0.1
+
+
+
+
+ 3
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ 2
+
+
+
+
+ False
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 1
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+
+
+
+
+
+
+
+
+ False
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ 1.4
+
+
+
+
+ -6
+
+
+
+
+ True
+
+
+
+
+ 0
+
+
+
+
+ 0
+
+
+
+
+ False
+
+
+
+
+ True
+
+
+
+
+ 0.5
+
+
+
+
+ 10000
+
+
+
+
+ -6
+
+
+
+
+ 7
+
+
+
+
+ 1
+
+
+
+
+ 1
+
+
+
+
+ 7.25
+
+
+
+
+ 2.75
+
+
+
+
+ 3.25
+
+
+
+
+ 4.25
+
+
+
+
+ 4.75
+
+
+
+
+ 3.75
+
+
+
+
+
+
+
+
+ 100
+
+
+
+
+ 50
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 5
+
+
+ 100
+ -200
+ 37
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 5
+
+
+ 100
+ 100
+ 37
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 5
+
+
+ 100
+ 100
+ 37
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 5
+
+
+ 100
+ -200
+ 37
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 5
+
+
+ 100
+ 100
+ 37
+
+
+
+
+
+
+
+
+
+
+
+
+
+ 0
+ 0
+ 5
+
+
+ 100
+ 100
+ 37
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/AutomatedTesting/sounds/wwise_project/Control Surface Sessions/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Control Surface Sessions/Default Work Unit.wwu
index 1f7d254b46..4e13dee554 100644
--- a/AutomatedTesting/sounds/wwise_project/Control Surface Sessions/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Control Surface Sessions/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Conversion Settings/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Conversion Settings/Default Work Unit.wwu
index ac7c83d1db..236f5765db 100644
--- a/AutomatedTesting/sounds/wwise_project/Conversion Settings/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Conversion Settings/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Conversion Settings/Factory Conversion Settings.wwu b/AutomatedTesting/sounds/wwise_project/Conversion Settings/Factory Conversion Settings.wwu
index 9a94d81c32..7873f5135a 100644
--- a/AutomatedTesting/sounds/wwise_project/Conversion Settings/Factory Conversion Settings.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Conversion Settings/Factory Conversion Settings.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Dynamic Dialogue/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Dynamic Dialogue/Default Work Unit.wwu
index e6e033e251..5411c7d503 100644
--- a/AutomatedTesting/sounds/wwise_project/Dynamic Dialogue/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Dynamic Dialogue/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Effects/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Effects/Default Work Unit.wwu
index f938135d6b..ca63005f4b 100644
--- a/AutomatedTesting/sounds/wwise_project/Effects/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Effects/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Effects/Factory Effects.wwu b/AutomatedTesting/sounds/wwise_project/Effects/Factory Effects.wwu
index ac716afb97..5a545f5e61 100644
--- a/AutomatedTesting/sounds/wwise_project/Effects/Factory Effects.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Effects/Factory Effects.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Effects/Factory Reflect.wwu b/AutomatedTesting/sounds/wwise_project/Effects/Factory Reflect.wwu
index f2269dd2dc..2c0ebb6b67 100644
--- a/AutomatedTesting/sounds/wwise_project/Effects/Factory Reflect.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Effects/Factory Reflect.wwu
@@ -1,10 +1,9 @@
-
+
-
-
+
@@ -185,8 +184,7 @@
-
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Events/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Events/Default Work Unit.wwu
index c65c8adca1..73c2e8f028 100644
--- a/AutomatedTesting/sounds/wwise_project/Events/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Events/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Game Parameters/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Game Parameters/Default Work Unit.wwu
index e373885f46..a939ebe124 100644
--- a/AutomatedTesting/sounds/wwise_project/Game Parameters/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Game Parameters/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory Motion.wwu b/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory Motion.wwu
index b06d283012..3989d74308 100644
--- a/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory Motion.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory Motion.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory SoundSeed Air Game Syncs.wwu b/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory SoundSeed Air Game Syncs.wwu
index 049dacb51e..efe69cb1a8 100644
--- a/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory SoundSeed Air Game Syncs.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Game Parameters/Factory SoundSeed Air Game Syncs.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Interactive Music Hierarchy/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Interactive Music Hierarchy/Default Work Unit.wwu
index 1086c4511f..e8f4d23bb6 100644
--- a/AutomatedTesting/sounds/wwise_project/Interactive Music Hierarchy/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Interactive Music Hierarchy/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Master-Mixer Hierarchy/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Master-Mixer Hierarchy/Default Work Unit.wwu
index a627ce106e..b6c14df7af 100644
--- a/AutomatedTesting/sounds/wwise_project/Master-Mixer Hierarchy/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Master-Mixer Hierarchy/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
@@ -9,13 +9,15 @@
+
-
+
+
diff --git a/AutomatedTesting/sounds/wwise_project/Metadata/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Metadata/Default Work Unit.wwu
new file mode 100644
index 0000000000..0317c70b7c
--- /dev/null
+++ b/AutomatedTesting/sounds/wwise_project/Metadata/Default Work Unit.wwu
@@ -0,0 +1,6 @@
+
+
+
+
+
+
diff --git a/AutomatedTesting/sounds/wwise_project/Mixing Sessions/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Mixing Sessions/Default Work Unit.wwu
index 8c62ef9009..c24440febd 100644
--- a/AutomatedTesting/sounds/wwise_project/Mixing Sessions/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Mixing Sessions/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Modulators/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Modulators/Default Work Unit.wwu
index 062f9f80df..dc16200be3 100644
--- a/AutomatedTesting/sounds/wwise_project/Modulators/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Modulators/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Presets/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Presets/Default Work Unit.wwu
index 2bed1c6613..07f7565980 100644
--- a/AutomatedTesting/sounds/wwise_project/Presets/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Presets/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Presets/Factory Reflect.wwu b/AutomatedTesting/sounds/wwise_project/Presets/Factory Reflect.wwu
index 53f828f459..8138f5bcdd 100644
--- a/AutomatedTesting/sounds/wwise_project/Presets/Factory Reflect.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Presets/Factory Reflect.wwu
@@ -1,5 +1,5 @@
-
+
@@ -19,6 +19,7 @@
+
diff --git a/AutomatedTesting/sounds/wwise_project/Presets/Factory Spatial Audio.wwu b/AutomatedTesting/sounds/wwise_project/Presets/Factory Spatial Audio.wwu
index 5b96bd3b29..d73cf8d8c3 100644
--- a/AutomatedTesting/sounds/wwise_project/Presets/Factory Spatial Audio.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Presets/Factory Spatial Audio.wwu
@@ -1,5 +1,5 @@
-
+
@@ -17,6 +17,7 @@
+
diff --git a/AutomatedTesting/sounds/wwise_project/Queries/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Queries/Default Work Unit.wwu
index f4e9f99aa4..ff80573330 100644
--- a/AutomatedTesting/sounds/wwise_project/Queries/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Queries/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Queries/Factory Queries.wwu b/AutomatedTesting/sounds/wwise_project/Queries/Factory Queries.wwu
index 527315de63..813983d789 100644
--- a/AutomatedTesting/sounds/wwise_project/Queries/Factory Queries.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Queries/Factory Queries.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/SoundBanks/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/SoundBanks/Default Work Unit.wwu
index da8fa90010..c12261ab5b 100644
--- a/AutomatedTesting/sounds/wwise_project/SoundBanks/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/SoundBanks/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Soundcaster Sessions/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Soundcaster Sessions/Default Work Unit.wwu
index d6b8329537..379bf37da9 100644
--- a/AutomatedTesting/sounds/wwise_project/Soundcaster Sessions/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Soundcaster Sessions/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/States/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/States/Default Work Unit.wwu
index f27a0d0310..b06937baa9 100644
--- a/AutomatedTesting/sounds/wwise_project/States/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/States/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Switches/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Switches/Default Work Unit.wwu
index 49c00bc378..37fb0b424c 100644
--- a/AutomatedTesting/sounds/wwise_project/Switches/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Switches/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Triggers/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Triggers/Default Work Unit.wwu
index 3b2e2634df..bb2a827d79 100644
--- a/AutomatedTesting/sounds/wwise_project/Triggers/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Triggers/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Default Work Unit.wwu b/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Default Work Unit.wwu
index 29c26cbbab..d10d9475dc 100644
--- a/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Default Work Unit.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Default Work Unit.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Factory Reflect Acoustic Textures.wwu b/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Factory Reflect Acoustic Textures.wwu
index 864f6ba959..ca4a1ae8f2 100644
--- a/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Factory Reflect Acoustic Textures.wwu
+++ b/AutomatedTesting/sounds/wwise_project/Virtual Acoustics/Factory Reflect Acoustic Textures.wwu
@@ -1,5 +1,5 @@
-
+
diff --git a/Code/.p4ignore b/Code/.p4ignore
deleted file mode 100644
index f0b9f1ea6b..0000000000
--- a/Code/.p4ignore
+++ /dev/null
@@ -1,6 +0,0 @@
-#Ignore these directories
-SDKs
-
-#ColinB (8/26)- I know there are depot files that this will ignore... But these files should not be
-#here, they should all be in 3rdParty... so we will ignore them until I can move them, it should
-#be OK for now because they shouldn't change at all anyway.
diff --git a/Code/CryEngine/CryCommon/AnimTime.h b/Code/CryEngine/CryCommon/AnimTime.h
deleted file mode 100644
index 8bd0b9d442..0000000000
--- a/Code/CryEngine/CryCommon/AnimTime.h
+++ /dev/null
@@ -1,173 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-#ifndef __animtime_h__
-#define __animtime_h__
-
-#include
-#include
-#include
-
-struct SAnimTime
-{
- static const uint numTicksPerSecond = 6000;
-
- // List of possible frame rates (dividers of 6000). Most commonly used ones first.
- enum EFrameRate
- {
- // Common
- eFrameRate_30fps, eFrameRate_60fps, eFrameRate_120fps,
-
- // Possible
- eFrameRate_10fps, eFrameRate_12fps, eFrameRate_15fps, eFrameRate_24fps,
- eFrameRate_25fps, eFrameRate_40fps, eFrameRate_48fps, eFrameRate_50fps,
- eFrameRate_75fps, eFrameRate_80fps, eFrameRate_100fps, eFrameRate_125fps,
- eFrameRate_150fps, eFrameRate_200fps, eFrameRate_240fps, eFrameRate_250fps,
- eFrameRate_300fps, eFrameRate_375fps, eFrameRate_400fps, eFrameRate_500fps,
- eFrameRate_600fps, eFrameRate_750fps, eFrameRate_1000fps, eFrameRate_1200fps,
- eFrameRate_1500fps, eFrameRate_2000fps, eFrameRate_3000fps, eFrameRate_6000fps,
-
- eFrameRate_Num
- };
-
- SAnimTime()
- : m_ticks(0) {}
- explicit SAnimTime(int32 ticks)
- : m_ticks(ticks) {}
- explicit SAnimTime(float time)
- : m_ticks(aznumeric_caster(std::lround(static_cast(time) * numTicksPerSecond))) {}
-
- static uint GetFrameRateValue(EFrameRate frameRate)
- {
- const uint frameRateValues[eFrameRate_Num] =
- {
- // Common
- 30, 60, 120,
-
- // Possible
- 10, 12, 15, 24, 25, 40, 48, 50, 75, 80, 100, 125,
- 150, 200, 240, 250, 300, 375, 400, 500, 600, 750,
- 1000, 1200, 1500, 2000, 3000, 6000
- };
-
- return frameRateValues[frameRate];
- }
-
- static const char* GetFrameRateName(EFrameRate frameRate)
- {
- const char* frameRateNames[eFrameRate_Num] =
- {
- // Common
- "30 fps", "60 fps", "120 fps",
-
- // Possible
- "10 fps", "12 fps", "15 fps", "24 fps",
- "25 fps", "40 fps", "48 fps", "50 fps",
- "75 fps", "80 fps", "100 fps", "125 fps",
- "150 fps", "200 fps", "240 fps", "250 fps",
- "300 fps", "375 fps", "400 fps", "500 fps",
- "600 fps", "750 fps", "1000 fps", "1200 fps",
- "1500 fps", "2000 fps", "3000 fps", "6000 fps"
- };
-
- return frameRateNames[frameRate];
- }
-
- float ToFloat() const { return static_cast(m_ticks) / numTicksPerSecond; }
-
- void Serialize(Serialization::IArchive& ar)
- {
- ar(m_ticks, "ticks", "Ticks");
- }
-
- // Helper to serialize from ticks or old float time
- void Serialize(XmlNodeRef keyNode, bool bLoading, const char* pName, const char* pLegacyName)
- {
- if (bLoading)
- {
- int32 ticks;
- if (!keyNode->getAttr(pName, ticks))
- {
- // Backwards compatibility
- float time = 0.0f;
- keyNode->getAttr(pLegacyName, time);
- *this = SAnimTime(time);
- }
- else
- {
- m_ticks = ticks;
- }
- }
- else if (m_ticks > 0)
- {
- keyNode->setAttr(pName, m_ticks);
- }
- }
-
- int32 GetTicks() const { return m_ticks; }
-
- static SAnimTime Min() { SAnimTime minTime; minTime.m_ticks = std::numeric_limits::lowest(); return minTime; }
- static SAnimTime Max() { SAnimTime maxTime; maxTime.m_ticks = (std::numeric_limits::max)(); return maxTime; }
-
- SAnimTime operator-() const { return SAnimTime(-m_ticks); }
- SAnimTime operator-(SAnimTime r) const { SAnimTime temp = *this; temp.m_ticks -= r.m_ticks; return temp; }
- SAnimTime operator+(SAnimTime r) const { SAnimTime temp = *this; temp.m_ticks += r.m_ticks; return temp; }
- SAnimTime operator*(SAnimTime r) const { SAnimTime temp = *this; temp.m_ticks *= r.m_ticks; return temp; }
- SAnimTime operator/(SAnimTime r) const { SAnimTime temp; temp.m_ticks = static_cast((static_cast(m_ticks) * numTicksPerSecond) / r.m_ticks); return temp; }
- SAnimTime operator%(SAnimTime r) const { SAnimTime temp = *this; temp.m_ticks %= r.m_ticks; return temp; }
- SAnimTime operator*(float r) const { SAnimTime temp; temp.m_ticks = aznumeric_caster(std::lround(static_cast(m_ticks) * r)); return temp; }
- SAnimTime operator/(float r) const { SAnimTime temp; temp.m_ticks = aznumeric_caster(std::lround(static_cast(m_ticks) / r)); return temp; }
- SAnimTime& operator+=(SAnimTime r) { *this = *this + r; return *this; }
- SAnimTime& operator-=(SAnimTime r) { *this = *this - r; return *this; }
- SAnimTime& operator*=(SAnimTime r) { *this = *this * r; return *this; }
- SAnimTime& operator/=(SAnimTime r) { *this = *this / r; return *this; }
- SAnimTime& operator%=(SAnimTime r) { *this = *this % r; return *this; }
- SAnimTime& operator*=(float r) { *this = *this * r; return *this; }
- SAnimTime& operator/=(float r) { *this = *this / r; return *this; }
-
- bool operator<(SAnimTime r) const { return m_ticks < r.m_ticks; }
- bool operator<=(SAnimTime r) const { return m_ticks <= r.m_ticks; }
- bool operator>(SAnimTime r) const { return m_ticks > r.m_ticks; }
- bool operator>=(SAnimTime r) const { return m_ticks >= r.m_ticks; }
- bool operator==(SAnimTime r) const { return m_ticks == r.m_ticks; }
- bool operator!=(SAnimTime r) const { return m_ticks != r.m_ticks; }
-
- // Snap to nearest multiple of given frame rate
- SAnimTime SnapToNearest(const EFrameRate frameRate)
- {
- const int sign = sgn(m_ticks);
- const int32 absTicks = abs(m_ticks);
-
- const int framesMod = numTicksPerSecond / GetFrameRateValue(frameRate);
- const int32 remainder = absTicks % framesMod;
- const bool bNextMultiple = remainder >= (framesMod / 2);
- return SAnimTime(sign * ((absTicks - remainder) + (bNextMultiple ? framesMod : 0)));
- }
-
-private:
- int32 m_ticks;
-
- friend bool Serialize(Serialization::IArchive& ar, SAnimTime& animTime, const char* name, const char* label);
-};
-
-inline bool Serialize(Serialization::IArchive& ar, SAnimTime& animTime, const char* name, const char* label)
-{
- return ar(animTime.m_ticks, name, label);
-}
-
-inline SAnimTime abs(SAnimTime time)
-{
- return (time >= SAnimTime(0)) ? time : -time;
-}
-
-#endif
diff --git a/Code/CryEngine/CryCommon/Bezier.h b/Code/CryEngine/CryCommon/Bezier.h
deleted file mode 100644
index fa1cf60d49..0000000000
--- a/Code/CryEngine/CryCommon/Bezier.h
+++ /dev/null
@@ -1,321 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-#ifndef __BEZIER_H__
-#define __BEZIER_H__
-
-#include
-#include
-#include
-
-struct SBezierControlPoint
-{
- SBezierControlPoint()
- : m_value(0.0f)
- , m_inTangent(ZERO)
- , m_outTangent(ZERO)
- , m_inTangentType(eTangentType_Auto)
- , m_outTangentType(eTangentType_Auto)
- , m_bBreakTangents(false)
- {
- }
-
- enum ETangentType
- {
- eTangentType_Custom,
- eTangentType_Auto,
- eTangentType_Zero,
- eTangentType_Step,
- eTangentType_Linear,
- };
-
- void Serialize(Serialization::IArchive& ar)
- {
- ar(m_value, "value", "Value");
-
- if (ar.IsOutput())
- {
- bool breakTangents = m_bBreakTangents;
- ar(breakTangents, "breakTangents", "Break Tangents");
- }
- else
- {
- bool breakTangents = false;
- ar(breakTangents, "breakTangents", "Break Tangents");
- m_bBreakTangents = breakTangents;
- }
-
- if (ar.IsOutput())
- {
- ETangentType inTangentType = m_inTangentType;
- ar(inTangentType, "inTangentType", "Incoming tangent type");
- }
- else
- {
- ETangentType inTangentType = eTangentType_Auto;
- ar(inTangentType, "inTangentType", "Incoming tangent type");
- m_inTangentType = inTangentType;
- }
-
- ar(m_inTangent, "inTangent", (m_inTangentType == eTangentType_Custom) ? "Incoming Tangent" : NULL);
-
- if (ar.IsOutput())
- {
- ETangentType outTangentType = m_outTangentType;
- ar(outTangentType, "outTangentType", "Outgoing tangent type");
- }
- else
- {
- ETangentType outTangentType = eTangentType_Auto;
- ar(outTangentType, "outTangentType", "Outgoing tangent type");
- m_outTangentType = outTangentType;
- }
-
- ar(m_outTangent, "outTangent", (m_outTangentType == eTangentType_Custom) ? "Outgoing Tangent" : NULL);
- }
-
- float m_value;
-
- // For 1D Bezier only the Y component is used
- Vec2 m_inTangent;
- Vec2 m_outTangent;
-
- ETangentType m_inTangentType : 4;
- ETangentType m_outTangentType : 4;
- bool m_bBreakTangents : 1;
-};
-
-struct SBezierKey
-{
- SBezierKey()
- : m_time(0) {}
-
- void Serialize(Serialization::IArchive& ar)
- {
- ar(m_time, "time", "Time");
- ar(m_controlPoint, "controlPoint", "Control Point");
- }
-
- SAnimTime m_time;
- SBezierControlPoint m_controlPoint;
-};
-
-namespace Bezier
-{
- inline float Evaluate(float t, float p0, float p1, float p2, float p3)
- {
- const float a = 1 - t;
- const float aSq = a * a;
- const float tSq = t * t;
- return (aSq * a * p0) + (3.0f * aSq * t * p1) + (3.0f * a * tSq * p2) + (tSq * t * p3);
- }
-
- inline float EvaluateDeriv(float t, float p0, float p1, float p2, float p3)
- {
- const float a = 1 - t;
- const float ta = t * a;
- const float aSq = a * a;
- const float tSq = t * t;
- return 3.0f * ((-p2 * tSq) + (p3 * tSq) - (p0 * aSq) + (p1 * aSq) + 2.0f * ((-p1 * ta) + (p2 * ta)));
- }
-
- inline float EvaluateX(const float t, const float duration, const SBezierControlPoint& start, const SBezierControlPoint& end)
- {
- const float p0 = 0.0f;
- const float p1 = p0 + start.m_outTangent.x;
- const float p3 = duration;
- const float p2 = p3 + end.m_inTangent.x;
- return Evaluate(t, p0, p1, p2, p3);
- }
-
- inline float EvaluateY(const float t, const SBezierControlPoint& start, const SBezierControlPoint& end)
- {
- const float p0 = start.m_value;
- const float p1 = p0 + start.m_outTangent.y;
- const float p3 = end.m_value;
- const float p2 = p3 + end.m_inTangent.y;
- return Evaluate(t, p0, p1, p2, p3);
- }
-
- // Duration = (time at end key) - (time at start key)
- inline float EvaluateDerivX(const float t, const float duration, const SBezierControlPoint& start, const SBezierControlPoint& end)
- {
- const float p0 = 0.0f;
- const float p1 = p0 + start.m_outTangent.x;
- const float p3 = duration;
- const float p2 = p3 + end.m_inTangent.x;
- return EvaluateDeriv(t, p0, p1, p2, p3);
- }
-
- inline float EvaluateDerivY(const float t, const SBezierControlPoint& start, const SBezierControlPoint& end)
- {
- const float p0 = start.m_value;
- const float p1 = p0 + start.m_outTangent.y;
- const float p3 = end.m_value;
- const float p2 = p3 + end.m_inTangent.y;
- return EvaluateDeriv(t, p0, p1, p2, p3);
- }
-
- // Find interpolation factor where 2D bezier curve has the given x value. Works only for curves where x is monotonically increasing.
- // The passed x must be in range [0, duration]. Uses the Newton-Raphson root finding method. Usually takes 2 or 3 iterations.
- //
- // Note: This is for "1D" 2D bezier curves as used in TrackView. The curves are restricted by the curve editor to be monotonically increasing.
- //
- inline float InterpolationFactorFromX(const float x, const float duration, const SBezierControlPoint& start, const SBezierControlPoint& end)
- {
- float t = (x / duration);
-
- const float epsilon = 0.00001f;
- const uint maxSteps = 10;
-
- for (uint i = 0; i < maxSteps; ++i)
- {
- const float currentX = EvaluateX(t, duration, start, end) - x;
- if (fabs(currentX) <= epsilon)
- {
- break;
- }
-
- const float currentXDeriv = EvaluateDerivX(t, duration, start, end);
- t -= currentX / currentXDeriv;
- }
-
- return t;
- }
-
- inline SBezierControlPoint CalculateInTangent(
- float time, const SBezierControlPoint& point,
- float leftTime, const SBezierControlPoint* pLeftPoint,
- float rightTime, const SBezierControlPoint* pRightPoint)
- {
- SBezierControlPoint newPoint = point;
-
- // In tangent X can never be positive
- newPoint.m_inTangent.x = std::min(point.m_inTangent.x, 0.0f);
-
- if (pLeftPoint)
- {
- switch (point.m_inTangentType)
- {
- case SBezierControlPoint::eTangentType_Custom:
- {
- // Need to clamp tangent if it is reaching over last point
- const float deltaTime = time - leftTime;
- if (deltaTime < -newPoint.m_inTangent.x)
- {
- if (newPoint.m_inTangent.x == 0)
- {
- newPoint.m_inTangent = Vec2(ZERO);
- }
- else
- {
- float scaleFactor = deltaTime / -newPoint.m_inTangent.x;
- newPoint.m_inTangent.x = -deltaTime;
- newPoint.m_inTangent.y *= scaleFactor;
- }
- }
- }
- break;
- case SBezierControlPoint::eTangentType_Zero:
- // Fall through. Zero for y is same as Auto, x is set to 0.0f
- case SBezierControlPoint::eTangentType_Auto:
- {
- const SBezierControlPoint& rightPoint = pRightPoint ? *pRightPoint : point;
- const float deltaTime = (pRightPoint ? rightTime : time) - leftTime;
- if (deltaTime > 0.0f)
- {
- const float ratio = (time - leftTime) / deltaTime;
- const float deltaValue = rightPoint.m_value - pLeftPoint->m_value;
- const bool bIsZeroTangent = (point.m_inTangentType == SBezierControlPoint::eTangentType_Zero);
- newPoint.m_inTangent = Vec2(-(deltaTime * ratio) / 3.0f, bIsZeroTangent ? 0.0f : -(deltaValue * ratio) / 3.0f);
- }
- else
- {
- newPoint.m_inTangent = Vec2(ZERO);
- }
- }
- break;
- case SBezierControlPoint::eTangentType_Linear:
- newPoint.m_inTangent = Vec2((leftTime - time) / 3.0f,
- (pLeftPoint->m_value - point.m_value) / 3.0f);
- break;
- }
- }
-
- return newPoint;
- }
-
- inline SBezierControlPoint CalculateOutTangent(
- float time, const SBezierControlPoint& point,
- float leftTime, const SBezierControlPoint* pLeftPoint,
- float rightTime, const SBezierControlPoint* pRightPoint)
- {
- SBezierControlPoint newPoint = point;
-
- // Out tangent X can never be negative
- newPoint.m_outTangent.x = std::max(point.m_outTangent.x, 0.0f);
-
- if (pRightPoint)
- {
- switch (point.m_outTangentType)
- {
- case SBezierControlPoint::eTangentType_Custom:
- {
- // Need to clamp tangent if it is reaching over next point
- const float deltaTime = rightTime - time;
- if (deltaTime < newPoint.m_outTangent.x)
- {
- if (newPoint.m_outTangent.x == 0)
- {
- newPoint.m_outTangent = Vec2(ZERO);
- }
- else
- {
- float scaleFactor = deltaTime / newPoint.m_outTangent.x;
- newPoint.m_outTangent.x = deltaTime;
- newPoint.m_outTangent.y *= scaleFactor;
- }
- }
- }
- break;
- case SBezierControlPoint::eTangentType_Zero:
- // Fall through. Zero for y is same as Auto, x is set to 0.0f
- case SBezierControlPoint::eTangentType_Auto:
- {
- const SBezierControlPoint& leftPoint = pLeftPoint ? *pLeftPoint : point;
- const float deltaTime = rightTime - (pLeftPoint ? leftTime : time);
- if (deltaTime > 0.0f)
- {
- const float ratio = (rightTime - time) / deltaTime;
- const float deltaValue = pRightPoint->m_value - leftPoint.m_value;
- const bool bIsZeroTangent = (point.m_outTangentType == SBezierControlPoint::eTangentType_Zero);
- newPoint.m_outTangent = Vec2((deltaTime * ratio) / 3.0f, bIsZeroTangent ? 0.0f : (deltaValue * ratio) / 3.0f);
- }
- else
- {
- newPoint.m_outTangent = Vec2(ZERO);
- }
- }
- break;
- case SBezierControlPoint::eTangentType_Linear:
- newPoint.m_outTangent = Vec2((rightTime - time) / 3.0f,
- (pRightPoint->m_value - point.m_value) / 3.0f);
- break;
- }
- }
-
- return newPoint;
- }
-}
-
-#endif
diff --git a/Code/CryEngine/CryCommon/CMakeLists.txt b/Code/CryEngine/CryCommon/CMakeLists.txt
index 4725489358..3a1eb90d9d 100644
--- a/Code/CryEngine/CryCommon/CMakeLists.txt
+++ b/Code/CryEngine/CryCommon/CMakeLists.txt
@@ -9,58 +9,15 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#
-ly_get_list_relative_pal_filename(pal_dir ${CMAKE_CURRENT_LIST_DIR}/Platform/${PAL_PLATFORM_NAME})
-ly_get_pal_tool_dirs(pal_tool_dirs ${CMAKE_CURRENT_LIST_DIR}/Platform)
-
ly_add_target(
NAME CryCommon STATIC
NAMESPACE Legacy
FILES_CMAKE
crycommon_files.cmake
- ${pal_dir}/crycommon_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
- PLATFORM_INCLUDE_FILES
- ${pal_dir}/crycommon_${PAL_PLATFORM_NAME_LOWERCASE}.cmake
INCLUDE_DIRECTORIES
PUBLIC
. # Lots of code without CryCommon/
.. # Dangerous since exports CryEngine's path (client code can do CrySystem/ without depending on that target)
- ${pal_dir}
- ${pal_tool_dirs}
- BUILD_DEPENDENCIES
- PUBLIC
- AZ::AzCore
- AZ::AzFramework
-)
-
-ly_add_target(
- NAME CryCommon.EngineSettings.Static STATIC
- NAMESPACE Legacy
- FILES_CMAKE
- crycommon_enginesettings_files.cmake
- ${pal_dir}/crycommon_enginesettings_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
- INCLUDE_DIRECTORIES
- PUBLIC
- .
- ${pal_dir}
- BUILD_DEPENDENCIES
- PUBLIC
- AZ::AzCore
- AZ::AzFramework
-)
-
-ly_add_target(
- NAME CryCommon.EngineSettings.RC.Static STATIC
- NAMESPACE Legacy
- FILES_CMAKE
- crycommon_enginesettings_files.cmake
- ${pal_dir}/crycommon_enginesettings_${PAL_PLATFORM_NAME_LOWERCASE}_files.cmake
- INCLUDE_DIRECTORIES
- PUBLIC
- .
- ${pal_dir}
- COMPILE_DEFINITIONS
- PRIVATE
- RESOURCE_COMPILER
BUILD_DEPENDENCIES
PUBLIC
AZ::AzCore
diff --git a/Code/CryEngine/CryCommon/CryAssert_Android.h b/Code/CryEngine/CryCommon/CryAssert_Android.h
index 68f716ec28..6e60df1bb1 100644
--- a/Code/CryEngine/CryCommon/CryAssert_Android.h
+++ b/Code/CryEngine/CryCommon/CryAssert_Android.h
@@ -31,7 +31,7 @@ void CryAssertTrace(const char* szFormat, ...)
return;
}
- if (!gEnv->bIgnoreAllAsserts || gEnv->bTesting)
+ if (!gEnv->bIgnoreAllAsserts)
{
if (szFormat == NULL)
{
diff --git a/Code/CryEngine/CryCommon/CryAssert_Linux.h b/Code/CryEngine/CryCommon/CryAssert_Linux.h
index 7c52f78366..f0acdd79db 100644
--- a/Code/CryEngine/CryCommon/CryAssert_Linux.h
+++ b/Code/CryEngine/CryCommon/CryAssert_Linux.h
@@ -34,7 +34,7 @@ void CryAssertTrace(const char* szFormat, ...)
return;
}
- if (!gEnv->bIgnoreAllAsserts || gEnv->bTesting)
+ if (!gEnv->bIgnoreAllAsserts)
{
if (szFormat == NULL)
{
diff --git a/Code/CryEngine/CryCommon/CryAssert_Mac.h b/Code/CryEngine/CryCommon/CryAssert_Mac.h
index 9502605fea..f7f74c3b58 100644
--- a/Code/CryEngine/CryCommon/CryAssert_Mac.h
+++ b/Code/CryEngine/CryCommon/CryAssert_Mac.h
@@ -30,7 +30,7 @@ void CryAssertTrace(const char* szFormat, ...)
return;
}
- if (!gEnv->bIgnoreAllAsserts || gEnv->bTesting)
+ if (!gEnv->bIgnoreAllAsserts)
{
if (szFormat == NULL)
{
diff --git a/Code/CryEngine/CryCommon/CryAssert_iOS.h b/Code/CryEngine/CryCommon/CryAssert_iOS.h
index ad668fb131..2cb08befff 100644
--- a/Code/CryEngine/CryCommon/CryAssert_iOS.h
+++ b/Code/CryEngine/CryCommon/CryAssert_iOS.h
@@ -31,7 +31,7 @@ void CryAssertTrace(const char* szFormat, ...)
return;
}
- if (!gEnv->bIgnoreAllAsserts || gEnv->bTesting)
+ if (!gEnv->bIgnoreAllAsserts)
{
if (szFormat == NULL)
{
diff --git a/Code/CryEngine/CryCommon/CryAssert_impl.h b/Code/CryEngine/CryCommon/CryAssert_impl.h
index ed55162f1a..edbbb2f0c4 100644
--- a/Code/CryEngine/CryCommon/CryAssert_impl.h
+++ b/Code/CryEngine/CryCommon/CryAssert_impl.h
@@ -305,7 +305,7 @@ void CryAssertTrace(const char* _pszFormat, ...)
{
return;
}
- if (!gEnv->bIgnoreAllAsserts || gEnv->bTesting)
+ if (!gEnv->bIgnoreAllAsserts)
{
if (NULL == _pszFormat)
{
diff --git a/Code/CryEngine/CryCommon/CryExtension/CryCreateClassInstance.h b/Code/CryEngine/CryCommon/CryExtension/CryCreateClassInstance.h
deleted file mode 100644
index 1d1a4805d4..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/CryCreateClassInstance.h
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_CRYCREATECLASSINSTANCE_H
-#define CRYINCLUDE_CRYEXTENSION_CRYCREATECLASSINSTANCE_H
-#pragma once
-
-
-#include "ICryUnknown.h"
-#include "ICryFactory.h"
-#include "ICryFactoryRegistry.h"
-#include // <> required for Interfuscator
-
-
-template
-bool CryCreateClassInstance(const CryClassID& cid, AZStd::shared_ptr& p)
-{
- p = AZStd::shared_ptr();
- ICryFactoryRegistry* pFactoryReg = gEnv->pSystem->GetCryFactoryRegistry();
- if (pFactoryReg)
- {
- ICryFactory* pFactory = pFactoryReg->GetFactory(cid);
- if (pFactory && pFactory->ClassSupports(cryiidof()))
- {
- ICryUnknownPtr pUnk = pFactory->CreateClassInstance();
- AZStd::shared_ptr pT = cryinterface_cast(pUnk);
- if (pT)
- {
- p = pT;
- }
- }
- }
- return p.get() != NULL;
-}
-
-
-template
-bool CryCreateClassInstance(const char* cname, AZStd::shared_ptr& p)
-{
- p = AZStd::shared_ptr();
- ICryFactoryRegistry* pFactoryReg = gEnv->pSystem->GetCryFactoryRegistry();
- if (pFactoryReg)
- {
- ICryFactory* pFactory = pFactoryReg->GetFactory(cname);
- if (pFactory != NULL && pFactory->ClassSupports(cryiidof()))
- {
- ICryUnknownPtr pUnk = pFactory->CreateClassInstance();
- AZStd::shared_ptr pT = cryinterface_cast(pUnk);
- if (pT)
- {
- p = pT;
- }
- }
- }
- return p.get() != NULL;
-}
-
-
-template
-bool CryCreateClassInstanceForInterface(const CryInterfaceID& iid, AZStd::shared_ptr& p)
-{
- p = AZStd::shared_ptr();
- ICryFactoryRegistry* pFactoryReg = gEnv->pSystem->GetCryFactoryRegistry();
- if (pFactoryReg)
- {
- size_t numFactories = 1;
- ICryFactory* pFactory = 0;
- pFactoryReg->IterateFactories(iid, &pFactory, numFactories);
- if (numFactories == 1 && pFactory)
- {
- ICryUnknownPtr pUnk = pFactory->CreateClassInstance();
- AZStd::shared_ptr pT = cryinterface_cast(pUnk);
- if (pT)
- {
- p = pT;
- }
- }
- }
- return p.get() != NULL;
-}
-
-
-#endif // CRYINCLUDE_CRYEXTENSION_CRYCREATECLASSINSTANCE_H
diff --git a/Code/CryEngine/CryCommon/CryExtension/CryGUID.h b/Code/CryEngine/CryCommon/CryExtension/CryGUID.h
deleted file mode 100644
index a779e91bd2..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/CryGUID.h
+++ /dev/null
@@ -1,123 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_CRYGUID_H
-#define CRYINCLUDE_CRYEXTENSION_CRYGUID_H
-#pragma once
-
-#include "Serialization/IArchive.h"
-#include "Random.h"
-
-#include
-
-struct CryGUID
-{
- uint64 hipart;
- uint64 lopart;
-
- // !!! Do NOT turn CryGUID into a non-aggregate !!!
- // It will prevent inlining and type list unrolling opportunities within
- // cryinterface_cast() and cryiidof(). As such prevent constructors,
- // non-public members, base classes and virtual functions!
-
- //CryGUID() : hipart(0), lopart(0) {}
- //CryGUID(uint64 h, uint64 l) : hipart(h), lopart(l) {}
-
- static CryGUID Construct(const uint64& hipart, const uint64& lopart)
- {
- CryGUID guid = {hipart, lopart};
- return guid;
- }
-
- static CryGUID Create()
- {
- uint64 lopart = 0;
- uint64 hipart = 0;
- while (lopart == 0 || hipart == 0)
- {
- const uint32 a = cry_random_uint32();
- const uint32 b = cry_random_uint32();
- const uint32 c = cry_random_uint32();
- const uint32 d = cry_random_uint32();
- lopart = (uint64)a | ((uint64)b << 32);
- hipart = (uint64)c | ((uint64)d << 32);
- }
-
- return Construct(lopart, hipart);
- }
-
- static CryGUID Null()
- {
- return Construct(0, 0);
- }
-
- bool operator ==(const CryGUID& rhs) const {return hipart == rhs.hipart && lopart == rhs.lopart; }
- bool operator !=(const CryGUID& rhs) const {return hipart != rhs.hipart || lopart != rhs.lopart; }
- bool operator <(const CryGUID& rhs) const {return hipart == rhs.hipart ? lopart < rhs.lopart : hipart < rhs.hipart; }
-
- void Serialize(Serialization::IArchive& ar)
- {
- if (ar.IsInput())
- {
- uint32 dwords[4];
- ar(dwords, "guid");
- lopart = (((uint64)dwords[1]) << 32) | (uint64)dwords[0];
- hipart = (((uint64)dwords[3]) << 32) | (uint64)dwords[2];
- }
- else
- {
- uint32 guid[4] = {
- (uint32)(lopart & 0xFFFFFFFF), (uint32)((lopart >> 32) & 0xFFFFFFFF),
- (uint32)(hipart & 0xFFFFFFFF), (uint32)((hipart >> 32) & 0xFFFFFFFF)
- };
- ar(guid, "guid");
- }
- }
-};
-
-// This is only used by the editor where we use C++ 11.
-namespace std
-{
- template<>
- struct hash
- {
- public:
- size_t operator()(const CryGUID& guid) const
- {
- std::hash hasher;
- return hasher(guid.lopart) ^ hasher(guid.hipart);
- }
- };
-}
-
-namespace AZStd
-{
- template<>
- struct hash
- {
- public:
- size_t operator()(const CryGUID& guid) const
- {
- std::hash hasher;
- return hasher(guid);
- }
- };
-}
-
-#define MAKE_CRYGUID(high, low) CryGUID::Construct((uint64) high##LL, (uint64) low##LL)
-
-
-#endif // CRYINCLUDE_CRYEXTENSION_CRYGUID_H
diff --git a/Code/CryEngine/CryCommon/CryExtension/CryTypeID.h b/Code/CryEngine/CryCommon/CryExtension/CryTypeID.h
deleted file mode 100644
index 16ae05b448..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/CryTypeID.h
+++ /dev/null
@@ -1,29 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_CRYTYPEID_H
-#define CRYINCLUDE_CRYEXTENSION_CRYTYPEID_H
-#pragma once
-
-
-#include "CryGUID.h"
-
-
-typedef CryGUID CryInterfaceID;
-typedef CryGUID CryClassID;
-
-
-#endif // CRYINCLUDE_CRYEXTENSION_CRYTYPEID_H
diff --git a/Code/CryEngine/CryCommon/CryExtension/ICryFactory.h b/Code/CryEngine/CryCommon/CryExtension/ICryFactory.h
deleted file mode 100644
index a1a7344198..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/ICryFactory.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_ICRYFACTORY_H
-#define CRYINCLUDE_CRYEXTENSION_ICRYFACTORY_H
-#pragma once
-
-
-#include "CryTypeID.h"
-#include
-
-struct ICryUnknown;
-DECLARE_SMART_POINTERS(ICryUnknown);
-
-struct ICryFactory
-{
- virtual const char* GetName() const = 0;
- virtual const CryClassID& GetClassID() const = 0;
- virtual bool ClassSupports(const CryInterfaceID& iid) const = 0;
- virtual void ClassSupports(const CryInterfaceID*& pIIDs, size_t& numIIDs) const = 0;
- virtual ICryUnknownPtr CreateClassInstance() const = 0;
-
-protected:
- // prevent explicit destruction from client side (delete, shared_ptr, etc)
- virtual ~ICryFactory() {}
-};
-
-#endif // CRYINCLUDE_CRYEXTENSION_ICRYFACTORY_H
diff --git a/Code/CryEngine/CryCommon/CryExtension/ICryFactoryRegistry.h b/Code/CryEngine/CryCommon/CryExtension/ICryFactoryRegistry.h
deleted file mode 100644
index f97c0780a1..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/ICryFactoryRegistry.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_ICRYFACTORYREGISTRY_H
-#define CRYINCLUDE_CRYEXTENSION_ICRYFACTORYREGISTRY_H
-#pragma once
-
-
-#include "CryTypeID.h"
-
-
-struct ICryFactory;
-
-
-struct ICryFactoryRegistry
-{
- virtual ICryFactory* GetFactory(const char* cname) const = 0;
- virtual ICryFactory* GetFactory(const CryClassID& cid) const = 0;
- /**
- * Iterates all factories implementing the interface specified by \p iid.
- * \param[in] iid ID of the interface to iterate. Often procured using cryiidof<...>().
- * \param[out] pFactories A pointer of the array of factories to fill in. May be nullptr (see below).
- * \param[in] Size (in elements) of the pFactories array [out] Number of elements actually written to pFactories or, when pFactories is null, the number of elements that would be written if sufficient storage was available.
- *
- * Example:
- * \code{.cpp}
- * size_t factoryCount = 0;
- * // Assigns the number of found factories to factoryCount
- * factoryRegistry->IterateFactories(cryiidof(), 0, factoryCount);
- * // Allocate an array of the proper length on the stack
- * ICryFactory** factories = static_cast(alloca(sizeof(ICryFactory*) * factoryCount);
- * // Fill in factories with factoryCount results.
- * factoryRegistry->IterateFactories(cryiidof(), factories, factoryCount);
- * \endcode
- */
- virtual void IterateFactories(const CryInterfaceID& iid, ICryFactory** pFactories, size_t& numFactories) const = 0;
-
-protected:
- // prevent explicit destruction from client side (delete, shared_ptr, etc)
- virtual ~ICryFactoryRegistry() {}
-};
-
-#endif // CRYINCLUDE_CRYEXTENSION_ICRYFACTORYREGISTRY_H
diff --git a/Code/CryEngine/CryCommon/CryExtension/ICryUnknown.h b/Code/CryEngine/CryCommon/CryExtension/ICryUnknown.h
deleted file mode 100644
index 0de018305b..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/ICryUnknown.h
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_ICRYUNKNOWN_H
-#define CRYINCLUDE_CRYEXTENSION_ICRYUNKNOWN_H
-#pragma once
-
-
-#include "CryTypeID.h"
-#include
-
-
-struct ICryFactory;
-struct ICryUnknown;
-
-namespace InterfaceCastSemantics
-{
- template
- const CryInterfaceID& cryiidof()
- {
- return T::IID();
- }
-
-#define _BEFRIEND_CRYIIDOF() \
- template \
- friend const CryInterfaceID&InterfaceCastSemantics::cryiidof();
-
-
- template
- Dst* cryinterface_cast(Src* p)
- {
- return static_cast(p ? p->QueryInterface(cryiidof()) : 0);
- }
-
- template
- Dst* cryinterface_cast(const Src* p)
- {
- return static_cast(p ? p->QueryInterface(cryiidof()) : 0);
- }
-
- namespace Internal
- {
- template
- struct cryinterface_cast_shared_ptr_helper;
-
- template
- struct cryinterface_cast_shared_ptr_helper
- {
- static AZStd::shared_ptr Op(const AZStd::shared_ptr& p)
- {
- Dst* dp = cryinterface_cast(p.get());
- return dp ? AZStd::shared_ptr(p, dp) : AZStd::shared_ptr();
- }
- };
-
- template
- struct cryinterface_cast_shared_ptr_helper
- {
- static AZStd::shared_ptr Op(const AZStd::shared_ptr& p)
- {
- ICryUnknown* dp = cryinterface_cast(p.get());
- return dp ? AZStd::shared_ptr(*((const AZStd::shared_ptr*) & p), dp) : AZStd::shared_ptr();
- }
- };
-
- template
- struct cryinterface_cast_shared_ptr_helper
- {
- static AZStd::shared_ptr Op(const AZStd::shared_ptr& p)
- {
- const ICryUnknown* dp = cryinterface_cast(p.get());
- return dp ? AZStd::shared_ptr(*((const AZStd::shared_ptr*) & p), dp) : AZStd::shared_ptr();
- }
- };
- } // namespace Internal
-
- template
- AZStd::shared_ptr cryinterface_cast(const AZStd::shared_ptr& p)
- {
- return Internal::cryinterface_cast_shared_ptr_helper::Op(p);
- }
-
-#define _BEFRIEND_CRYINTERFACE_CAST() \
- template \
- friend Dst * InterfaceCastSemantics::cryinterface_cast(Src*); \
- template \
- friend Dst * InterfaceCastSemantics::cryinterface_cast(const Src*); \
- template \
- friend AZStd::shared_ptr InterfaceCastSemantics::cryinterface_cast(const AZStd::shared_ptr&);
-} // namespace InterfaceCastSemantics
-
-using InterfaceCastSemantics::cryiidof;
-using InterfaceCastSemantics::cryinterface_cast;
-
-
-template
-bool CryIsSameClassInstance(S* p0, T* p1)
-{
- return static_cast(p0) == static_cast(p1) || cryinterface_cast(p0) == cryinterface_cast(p1);
-}
-
-template
-bool CryIsSameClassInstance(const AZStd::shared_ptr& p0, T* p1)
-{
- return CryIsSameClassInstance(p0.get(), p1);
-}
-
-template
-bool CryIsSameClassInstance(S* p0, const AZStd::shared_ptr& p1)
-{
- return CryIsSameClassInstance(p0, p1.get());
-}
-
-template
-bool CryIsSameClassInstance(const AZStd::shared_ptr& p0, const AZStd::shared_ptr& p1)
-{
- return CryIsSameClassInstance(p0.get(), p1.get());
-}
-
-
-namespace CompositeQuerySemantics
-{
- template
- AZStd::shared_ptr crycomposite_query(Src* p, const char* name, bool* pExposed = 0)
- {
- void* pComposite = p ? p->QueryComposite(name) : 0;
- pExposed ? *pExposed = pComposite != 0 : 0;
- return pComposite ? *static_cast*>(pComposite) : AZStd::shared_ptr();
- }
-
- template
- AZStd::shared_ptr crycomposite_query(const Src* p, const char* name, bool* pExposed = 0)
- {
- void* pComposite = p ? p->QueryComposite(name) : 0;
- pExposed ? *pExposed = pComposite != 0 : 0;
- return pComposite ? *static_cast*>(pComposite) : AZStd::shared_ptr();
- }
-
- template
- AZStd::shared_ptr crycomposite_query(const AZStd::shared_ptr& p, const char* name, bool* pExposed = 0)
- {
- return crycomposite_query(p.get(), name, pExposed);
- }
-
- template
- AZStd::shared_ptr crycomposite_query(const AZStd::shared_ptr& p, const char* name, bool* pExposed = 0)
- {
- return crycomposite_query(p.get(), name, pExposed);
- }
-
-#define _BEFRIEND_CRYCOMPOSITE_QUERY() \
- template \
- friend AZStd::shared_ptr CompositeQuerySemantics::crycomposite_query(Src*, const char*, bool*); \
- template \
- friend AZStd::shared_ptr CompositeQuerySemantics::crycomposite_query(const Src*, const char*, bool*); \
- template \
- friend AZStd::shared_ptr CompositeQuerySemantics::crycomposite_query(const AZStd::shared_ptr&, const char*, bool*); \
- template \
- friend AZStd::shared_ptr CompositeQuerySemantics::crycomposite_query(const AZStd::shared_ptr&, const char*, bool*);
-} // namespace CompositeQuerySemantics
-
-using CompositeQuerySemantics::crycomposite_query;
-
-
-#define _BEFRIEND_MAKE_SHARED() \
- template \
- friend class AZStd::Internal::sp_ms_deleter; \
- template \
- friend AZStd::shared_ptr AZStd::make_shared(); \
- template \
- friend AZStd::shared_ptr AZStd::allocate_shared(A const& a);
-
-// prevent explicit destruction from client side
-#define _PROTECTED_DTOR(iname) \
-protected: \
- virtual ~iname() {}
-
-
-// Befriending cryinterface_cast() and crycomposite_query() via CRYINTERFACE_DECLARE is actually only needed for ICryUnknown
-// since QueryInterface() and QueryComposite() are usually not redeclared in derived interfaces but it doesn't hurt either
-#define CRYINTERFACE_DECLARE(iname, iidHigh, iidLow) \
- _BEFRIEND_CRYIIDOF() \
- _BEFRIEND_CRYINTERFACE_CAST() \
- _BEFRIEND_CRYCOMPOSITE_QUERY() \
- _BEFRIEND_MAKE_SHARED() \
- _PROTECTED_DTOR(iname) \
- \
-private: \
- static const CryInterfaceID& IID() \
- { \
- static const CryInterfaceID iid = {(uint64) iidHigh##LL, (uint64) iidLow##LL}; \
- return iid; \
- } \
-public:
-
-
-struct ICryUnknown
-{
- CRYINTERFACE_DECLARE(ICryUnknown, 0x1000000010001000, 0x1000100000000000)
-
- virtual ICryFactory * GetFactory() const = 0;
-
-protected:
- virtual void* QueryInterface(const CryInterfaceID& iid) const = 0;
- virtual void* QueryComposite(const char* name) const = 0;
-};
-
-DECLARE_SMART_POINTERS(ICryUnknown);
-
-
-#endif // CRYINCLUDE_CRYEXTENSION_ICRYUNKNOWN_H
diff --git a/Code/CryEngine/CryCommon/CryExtension/Impl/ClassWeaver.h b/Code/CryEngine/CryCommon/CryExtension/Impl/ClassWeaver.h
deleted file mode 100644
index c3b5bb340c..0000000000
--- a/Code/CryEngine/CryCommon/CryExtension/Impl/ClassWeaver.h
+++ /dev/null
@@ -1,461 +0,0 @@
-/*
-* All or portions of this file Copyright (c) Amazon.com, Inc. or its affiliates or
-* its licensors.
-*
-* For complete copyright and license terms please see the LICENSE at the root of this
-* distribution (the "License"). All use of this software is governed by the License,
-* or, if provided, by the license below or the license accompanying this file. Do not
-* remove or modify any license notices. This file is distributed on an "AS IS" BASIS,
-* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-*
-*/
-// Original file Copyright Crytek GMBH or its affiliates, used under license.
-
-// Description : Part of CryEngine's extension framework.
-
-
-#ifndef CRYINCLUDE_CRYEXTENSION_IMPL_CLASSWEAVER_H
-#define CRYINCLUDE_CRYEXTENSION_IMPL_CLASSWEAVER_H
-#pragma once
-
-#include "TypeList.h"
-#include "Conversion.h"
-#include "RegFactoryNode.h"
-#include "../ICryUnknown.h"
-#include "../ICryFactory.h"
-#include
-
-namespace CW
-{
- namespace Internal
- {
- template
- struct InterfaceCast;
-
- template
- struct InterfaceCast
- {
- template
- static void* Op(T* p)
- {
- return (Dst*) p;
- }
- };
-
- template <>
- struct InterfaceCast
- {
- template
- static void* Op(T* p)
- {
- return const_cast(static_cast(static_cast(p)));
- }
- };
- }
-
- template
- struct InterfaceCast;
-
- template <>
- struct InterfaceCast
- {
- template
- static void* Op(T*, const CryInterfaceID&)
- {
- return 0;
- }
- };
-
- template
- struct InterfaceCast >
- {
- template
- static void* Op(T* p, const CryInterfaceID& iid)
- {
- if (cryiidof() == iid)
- {
- return Internal::InterfaceCast::Op(p);
- }
- return InterfaceCast::Op(p, iid);
- }
- };
-
- template