From 8cceb33a5df05539ca22178b8299e4e4c49a7b8f Mon Sep 17 00:00:00 2001 From: Stephen Hodgson Date: Sat, 27 Apr 2019 22:59:28 -0700 Subject: [PATCH 001/488] Dev embedded packages (#130) * updated to embedded package * updated upm git extension to embedded package * updated lumin embedded package * updated embedded com.xrtk.sdk package * removed invalid manifest entry for sdk * updated some missing icons * updated all the modules --- .npmignore | 1 + AssemblyInfo.cs | 12 + AssemblyInfo.cs.meta | 11 + Attributes.meta | 8 + Attributes/EnumFlagsAttribute.cs | 17 + Attributes/EnumFlagsAttribute.cs.meta | 11 + Attributes/ExtendsAttribute.cs | 38 + Attributes/ExtendsAttribute.cs.meta | 11 + Attributes/ImplementsAttribute.cs | 50 + Attributes/ImplementsAttribute.cs.meta | 11 + Attributes/PhysicsLayerAttribute.cs | 17 + Attributes/PhysicsLayerAttribute.cs.meta | 11 + Attributes/PrefabAttribute.cs | 24 + Attributes/PrefabAttribute.cs.meta | 11 + Attributes/SystemTypeAttribute.cs | 52 + Attributes/SystemTypeAttribute.cs.meta | 11 + Attributes/Vector3RangeAttribute.cs | 36 + Attributes/Vector3RangeAttribute.cs.meta | 11 + CHANGELOG.md | 1 + CHANGELOG.md.meta | 7 + Definitions.meta | 8 + ...BaseMixedRealityExtensionServiceProfile.cs | 26 + ...ixedRealityExtensionServiceProfile.cs.meta | 11 + Definitions/BaseMixedRealityProfile.cs | 15 + Definitions/BaseMixedRealityProfile.cs.meta | 11 + Definitions/BoundarySystem.meta | 8 + Definitions/BoundarySystem/Edge.cs | 45 + Definitions/BoundarySystem/Edge.cs.meta | 11 + .../BoundarySystem/InscribedRectangle.cs | 549 +++++ .../BoundarySystem/InscribedRectangle.cs.meta | 11 + ...ixedRealityBoundaryVisualizationProfile.cs | 199 ++ ...ealityBoundaryVisualizationProfile.cs.meta | 11 + Definitions/Controllers.meta | 8 + ...xedRealityControllerDataProviderProfile.cs | 11 + ...alityControllerDataProviderProfile.cs.meta | 11 + ...aseMixedRealityControllerMappingProfile.cs | 75 + ...xedRealityControllerMappingProfile.cs.meta | 11 + ...tomMixedRealityControllerMappingProfile.cs | 18 + ...xedRealityControllerMappingProfile.cs.meta | 11 + ...edRealityControllerDataProvidersProfile.cs | 22 + ...lityControllerDataProvidersProfile.cs.meta | 11 + .../MixedRealityControllerMappingProfiles.cs | 50 + ...edRealityControllerMappingProfiles.cs.meta | 11 + ...edRealityControllerVisualizationProfile.cs | 190 ++ ...lityControllerVisualizationProfile.cs.meta | 11 + Definitions/Controllers/OpenVR.meta | 8 + .../GenericOpenVRControllerMappingProfile.cs | 30 + ...ericOpenVRControllerMappingProfile.cs.meta | 11 + .../OculusRemoteControllerMappingProfile.cs | 31 + ...ulusRemoteControllerMappingProfile.cs.meta | 11 + .../OculusTouchControllerMappingProfile.cs | 33 + ...culusTouchControllerMappingProfile.cs.meta | 11 + .../ViveWandControllerMappingProfile.cs | 33 + .../ViveWandControllerMappingProfile.cs.meta | 11 + Definitions/Controllers/UnityInput.meta | 8 + .../GenericUnityControllerMappingProfile.cs | 29 + ...nericUnityControllerMappingProfile.cs.meta | 11 + .../MouseControllerMappingProfile.cs | 29 + .../MouseControllerMappingProfile.cs.meta | 11 + .../TouchScreenControllerMappingProfile.cs | 29 + ...ouchScreenControllerMappingProfile.cs.meta | 11 + .../XboxControllerMappingProfile.cs | 31 + .../XboxControllerMappingProfile.cs.meta | 11 + Definitions/DataModelConfiguration.cs | 74 + Definitions/DataModelConfiguration.cs.meta | 11 + Definitions/Devices.meta | 8 + .../Devices/ControllerMappingLibrary.cs | 322 +++ .../Devices/ControllerMappingLibrary.cs.meta | 11 + Definitions/Devices/DeviceInputType.cs | 83 + Definitions/Devices/DeviceInputType.cs.meta | 11 + Definitions/Devices/GestureInputType.cs | 18 + Definitions/Devices/GestureInputType.cs.meta | 11 + Definitions/Devices/Headset.cs | 54 + Definitions/Devices/Headset.cs.meta | 11 + .../Devices/MixedRealityInteractionMapping.cs | 511 +++++ .../MixedRealityInteractionMapping.cs.meta | 11 + Definitions/Devices/SDKType.cs | 33 + Definitions/Devices/SDKType.cs.meta | 11 + .../Devices/SupportedControllerType.cs | 25 + .../Devices/SupportedControllerType.cs.meta | 11 + Definitions/Devices/TrackingState.cs | 31 + Definitions/Devices/TrackingState.cs.meta | 11 + Definitions/DiagnosticsSystem.meta | 8 + .../DiagnosticsSystem/CpuUseTracker.cs | 85 + .../DiagnosticsSystem/CpuUseTracker.cs.meta | 11 + .../DiagnosticsSystem/FpsUseTracker.cs | 40 + .../DiagnosticsSystem/FpsUseTracker.cs.meta | 11 + .../DiagnosticsSystem/MemoryReading.cs | 28 + .../DiagnosticsSystem/MemoryReading.cs.meta | 11 + .../DiagnosticsSystem/MemoryUseTracker.cs | 48 + .../MemoryUseTracker.cs.meta | 11 + .../MixedRealityDiagnosticsProfile.cs | 90 + .../MixedRealityDiagnosticsProfile.cs.meta | 11 + Definitions/InputSystem.meta | 8 + Definitions/InputSystem/AnimatedCursorData.cs | 57 + .../InputSystem/AnimatedCursorData.cs.meta | 11 + .../ControllerDataProviderConfiguration.cs | 76 + ...ontrollerDataProviderConfiguration.cs.meta | 11 + Definitions/InputSystem/CursorStateEnum.cs | 46 + .../InputSystem/CursorStateEnum.cs.meta | 11 + .../InputSystem/InputActionEventPair.cs | 44 + .../InputSystem/InputActionEventPair.cs.meta | 11 + .../InputSystem/InputActionRuleDigital.cs | 50 + .../InputActionRuleDigital.cs.meta | 11 + .../InputSystem/InputActionRuleDualAxis.cs | 50 + .../InputActionRuleDualAxis.cs.meta | 11 + .../InputSystem/InputActionRulePoseAxis.cs | 51 + .../InputActionRulePoseAxis.cs.meta | 11 + .../InputActionRuleQuaternionAxis.cs | 50 + .../InputActionRuleQuaternionAxis.cs.meta | 11 + .../InputSystem/InputActionRuleSingleAxis.cs | 50 + .../InputActionRuleSingleAxis.cs.meta | 11 + .../InputSystem/InputActionRuleVectorAxis.cs | 50 + .../InputActionRuleVectorAxis.cs.meta | 11 + Definitions/InputSystem/KeywordAndResponse.cs | 45 + .../InputSystem/KeywordAndResponse.cs.meta | 11 + .../InputSystem/MixedRealityGestureMapping.cs | 53 + .../MixedRealityGestureMapping.cs.meta | 11 + .../MixedRealityGesturesProfile.cs | 29 + .../MixedRealityGesturesProfile.cs.meta | 11 + .../InputSystem/MixedRealityInputAction.cs | 99 + .../MixedRealityInputAction.cs.meta | 11 + .../MixedRealityInputActionRulesProfile.cs | 60 + ...ixedRealityInputActionRulesProfile.cs.meta | 11 + .../MixedRealityInputActionsProfile.cs | 93 + .../MixedRealityInputActionsProfile.cs.meta | 11 + .../MixedRealityInputSystemProfile.cs | 168 ++ .../MixedRealityInputSystemProfile.cs.meta | 11 + .../InputSystem/MixedRealityPointerProfile.cs | 83 + .../MixedRealityPointerProfile.cs.meta | 11 + .../MixedRealitySpeechCommandsProfile.cs | 42 + .../MixedRealitySpeechCommandsProfile.cs.meta | 11 + Definitions/InputSystem/PointerOption.cs | 56 + Definitions/InputSystem/PointerOption.cs.meta | 11 + Definitions/InputSystem/SpeechCommands.cs | 55 + .../InputSystem/SpeechCommands.cs.meta | 11 + .../InputSystem/WindowsGestureSettings.cs | 64 + .../WindowsGestureSettings.cs.meta | 11 + Definitions/Lines.meta | 8 + Definitions/Lines/DistortionMode.cs | 20 + Definitions/Lines/DistortionMode.cs.meta | 11 + Definitions/Lines/InterpolationMode.cs | 24 + Definitions/Lines/InterpolationMode.cs.meta | 11 + Definitions/Lines/InterpolationType.cs | 15 + Definitions/Lines/InterpolationType.cs.meta | 11 + Definitions/Lines/LinePointTransformMode.cs | 20 + .../Lines/LinePointTransformMode.cs.meta | 11 + Definitions/Lines/LineRotationMode.cs | 24 + Definitions/Lines/LineRotationMode.cs.meta | 11 + Definitions/Lines/PointDistributionMode.cs | 28 + .../Lines/PointDistributionMode.cs.meta | 11 + Definitions/Lines/StepMode.cs | 20 + Definitions/Lines/StepMode.cs.meta | 11 + Definitions/MixedRealityCameraProfile.cs | 102 + Definitions/MixedRealityCameraProfile.cs.meta | 11 + ...ealityRegisteredServiceProvidersProfile.cs | 24 + ...yRegisteredServiceProvidersProfile.cs.meta | 11 + .../MixedRealityServiceConfiguration.cs | 77 + .../MixedRealityServiceConfiguration.cs.meta | 11 + ...MixedRealityToolkitConfigurationProfile.cs | 310 +++ ...RealityToolkitConfigurationProfile.cs.meta | 11 + Definitions/NetworkingSystem.meta | 8 + .../BaseMixedRealityNetworkProviderProfile.cs | 16 + ...MixedRealityNetworkProviderProfile.cs.meta | 11 + .../MixedRealityNetworkSystemProfile.cs | 23 + .../MixedRealityNetworkSystemProfile.cs.meta | 11 + ...ixedRealityWebRtcNetworkProviderProfile.cs | 19 + ...ealityWebRtcNetworkProviderProfile.cs.meta | 11 + .../NetworkDataProviderConfiguration.cs | 79 + .../NetworkDataProviderConfiguration.cs.meta | 11 + Definitions/Physics.meta | 8 + .../Physics/ComparableRaycastResult.cs | 19 + .../Physics/ComparableRaycastResult.cs.meta | 11 + Definitions/Physics/FocusDetails.cs | 34 + Definitions/Physics/FocusDetails.cs.meta | 11 + Definitions/Physics/RayStep.cs | 208 ++ Definitions/Physics/RayStep.cs.meta | 11 + Definitions/Physics/RaycastMode.cs | 24 + Definitions/Physics/RaycastMode.cs.meta | 11 + Definitions/Physics/TeleportSurfaceResult.cs | 16 + .../Physics/TeleportSurfaceResult.cs.meta | 11 + Definitions/README.md | 84 + Definitions/README.md.meta | 7 + Definitions/SpatialAwarenessSystem.meta | 8 + ...xedRealitySpatialAwarenessSystemProfile.cs | 35 + ...alitySpatialAwarenessSystemProfile.cs.meta | 11 + .../SpatialAwarenessMeshLevelOfDetail.cs | 32 + .../SpatialAwarenessMeshLevelOfDetail.cs.meta | 11 + .../SpatialAwarenessSurfaceTypes.cs | 41 + .../SpatialAwarenessSurfaceTypes.cs.meta | 11 + .../SpatialMeshDisplayOptions.cs | 26 + .../SpatialMeshDisplayOptions.cs.meta | 11 + .../SpatialMeshObject.cs | 79 + .../SpatialMeshObject.cs.meta | 11 + ...patialObserverDataProviderConfiguration.cs | 79 + ...lObserverDataProviderConfiguration.cs.meta | 11 + Definitions/SpatialObservers.meta | 8 + ...eMixedRealitySpatialMeshObserverProfile.cs | 98 + ...dRealitySpatialMeshObserverProfile.cs.meta | 11 + .../BaseMixedRealitySpatialObserverProfile.cs | 64 + ...MixedRealitySpatialObserverProfile.cs.meta | 11 + .../BaseMixedRealitySurfaceObserverProfile.cs | 107 + ...MixedRealitySurfaceObserverProfile.cs.meta | 11 + Definitions/Utilities.meta | 8 + Definitions/Utilities/AnimatorParameter.cs | 97 + .../Utilities/AnimatorParameter.cs.meta | 11 + Definitions/Utilities/AutoStartBehavior.cs | 22 + .../Utilities/AutoStartBehavior.cs.meta | 11 + Definitions/Utilities/AxisType.cs | 45 + Definitions/Utilities/AxisType.cs.meta | 11 + Definitions/Utilities/CollationOrderType.cs | 32 + .../Utilities/CollationOrderType.cs.meta | 11 + Definitions/Utilities/Handedness.cs | 42 + Definitions/Utilities/Handedness.cs.meta | 11 + Definitions/Utilities/MixedRealityPose.cs | 146 ++ .../Utilities/MixedRealityPose.cs.meta | 11 + Definitions/Utilities/OrientationType.cs | 48 + Definitions/Utilities/OrientationType.cs.meta | 11 + Definitions/Utilities/PivotAxis.cs | 23 + Definitions/Utilities/PivotAxis.cs.meta | 11 + Definitions/Utilities/ProcessResult.cs | 39 + Definitions/Utilities/ProcessResult.cs.meta | 11 + .../Utilities/ProfileMenuItemIndices.cs | 31 + .../Utilities/ProfileMenuItemIndices.cs.meta | 11 + Definitions/Utilities/QuaternionSmoothed.cs | 33 + .../Utilities/QuaternionSmoothed.cs.meta | 11 + .../Utilities/RecognitionConfidenceLevel.cs | 16 + .../RecognitionConfidenceLevel.cs.meta | 11 + .../Utilities/RotationConstraintType.cs | 13 + .../Utilities/RotationConstraintType.cs.meta | 11 + Definitions/Utilities/ScaleStateType.cs | 12 + Definitions/Utilities/ScaleStateType.cs.meta | 11 + .../Utilities/SolverOrientationType.cs | 33 + .../Utilities/SolverOrientationType.cs.meta | 11 + Definitions/Utilities/SupportedPlatforms.cs | 20 + .../Utilities/SupportedPlatforms.cs.meta | 11 + Definitions/Utilities/SystemType.cs | 116 + Definitions/Utilities/SystemType.cs.meta | 11 + Definitions/Utilities/TrackedObjectType.cs | 21 + .../Utilities/TrackedObjectType.cs.meta | 11 + Definitions/Utilities/TypeGrouping.cs | 33 + Definitions/Utilities/TypeGrouping.cs.meta | 11 + Definitions/Utilities/Vector3Smoothed.cs | 33 + Definitions/Utilities/Vector3Smoothed.cs.meta | 11 + EventDatum.meta | 8 + EventDatum/Boundary.meta | 8 + EventDatum/Boundary/BoundaryEventData.cs | 64 + EventDatum/Boundary/BoundaryEventData.cs.meta | 11 + EventDatum/Diagnostics.meta | 8 + .../Diagnostics/DiagnosticsEventData.cs | 35 + .../Diagnostics/DiagnosticsEventData.cs.meta | 11 + EventDatum/GenericBaseEventData.cs | 51 + EventDatum/GenericBaseEventData.cs.meta | 11 + EventDatum/Input.meta | 8 + EventDatum/Input/BaseInputEventData.cs | 65 + EventDatum/Input/BaseInputEventData.cs.meta | 11 + EventDatum/Input/DictationEventData.cs | 42 + EventDatum/Input/DictationEventData.cs.meta | 11 + EventDatum/Input/FocusEventData.cs | 58 + EventDatum/Input/FocusEventData.cs.meta | 11 + EventDatum/Input/GraphicInputEventData.cs | 50 + .../Input/GraphicInputEventData.cs.meta | 11 + EventDatum/Input/InputEventData.cs | 64 + EventDatum/Input/InputEventData.cs.meta | 11 + .../Input/MixedRealityPointerEventData.cs | 42 + .../MixedRealityPointerEventData.cs.meta | 11 + EventDatum/Input/SourcePoseEventData.cs | 36 + EventDatum/Input/SourcePoseEventData.cs.meta | 11 + EventDatum/Input/SourceStateEventData.cs | 33 + EventDatum/Input/SourceStateEventData.cs.meta | 11 + EventDatum/Input/SpeechEventData.cs | 59 + EventDatum/Input/SpeechEventData.cs.meta | 11 + EventDatum/Networking.meta | 8 + .../Networking/BaseNetworkingEventData.cs | 34 + .../BaseNetworkingEventData.cs.meta | 11 + EventDatum/PlacementEventData.cs | 34 + EventDatum/PlacementEventData.cs.meta | 11 + EventDatum/README.md | 5 + EventDatum/README.md.meta | 7 + EventDatum/SpatialAwareness.meta | 8 + .../MixedRealitySpatialAwarenessEventData.cs | 43 + ...edRealitySpatialAwarenessEventData.cs.meta | 11 + EventDatum/Teleport.meta | 8 + EventDatum/Teleport/TeleportEventData.cs | 43 + EventDatum/Teleport/TeleportEventData.cs.meta | 11 + Extensions.meta | 8 + Extensions/AnimationCurveExtensions.cs | 28 + Extensions/AnimationCurveExtensions.cs.meta | 11 + Extensions/ArrayExtensions.cs | 33 + Extensions/ArrayExtensions.cs.meta | 11 + Extensions/BoundsExtensions.cs | 588 +++++ Extensions/BoundsExtensions.cs.meta | 11 + Extensions/CameraExtensions.cs | 67 + Extensions/CameraExtensions.cs.meta | 11 + Extensions/CanvasExtensions.cs | 211 ++ Extensions/CanvasExtensions.cs.meta | 11 + Extensions/CollectionsExtensions.cs | 166 ++ Extensions/CollectionsExtensions.cs.meta | 11 + Extensions/Color32Extensions.cs | 66 + Extensions/Color32Extensions.cs.meta | 11 + Extensions/ComparerExtensions.cs | 42 + Extensions/ComparerExtensions.cs.meta | 11 + Extensions/ComponentExtensions.cs | 68 + Extensions/ComponentExtensions.cs.meta | 11 + Extensions/ConverterExtensions.cs | 103 + Extensions/ConverterExtensions.cs.meta | 11 + .../DataModelConfigurationExtensions.cs | 27 + .../DataModelConfigurationExtensions.cs.meta | 11 + Extensions/DoubleExtensions.cs | 26 + Extensions/DoubleExtensions.cs.meta | 11 + Extensions/EditorClassExtensions.meta | 8 + .../ScriptableObjectExtensions.cs | 73 + .../ScriptableObjectExtensions.cs.meta | 11 + ...TK.Extensions.EditorClassExtensions.asmdef | 14 + ...tensions.EditorClassExtensions.asmdef.meta | 7 + Extensions/EnumerableExtensions.cs | 42 + Extensions/EnumerableExtensions.cs.meta | 11 + Extensions/EventSystemExtensions.cs | 58 + Extensions/EventSystemExtensions.cs.meta | 11 + Extensions/FloatExtensions.cs | 26 + Extensions/FloatExtensions.cs.meta | 11 + Extensions/GameObjectExtensions.cs | 132 ++ Extensions/GameObjectExtensions.cs.meta | 11 + Extensions/GestureRecognizerExtensions.cs | 27 + .../GestureRecognizerExtensions.cs.meta | 11 + Extensions/InteractionSourceExtensions.cs | 109 + .../InteractionSourceExtensions.cs.meta | 11 + Extensions/LayerExtensions.cs | 187 ++ Extensions/LayerExtensions.cs.meta | 11 + Extensions/MathfExtensions.cs | 73 + Extensions/MathfExtensions.cs.meta | 11 + Extensions/ProcessExtensions.cs | 218 ++ Extensions/ProcessExtensions.cs.meta | 11 + Extensions/QuaternionExtensions.cs | 19 + Extensions/QuaternionExtensions.cs.meta | 11 + Extensions/RayExtensions.cs | 23 + Extensions/RayExtensions.cs.meta | 11 + Extensions/StringExtensions.cs | 94 + Extensions/StringExtensions.cs.meta | 11 + Extensions/TextureExtensions.cs | 30 + Extensions/TextureExtensions.cs.meta | 11 + Extensions/TransformExtensions.cs | 259 +++ Extensions/TransformExtensions.cs.meta | 11 + Extensions/UnityObjectExtensions.cs | 25 + Extensions/UnityObjectExtensions.cs.meta | 11 + Extensions/VectorExtensions.cs | 245 +++ Extensions/VectorExtensions.cs.meta | 11 + Inspectors.meta | 8 + .../BaseMixedRealityToolkitInspector.cs | 24 + .../BaseMixedRealityToolkitInspector.cs.meta | 11 + Inspectors/ControllerPopupWindow.cs | 759 +++++++ Inspectors/ControllerPopupWindow.cs.meta | 11 + Inspectors/Data.meta | 8 + .../Data/ControllerInputActionOption.cs | 22 + .../Data/ControllerInputActionOption.cs.meta | 11 + .../Data/ControllerInputActionOptions.cs | 17 + .../Data/ControllerInputActionOptions.cs.meta | 11 + Inspectors/Data/EditorWindowOptions.json | 1 + Inspectors/Data/EditorWindowOptions.json.meta | 7 + Inspectors/EditorHandsShaderGUI.cs | 21 + Inspectors/EditorHandsShaderGUI.cs.meta | 11 + Inspectors/MixedRealityPreferences.cs | 393 ++++ Inspectors/MixedRealityPreferences.cs.meta | 11 + Inspectors/MixedRealityStandardShaderGUI.cs | 991 +++++++++ .../MixedRealityStandardShaderGUI.cs.meta | 11 + Inspectors/MixedRealityToolkitInspector.cs | 152 ++ .../MixedRealityToolkitInspector.cs.meta | 11 + Inspectors/Profiles.meta | 8 + ...ealityControllerMappingProfileInspector.cs | 185 ++ ...yControllerMappingProfileInspector.cs.meta | 11 + .../BaseMixedRealityProfileInspector.cs | 183 ++ .../BaseMixedRealityProfileInspector.cs.meta | 11 + ...CustomControllerMappingProfileInspector.cs | 11 + ...mControllerMappingProfileInspector.cs.meta | 11 + Inspectors/Profiles/DataProviders.meta | 8 + .../Profiles/DataProviders/Controllers.meta | 8 + .../DataProviders/Controllers/OpenVR.meta | 8 + ...OpenVRControllerMappingProfileInspector.cs | 11 + ...RControllerMappingProfileInspector.cs.meta | 11 + ...RemoteControllerMappingProfileInspector.cs | 11 + ...eControllerMappingProfileInspector.cs.meta | 11 + ...sTouchControllerMappingProfileInspector.cs | 11 + ...hControllerMappingProfileInspector.cs.meta | 11 + ...veWandControllerMappingProfileInspector.cs | 11 + ...dControllerMappingProfileInspector.cs.meta | 11 + .../DataProviders/Controllers/UnityInput.meta | 8 + ...cUnityControllerMappingProfileInspector.cs | 11 + ...yControllerMappingProfileInspector.cs.meta | 11 + .../MouseControllerMappingProfileInspector.cs | 11 + ...eControllerMappingProfileInspector.cs.meta | 11 + ...ScreenControllerMappingProfileInspector.cs | 11 + ...nControllerMappingProfileInspector.cs.meta | 11 + .../XboxControllerMappingProfileInspector.cs | 11 + ...xControllerMappingProfileInspector.cs.meta | 11 + ...tyBoundaryVisualizationProfileInspector.cs | 136 ++ ...ndaryVisualizationProfileInspector.cs.meta | 11 + .../MixedRealityCameraProfileInspector.cs | 102 + ...MixedRealityCameraProfileInspector.cs.meta | 11 + ...yControllerDataProviderProfileInspector.cs | 161 ++ ...rollerDataProviderProfileInspector.cs.meta | 11 + ...alityControllerMappingProfilesInspector.cs | 169 ++ ...ControllerMappingProfilesInspector.cs.meta | 11 + ...ControllerVisualizationProfileInspector.cs | 281 +++ ...ollerVisualizationProfileInspector.cs.meta | 11 + ...ealityDiagnosticsSystemProfileInspector.cs | 83 + ...yDiagnosticsSystemProfileInspector.cs.meta | 11 + .../MixedRealityGesturesProfileInspector.cs | 226 ++ ...xedRealityGesturesProfileInspector.cs.meta | 11 + .../MixedRealityInputActionRulesInspector.cs | 568 +++++ ...edRealityInputActionRulesInspector.cs.meta | 11 + ...ixedRealityInputActionsProfileInspector.cs | 131 ++ ...ealityInputActionsProfileInspector.cs.meta | 11 + ...MixedRealityInputSystemProfileInspector.cs | 94 + ...RealityInputSystemProfileInspector.cs.meta | 11 + ...xedRealityNetworkSystemProfileInspector.cs | 63 + ...alityNetworkSystemProfileInspector.cs.meta | 11 + .../MixedRealityPointerProfileInspector.cs | 151 ++ ...ixedRealityPointerProfileInspector.cs.meta | 12 + ...gisteredServiceProviderProfileInspector.cs | 148 ++ ...redServiceProviderProfileInspector.cs.meta | 11 + ...edRealitySpeechCommandsProfileInspector.cs | 169 ++ ...litySpeechCommandsProfileInspector.cs.meta | 11 + ...ityToolkitConfigurationProfileInspector.cs | 232 ++ ...olkitConfigurationProfileInspector.cs.meta | 12 + Inspectors/Profiles/SpatialAwareness.meta | 8 + ...litySpatialMeshObserverProfileInspector.cs | 79 + ...patialMeshObserverProfileInspector.cs.meta | 11 + ...dRealitySpatialObserverProfileInspector.cs | 96 + ...itySpatialObserverProfileInspector.cs.meta | 11 + ...dRealitySurfaceObserverProfileInspector.cs | 88 + ...itySurfaceObserverProfileInspector.cs.meta | 11 + ...ySpatialAwarenessSystemProfileInspector.cs | 131 ++ ...ialAwarenessSystemProfileInspector.cs.meta | 11 + Inspectors/PropertyDrawers.meta | 8 + .../EnumFlagsAttributeDrawer.cs | 22 + .../EnumFlagsAttributeDrawer.cs.meta | 11 + .../InputActionPropertyDrawer.cs | 90 + .../InputActionPropertyDrawer.cs.meta | 11 + .../MixedRealityPosePropertyDrawer.cs | 50 + .../MixedRealityPosePropertyDrawer.cs.meta | 11 + .../PhysicsLayerAttributeDrawer.cs | 40 + .../PhysicsLayerAttributeDrawer.cs.meta | 11 + .../PropertyDrawers/PrefabPropertyDrawer.cs | 51 + .../PrefabPropertyDrawer.cs.meta | 11 + .../SpeechCommandPropertyDrawer.cs | 30 + .../SpeechCommandPropertyDrawer.cs.meta | 11 + .../TypeReferencePropertyDrawer.cs | 414 ++++ .../TypeReferencePropertyDrawer.cs.meta | 11 + .../Vector3RangePropertyDrawer.cs | 48 + .../Vector3RangePropertyDrawer.cs.meta | 11 + Inspectors/SystemTypeRepairWindow.cs | 55 + Inspectors/SystemTypeRepairWindow.cs.meta | 11 + Inspectors/Utilities.meta | 8 + .../AssemblyDefinitionEditorExtension.cs | 396 ++++ .../AssemblyDefinitionEditorExtension.cs.meta | 11 + Inspectors/Utilities/AutoSceneSwitcher.cs | 87 + .../Utilities/AutoSceneSwitcher.cs.meta | 11 + Inspectors/Utilities/CanvasEditorExtension.cs | 139 ++ .../Utilities/CanvasEditorExtension.cs.meta | 11 + Inspectors/Utilities/ChannelPackerWindow.cs | 262 +++ .../Utilities/ChannelPackerWindow.cs.meta | 11 + Inspectors/Utilities/GitUtilities.cs | 147 ++ Inspectors/Utilities/GitUtilities.cs.meta | 11 + Inspectors/Utilities/HoverLightInspector.cs | 22 + .../Utilities/HoverLightInspector.cs.meta | 11 + Inspectors/Utilities/Lines.meta | 8 + Inspectors/Utilities/Lines/DataProviders.meta | 8 + ...seMixedRealityLineDataProviderInspector.cs | 368 ++++ ...edRealityLineDataProviderInspector.cs.meta | 11 + .../EllipseLineDataProviderInspector.cs | 76 + .../EllipseLineDataProviderInspector.cs.meta | 11 + ...rabolaPhysicalLineDataProviderInspector.cs | 53 + ...aPhysicalLineDataProviderInspector.cs.meta | 11 + ...licConstrainedLineDataProviderInspector.cs | 79 + ...nstrainedLineDataProviderInspector.cs.meta | 11 + .../RectangleLineDataProviderInspector.cs | 89 + ...RectangleLineDataProviderInspector.cs.meta | 11 + .../SimpleLineDataProviderInspector.cs | 76 + .../SimpleLineDataProviderInspector.cs.meta | 11 + .../SplineDataProviderInspector.cs | 335 +++ .../SplineDataProviderInspector.cs.meta | 11 + .../Utilities/MixedRealityInspectorUtility.cs | 480 +++++ .../MixedRealityInspectorUtility.cs.meta | 11 + Inspectors/Utilities/Packages.meta | 8 + .../Packages/MixedRealityPackageInfo.cs | 105 + .../Packages/MixedRealityPackageInfo.cs.meta | 11 + .../MixedRealityPackageSettings.asset | 39 + .../MixedRealityPackageSettings.asset.meta | 8 + .../Packages/MixedRealityPackageSettings.cs | 26 + .../MixedRealityPackageSettings.cs.meta | 11 + .../MixedRealityPackageSettingsInspector.cs | 27 + ...xedRealityPackageSettingsInspector.cs.meta | 11 + .../Packages/MixedRealityPackageUtilities.cs | 304 +++ .../MixedRealityPackageUtilities.cs.meta | 11 + .../Packages/MixedRealityPackageValidation.cs | 33 + .../MixedRealityPackageValidation.cs.meta | 11 + .../Packages/MixedRealityPackagesWindow.cs | 137 ++ .../MixedRealityPackagesWindow.cs.meta | 11 + Inspectors/Utilities/Rendering.meta | 8 + .../Rendering/ClippingBoxInspector.cs | 22 + .../Rendering/ClippingBoxInspector.cs.meta | 11 + .../Rendering/ClippingPlaneInspector.cs | 22 + .../Rendering/ClippingPlaneInspector.cs.meta | 11 + .../Rendering/ClippingSphereInspector.cs | 22 + .../Rendering/ClippingSphereInspector.cs.meta | 11 + Inspectors/Utilities/SymbolicLinks.meta | 8 + .../Utilities/SymbolicLinks/SymbolicLink.cs | 39 + .../SymbolicLinks/SymbolicLink.cs.meta | 11 + .../SymbolicLinks/SymbolicLinkSettings.cs | 24 + .../SymbolicLinkSettings.cs.meta | 11 + .../SymbolicLinkSettingsInspector.cs | 19 + .../SymbolicLinkSettingsInspector.cs.meta | 11 + .../Utilities/SymbolicLinks/SymbolicLinker.cs | 461 ++++ .../SymbolicLinks/SymbolicLinker.cs.meta | 11 + .../SymbolicLinks/SymbolicLinkerWindow.cs | 175 ++ .../SymbolicLinkerWindow.cs.meta | 11 + Inspectors/XRTK.Inspectors.asmdef | 19 + Inspectors/XRTK.Inspectors.asmdef.meta | 7 + Interfaces.meta | 8 + Interfaces/Audio.meta | 8 + Interfaces/Audio/IAudioInfluencer.cs | 25 + Interfaces/Audio/IAudioInfluencer.cs.meta | 11 + Interfaces/BoundarySystem.meta | 8 + .../IMixedRealityBoundaryHandler.cs | 17 + .../IMixedRealityBoundaryHandler.cs.meta | 11 + .../IMixedRealityBoundarySystem.cs | 179 ++ .../IMixedRealityBoundarySystem.cs.meta | 11 + Interfaces/CameraSystem.meta | 8 + .../CameraSystem/IMixedRealityCameraSystem.cs | 14 + .../IMixedRealityCameraSystem.cs.meta | 11 + Interfaces/Diagnostics.meta | 8 + .../IMixedRealityDiagnosticsHandler.cs | 20 + .../IMixedRealityDiagnosticsHandler.cs.meta | 11 + .../IMixedRealityDiagnosticsSystem.cs | 55 + .../IMixedRealityDiagnosticsSystem.cs.meta | 11 + Interfaces/EventSystem.meta | 8 + Interfaces/EventSystem/Handlers.meta | 8 + .../Handlers/IMixedRealityEventHandler.cs | 16 + .../IMixedRealityEventHandler.cs.meta | 11 + .../Handlers/IMixedRealityPlacementHandler.cs | 17 + .../IMixedRealityPlacementHandler.cs.meta | 11 + .../EventSystem/IMixedRealityEventSource.cs | 23 + .../IMixedRealityEventSource.cs.meta | 11 + .../EventSystem/IMixedRealityEventSystem.cs | 41 + .../IMixedRealityEventSystem.cs.meta | 11 + Interfaces/IMixedRealityDataProvider.cs | 13 + Interfaces/IMixedRealityDataProvider.cs.meta | 11 + Interfaces/IMixedRealityExtensionService.cs | 13 + .../IMixedRealityExtensionService.cs.meta | 11 + Interfaces/IMixedRealityService.cs | 66 + Interfaces/IMixedRealityService.cs.meta | 11 + Interfaces/InputSystem.meta | 8 + Interfaces/InputSystem/Handlers.meta | 8 + .../Handlers/IMixedRealityDictationHandler.cs | 22 + .../IMixedRealityDictationHandler.cs.meta | 11 + .../IMixedRealityFocusChangedHandler.cs | 27 + .../IMixedRealityFocusChangedHandler.cs.meta | 11 + .../Handlers/IMixedRealityFocusHandler.cs | 26 + .../IMixedRealityFocusHandler.cs.meta | 11 + .../Handlers/IMixedRealityGestureHandler.cs | 63 + .../IMixedRealityGestureHandler.cs.meta | 11 + .../Handlers/IMixedRealityInputHandler.cs | 41 + .../IMixedRealityInputHandler.cs.meta | 11 + .../Handlers/IMixedRealityPointerHandler.cs | 32 + .../IMixedRealityPointerHandler.cs.meta | 11 + .../IMixedRealitySourcePoseHandler.cs | 42 + .../IMixedRealitySourcePoseHandler.cs.meta | 11 + .../IMixedRealitySourceStateHandler.cs | 26 + .../IMixedRealitySourceStateHandler.cs.meta | 11 + .../Handlers/IMixedRealitySpeechHandler.cs | 16 + .../IMixedRealitySpeechHandler.cs.meta | 11 + Interfaces/InputSystem/ICursorModifier.cs | 91 + .../InputSystem/ICursorModifier.cs.meta | 11 + Interfaces/InputSystem/IInputActionRule.cs | 29 + .../InputSystem/IInputActionRule.cs.meta | 11 + Interfaces/InputSystem/IMixedRealityCursor.cs | 61 + .../InputSystem/IMixedRealityCursor.cs.meta | 11 + .../InputSystem/IMixedRealityFocusProvider.cs | 89 + .../IMixedRealityFocusProvider.cs.meta | 11 + .../InputSystem/IMixedRealityGazeProvider.cs | 80 + .../IMixedRealityGazeProvider.cs.meta | 11 + .../InputSystem/IMixedRealityInputSource.cs | 19 + .../IMixedRealityInputSource.cs.meta | 11 + .../InputSystem/IMixedRealityInputSystem.cs | 598 ++++++ .../IMixedRealityInputSystem.cs.meta | 11 + .../InputSystem/IMixedRealityMousePointer.cs | 32 + .../IMixedRealityMousePointer.cs.meta | 11 + .../InputSystem/IMixedRealityPointer.cs | 152 ++ .../InputSystem/IMixedRealityPointer.cs.meta | 11 + .../InputSystem/IMixedRealityTouchPointer.cs | 23 + .../IMixedRealityTouchPointer.cs.meta | 11 + Interfaces/InputSystem/IPointerResult.cs | 39 + Interfaces/InputSystem/IPointerResult.cs.meta | 11 + Interfaces/NetworkingSystem.meta | 8 + Interfaces/NetworkingSystem/Handlers.meta | 8 + .../IMixedRealityNetworkingHandler.cs | 21 + .../IMixedRealityNetworkingHandler.cs.meta | 11 + .../IMixedRealityNetworkDataProvider.cs | 34 + .../IMixedRealityNetworkDataProvider.cs.meta | 11 + .../IMixedRealityNetworkingSystem.cs | 51 + .../IMixedRealityNetworkingSystem.cs.meta | 11 + Interfaces/Physics.meta | 8 + Interfaces/Physics/IBaseRayStabilizer.cs | 16 + Interfaces/Physics/IBaseRayStabilizer.cs.meta | 11 + Interfaces/Providers.meta | 8 + Interfaces/Providers/Controllers.meta | 8 + .../Controllers/IMixedRealityController.cs | 68 + .../IMixedRealityController.cs.meta | 11 + .../IMixedRealityControllerDataProvider.cs | 17 + ...MixedRealityControllerDataProvider.cs.meta | 11 + ...IMixedRealityControllerPoseSynchronizer.cs | 56 + ...dRealityControllerPoseSynchronizer.cs.meta | 11 + .../IMixedRealityControllerVisualizer.cs | 20 + .../IMixedRealityControllerVisualizer.cs.meta | 11 + .../IMixedRealityDictationDataProvider.cs | 50 + ...IMixedRealityDictationDataProvider.cs.meta | 11 + .../IMixedRealitySpeechDataProvider.cs | 28 + .../IMixedRealitySpeechDataProvider.cs.meta | 11 + Interfaces/Providers/SpatialObservers.meta | 8 + .../IMixedRealitySpatialMeshObserver.cs | 110 + .../IMixedRealitySpatialMeshObserver.cs.meta | 11 + ...MixedRealitySpatialObserverDataProvider.cs | 47 + ...RealitySpatialObserverDataProvider.cs.meta | 11 + .../IMixedRealitySurfaceObserver.cs | 74 + .../IMixedRealitySurfaceObserver.cs.meta | 11 + Interfaces/README.md | 19 + Interfaces/README.md.meta | 7 + Interfaces/SpatialAwareness.meta | 8 + Interfaces/SpatialAwareness/Handlers.meta | 8 + ...MixedRealitySpatialAwarenessMeshHandler.cs | 32 + ...RealitySpatialAwarenessMeshHandler.cs.meta | 11 + ...tySpatialAwarenessSurfaceFindingHandler.cs | 33 + ...tialAwarenessSurfaceFindingHandler.cs.meta | 11 + .../IMixedRealitySpatialAwarenessSystem.cs | 142 ++ ...MixedRealitySpatialAwarenessSystem.cs.meta | 11 + Interfaces/TeleportSystem.meta | 8 + Interfaces/TeleportSystem/Handlers.meta | 8 + .../Handlers/IMixedRealityTeleportHandler.cs | 35 + .../IMixedRealityTeleportHandler.cs.meta | 11 + .../IMixedRealityTeleportHotSpot.cs | 44 + .../IMixedRealityTeleportHotSpot.cs.meta | 11 + .../IMixedRealityTeleportSystem.cs | 41 + .../IMixedRealityTeleportSystem.cs.meta | 11 + LICENSE.md | 22 + LICENSE.md.meta | 7 + Providers.meta | 8 + Providers/Controllers.meta | 8 + Providers/Controllers/BaseController.cs | 291 +++ Providers/Controllers/BaseController.cs.meta | 11 + .../Controllers/BaseControllerDataProvider.cs | 70 + .../BaseControllerDataProvider.cs.meta | 11 + .../Controllers/BaseDictationDataProvider.cs | 52 + .../BaseDictationDataProvider.cs.meta | 11 + .../Controllers/BaseSpeechDataProvider.cs | 30 + .../BaseSpeechDataProvider.cs.meta | 11 + .../MixedRealityControllerMapping.cs | 121 ++ .../MixedRealityControllerMapping.cs.meta | 11 + ...edRealityControllerVisualizationSetting.cs | 130 ++ ...lityControllerVisualizationSetting.cs.meta | 11 + Providers/Controllers/OpenVR.meta | 8 + .../OpenVR/GenericOpenVRController.cs | 219 ++ .../OpenVR/GenericOpenVRController.cs.meta | 11 + .../OpenVR/OculusRemoteController.cs | 39 + .../OpenVR/OculusRemoteController.cs.meta | 11 + .../OpenVR/OculusTouchController.cs | 76 + .../OpenVR/OculusTouchController.cs.meta | 11 + .../Controllers/OpenVR/OpenVRDataProvider.cs | 153 ++ .../OpenVR/OpenVRDataProvider.cs.meta | 11 + .../OpenVR/ViveKnucklesController.cs | 71 + .../OpenVR/ViveKnucklesController.cs.meta | 11 + .../Controllers/OpenVR/ViveWandController.cs | 60 + .../OpenVR/ViveWandController.cs.meta | 11 + ...ndowsMixedRealityOpenVRMotionController.cs | 70 + ...MixedRealityOpenVRMotionController.cs.meta | 11 + Providers/Controllers/UnityInput.meta | 8 + .../UnityInput/GenericJoystickController.cs | 238 +++ .../GenericJoystickController.cs.meta | 11 + .../Controllers/UnityInput/MouseController.cs | 148 ++ .../UnityInput/MouseController.cs.meta | 11 + .../UnityInput/MouseDataProvider.cs | 99 + .../UnityInput/MouseDataProvider.cs.meta | 11 + .../UnityInput/UnityJoystickDataProvider.cs | 198 ++ .../UnityJoystickDataProvider.cs.meta | 11 + .../UnityInput/UnityTouchController.cs | 227 ++ .../UnityInput/UnityTouchController.cs.meta | 11 + .../UnityInput/UnityTouchDataProvider.cs | 152 ++ .../UnityInput/UnityTouchDataProvider.cs.meta | 11 + .../Controllers/UnityInput/XboxController.cs | 57 + .../UnityInput/XboxController.cs.meta | 11 + Providers/Networking.meta | 8 + Providers/Networking/WebRTC.meta | 8 + .../WebRTC/MixedRealityWebRtcDataProvider.cs | 179 ++ .../MixedRealityWebRtcDataProvider.cs.meta | 11 + .../Networking/WebRTC/WebRtcPeerConnection.cs | 10 + .../WebRTC/WebRtcPeerConnection.cs.meta | 11 + Providers/SpatialObservers.meta | 8 + .../BaseMixedRealitySpatialMeshObserver.cs | 355 ++++ ...aseMixedRealitySpatialMeshObserver.cs.meta | 11 + ...MixedRealitySpatialObserverDataProvider.cs | 160 ++ ...RealitySpatialObserverDataProvider.cs.meta | 11 + .../BaseMixedRealitySurfaceObserver.cs | 80 + .../BaseMixedRealitySurfaceObserver.cs.meta | 11 + README.md | 88 + README.md.meta | 7 + Services.meta | 8 + Services/BaseDataProvider.cs | 23 + Services/BaseDataProvider.cs.meta | 11 + Services/BaseEventSystem.cs | 94 + Services/BaseEventSystem.cs.meta | 11 + Services/BaseExtensionService.cs | 25 + Services/BaseExtensionService.cs.meta | 11 + Services/BaseService.cs | 68 + Services/BaseService.cs.meta | 11 + Services/BaseServiceWithConstructor.cs | 39 + Services/BaseServiceWithConstructor.cs.meta | 11 + Services/BaseSystem.cs | 26 + Services/BaseSystem.cs.meta | 11 + Services/BoundarySystem.meta | 8 + .../MixedRealityBoundarySystem.cs | 943 +++++++++ .../MixedRealityBoundarySystem.cs.meta | 11 + Services/CameraSystem.meta | 8 + .../CameraSystem/MixedRealityCameraSystem.cs | 119 ++ .../MixedRealityCameraSystem.cs.meta | 11 + Services/DiagnosticsSystem.meta | 8 + .../MixedRealityDiagnosticsSystem.cs | 253 +++ .../MixedRealityDiagnosticsSystem.cs.meta | 11 + Services/InputSystem.meta | 8 + .../InputSystem/BaseGenericInputSource.cs | 85 + .../BaseGenericInputSource.cs.meta | 11 + Services/InputSystem/FocusProvider.cs | 959 +++++++++ Services/InputSystem/FocusProvider.cs.meta | 11 + Services/InputSystem/GenericPointer.cs | 184 ++ Services/InputSystem/GenericPointer.cs.meta | 11 + .../InputSystem/MixedRealityInputSystem.cs | 1510 +++++++++++++ .../MixedRealityInputSystem.cs.meta | 11 + Services/MixedRealityToolkit.cs | 1884 +++++++++++++++++ Services/MixedRealityToolkit.cs.meta | 12 + Services/NetworkingSystem.meta | 8 + .../MixedRealityNetworkingSystem.cs | 63 + .../MixedRealityNetworkingSystem.cs.meta | 11 + Services/SpatialAwarenessSystem.meta | 8 + .../MixedRealitySpatialAwarenessSystem.cs | 338 +++ ...MixedRealitySpatialAwarenessSystem.cs.meta | 11 + Services/TeleportSystem.meta | 8 + .../MixedRealityTeleportSystem.cs | 252 +++ .../MixedRealityTeleportSystem.cs.meta | 11 + StandardAssets.meta | 8 + StandardAssets/Fonts.meta | 8 + StandardAssets/Fonts/LICENSE.txt | 91 + StandardAssets/Fonts/LICENSE.txt.meta | 7 + StandardAssets/Fonts/selawk.ttf | Bin 0 -> 44224 bytes StandardAssets/Fonts/selawk.ttf.meta | 24 + StandardAssets/Fonts/selawkb.ttf | Bin 0 -> 44068 bytes StandardAssets/Fonts/selawkb.ttf.meta | 23 + StandardAssets/Fonts/selawkl.ttf | Bin 0 -> 44232 bytes StandardAssets/Fonts/selawkl.ttf.meta | 26 + StandardAssets/Fonts/selawksb.ttf | Bin 0 -> 44192 bytes StandardAssets/Fonts/selawksb.ttf.meta | 22 + StandardAssets/Fonts/selawksl.ttf | Bin 0 -> 44260 bytes StandardAssets/Fonts/selawksl.ttf.meta | 25 + StandardAssets/Icons.meta | 8 + StandardAssets/Icons/mic_icon.png | Bin 0 -> 627 bytes StandardAssets/Icons/mic_icon.png.meta | 106 + StandardAssets/Icons/mixed_reality_icon.png | Bin 0 -> 855 bytes .../Icons/mixed_reality_icon.png.meta | 106 + StandardAssets/Icons/script_icon.png | Bin 0 -> 654 bytes StandardAssets/Icons/script_icon.png.meta | 106 + StandardAssets/Icons/settings_icon.png | Bin 0 -> 629 bytes StandardAssets/Icons/settings_icon.png.meta | 106 + StandardAssets/Icons/shapes_icon.png | Bin 0 -> 1131 bytes StandardAssets/Icons/shapes_icon.png.meta | 106 + StandardAssets/Icons/spatial_icon.png | Bin 0 -> 812 bytes StandardAssets/Icons/spatial_icon.png.meta | 106 + .../Icons/spatial_understanding_icon.png | Bin 0 -> 1098 bytes .../Icons/spatial_understanding_icon.png.meta | 106 + StandardAssets/Icons/toolkit_icon.png | Bin 0 -> 682 bytes StandardAssets/Icons/toolkit_icon.png.meta | 106 + StandardAssets/Icons/ux_icon.png | Bin 0 -> 777 bytes StandardAssets/Icons/ux_icon.png.meta | 106 + StandardAssets/Materials.meta | 8 + StandardAssets/Materials/3DTextSelawik.mat | 135 ++ .../Materials/3DTextSelawik.mat.meta | 8 + .../Materials/3DTextSelawikBold.mat | 135 ++ .../Materials/3DTextSelawikBold.mat.meta | 8 + .../Materials/3DTextSelawikLight.mat | 135 ++ .../Materials/3DTextSelawikLight.mat.meta | 8 + .../Materials/3DTextSelawikSemibold.mat | 155 ++ .../Materials/3DTextSelawikSemibold.mat.meta | 8 + .../Materials/3DTextSelawikSemilight.mat | 135 ++ .../Materials/3DTextSelawikSemilight.mat.meta | 8 + StandardAssets/Materials/UIDarkGray.mat | 173 ++ StandardAssets/Materials/UIDarkGray.mat.meta | 8 + StandardAssets/Models.meta | 8 + StandardAssets/Models/GizmoLeft.fbx | Bin 0 -> 66480 bytes StandardAssets/Models/GizmoLeft.fbx.meta | 164 ++ StandardAssets/Models/GizmoRight.fbx | Bin 0 -> 50064 bytes StandardAssets/Models/GizmoRight.fbx.meta | 132 ++ StandardAssets/Prefabs.meta | 8 + StandardAssets/Prefabs/Gizmos.meta | 8 + .../Prefabs/Gizmos/GizmoLeft.prefab | 1186 +++++++++++ .../Prefabs/Gizmos/GizmoLeft.prefab.meta | 8 + .../Prefabs/Gizmos/GizmoRight.prefab | 690 ++++++ .../Prefabs/Gizmos/GizmoRight.prefab.meta | 8 + StandardAssets/Shaders.meta | 8 + StandardAssets/Shaders/ChannelPacker.shader | 101 + .../Shaders/ChannelPacker.shader.meta | 9 + StandardAssets/Shaders/InvisibleShader.shader | 54 + .../Shaders/InvisibleShader.shader.meta | 10 + .../Shaders/MixedRealityStandard.shader | 951 +++++++++ .../Shaders/MixedRealityStandard.shader.meta | 10 + StandardAssets/Shaders/XRTK_Wireframe.shader | 122 ++ .../Shaders/XRTK_Wireframe.shader.meta | 9 + StandardAssets/Textures.meta | 8 + .../Generic_controller_black_scaled.png | Bin 0 -> 9775 bytes .../Generic_controller_black_scaled.png.meta | 106 + .../Generic_controller_white_scaled.png | Bin 0 -> 3937 bytes .../Generic_controller_white_scaled.png.meta | 106 + .../Textures/LuminController_left_black.png | Bin 0 -> 49347 bytes .../LuminController_left_black.png.meta | 145 ++ .../LuminController_left_black_scaled.png | Bin 0 -> 49347 bytes ...LuminController_left_black_scaled.png.meta | 145 ++ .../Textures/LuminController_left_white.png | Bin 0 -> 47039 bytes .../LuminController_left_white.png.meta | 145 ++ .../LuminController_left_white_scaled.png | Bin 0 -> 47039 bytes ...LuminController_left_white_scaled.png.meta | 145 ++ .../Textures/LuminController_right_black.png | Bin 0 -> 50330 bytes .../LuminController_right_black.png.meta | 145 ++ .../LuminController_right_black_scaled.png | Bin 0 -> 50330 bytes ...uminController_right_black_scaled.png.meta | 145 ++ .../Textures/LuminController_right_white.png | Bin 0 -> 47727 bytes .../LuminController_right_white.png.meta | 145 ++ .../LuminController_right_white_scaled.png | Bin 0 -> 47727 bytes ...uminController_right_white_scaled.png.meta | 145 ++ .../Textures/MotionController_left_black.png | Bin 0 -> 312494 bytes .../MotionController_left_black.png.meta | 106 + .../MotionController_left_black_scaled.png | Bin 0 -> 11681 bytes ...otionController_left_black_scaled.png.meta | 106 + .../Textures/MotionController_left_white.png | Bin 0 -> 312953 bytes .../MotionController_left_white.png.meta | 106 + .../MotionController_left_white_scaled.png | Bin 0 -> 11561 bytes ...otionController_left_white_scaled.png.meta | 106 + .../Textures/MotionController_right_black.png | Bin 0 -> 311430 bytes .../MotionController_right_black.png.meta | 106 + .../MotionController_right_black_scaled.png | Bin 0 -> 11622 bytes ...tionController_right_black_scaled.png.meta | 106 + .../Textures/MotionController_right_white.png | Bin 0 -> 313883 bytes .../MotionController_right_white.png.meta | 106 + .../MotionController_right_white_scaled.png | Bin 0 -> 11499 bytes ...tionController_right_white_scaled.png.meta | 106 + StandardAssets/Textures/MouseCursor.png | Bin 0 -> 2786 bytes StandardAssets/Textures/MouseCursor.png.meta | 106 + .../Textures/Oculus lineart attribution.txt | 5 + .../Oculus lineart attribution.txt.meta | 7 + .../OculusControllersTouch_left_black.png | Bin 0 -> 402320 bytes ...OculusControllersTouch_left_black.png.meta | 106 + ...ulusControllersTouch_left_black_scaled.png | Bin 0 -> 10675 bytes ...ontrollersTouch_left_black_scaled.png.meta | 106 + .../OculusControllersTouch_left_white.png | Bin 0 -> 401529 bytes ...OculusControllersTouch_left_white.png.meta | 106 + ...ulusControllersTouch_left_white_scaled.png | Bin 0 -> 10409 bytes ...ontrollersTouch_left_white_scaled.png.meta | 106 + .../OculusControllersTouch_right_black.png | Bin 0 -> 371462 bytes ...culusControllersTouch_right_black.png.meta | 106 + ...lusControllersTouch_right_black_scaled.png | Bin 0 -> 9887 bytes ...ntrollersTouch_right_black_scaled.png.meta | 106 + .../OculusControllersTouch_right_white.png | Bin 0 -> 365320 bytes ...culusControllersTouch_right_white.png.meta | 106 + ...lusControllersTouch_right_white_scaled.png | Bin 0 -> 9703 bytes ...ntrollersTouch_right_white_scaled.png.meta | 106 + .../Textures/OculusRemoteController_black.png | Bin 0 -> 47896 bytes .../OculusRemoteController_black.png.meta | 106 + .../OculusRemoteController_black_scaled.png | Bin 0 -> 6251 bytes ...ulusRemoteController_black_scaled.png.meta | 106 + .../Textures/OculusRemoteController_white.png | Bin 0 -> 46755 bytes .../OculusRemoteController_white.png.meta | 106 + .../OculusRemoteController_white_scaled.png | Bin 0 -> 6184 bytes ...ulusRemoteController_white_scaled.png.meta | 106 + .../ViveWandController_left_black.png | Bin 0 -> 355933 bytes .../ViveWandController_left_black.png.meta | 106 + .../ViveWandController_left_black_scaled.png | Bin 0 -> 10016 bytes ...eWandController_left_black_scaled.png.meta | 106 + .../ViveWandController_left_white.png | Bin 0 -> 353239 bytes .../ViveWandController_left_white.png.meta | 106 + .../ViveWandController_left_white_scaled.png | Bin 0 -> 9919 bytes ...eWandController_left_white_scaled.png.meta | 106 + .../ViveWandController_right_black.png | Bin 0 -> 353838 bytes .../ViveWandController_right_black.png.meta | 106 + .../ViveWandController_right_black_scaled.png | Bin 0 -> 10056 bytes ...WandController_right_black_scaled.png.meta | 106 + .../ViveWandController_right_white.png | Bin 0 -> 351086 bytes .../ViveWandController_right_white.png.meta | 106 + .../ViveWandController_right_white_scaled.png | Bin 0 -> 10040 bytes ...WandController_right_white_scaled.png.meta | 106 + StandardAssets/Textures/XRTK_Logo_Black.png | Bin 0 -> 19442 bytes .../Textures/XRTK_Logo_Black.png.meta | 106 + StandardAssets/Textures/XRTK_Logo_White.png | Bin 0 -> 19361 bytes .../Textures/XRTK_Logo_White.png.meta | 106 + .../Textures/XboxController_black.png | Bin 0 -> 554165 bytes .../Textures/XboxController_black.png.meta | 106 + .../Textures/XboxController_black_scaled.png | Bin 0 -> 10306 bytes .../XboxController_black_scaled.png.meta | 106 + .../Textures/XboxController_white.png | Bin 0 -> 560354 bytes .../Textures/XboxController_white.png.meta | 106 + .../Textures/XboxController_white_scaled.png | Bin 0 -> 8974 bytes .../XboxController_white_scaled.png.meta | 106 + Utilities.meta | 8 + Utilities/Async.meta | 10 + Utilities/Async/AwaitYieldInstructions.meta | 10 + .../BackgroundThread.cs | 16 + .../BackgroundThread.cs.meta | 11 + .../AwaitYieldInstructions/UnityMainThread.cs | 35 + .../UnityMainThread.cs.meta | 11 + Utilities/Async/AwaiterExtensions.cs | 409 ++++ Utilities/Async/AwaiterExtensions.cs.meta | 11 + Utilities/Async/Awaiters.cs | 93 + Utilities/Async/Awaiters.cs.meta | 11 + Utilities/Async/Internal.meta | 9 + .../Async/Internal/SyncContextUtility.cs | 83 + .../Async/Internal/SyncContextUtility.cs.meta | 11 + Utilities/Async/License.md | 21 + Utilities/Async/License.md.meta | 9 + Utilities/Async/ReadMe.md | 3 + Utilities/Async/ReadMe.md.meta | 9 + Utilities/BuildAndDeploy.meta | 8 + .../BuildAndDeploy/BuildDeployPreferences.cs | 61 + .../BuildDeployPreferences.cs.meta | 11 + Utilities/BuildAndDeploy/BuildDeployWindow.cs | 1522 +++++++++++++ .../BuildAndDeploy/BuildDeployWindow.cs.meta | 11 + Utilities/BuildAndDeploy/BuildInfo.cs | 91 + Utilities/BuildAndDeploy/BuildInfo.cs.meta | 11 + .../BuildAndDeploy/BuildInfoExtensions.cs | 137 ++ .../BuildInfoExtensions.cs.meta | 11 + Utilities/BuildAndDeploy/IBuildInfo.cs | 77 + Utilities/BuildAndDeploy/IBuildInfo.cs.meta | 11 + .../BuildAndDeploy/MixedRealityAppIcon.cs | 14 + .../MixedRealityAppIcon.cs.meta | 11 + .../BuildAndDeploy/UnityPlayerBuildTools.cs | 293 +++ .../UnityPlayerBuildTools.cs.meta | 11 + Utilities/BuildAndDeploy/UwpAppxBuildTools.cs | 367 ++++ .../BuildAndDeploy/UwpAppxBuildTools.cs.meta | 11 + .../UwpBuildDeployPreferences.cs | 118 ++ .../UwpBuildDeployPreferences.cs.meta | 11 + Utilities/BuildAndDeploy/UwpBuildInfo.cs | 27 + Utilities/BuildAndDeploy/UwpBuildInfo.cs.meta | 11 + .../BuildAndDeploy/UwpPlayerBuildTools.cs | 108 + .../UwpPlayerBuildTools.cs.meta | 11 + .../XRTK.Utilities.Build.asmdef | 17 + .../XRTK.Utilities.Build.asmdef.meta | 7 + Utilities/CalibrationSpace.cs | 22 + Utilities/CalibrationSpace.cs.meta | 11 + Utilities/CameraCache.cs | 85 + Utilities/CameraCache.cs.meta | 11 + Utilities/CanvasUtility.cs | 47 + Utilities/CanvasUtility.cs.meta | 11 + Utilities/DebugUtilities.cs | 33 + Utilities/DebugUtilities.cs.meta | 11 + Utilities/EdgeUtilities.cs | 110 + Utilities/EdgeUtilities.cs.meta | 11 + Utilities/Editor.meta | 8 + .../Editor/EditorAssemblyReloadManager.cs | 49 + .../EditorAssemblyReloadManager.cs.meta | 11 + Utilities/Editor/EditorPreferences.cs | 130 ++ Utilities/Editor/EditorPreferences.cs.meta | 11 + Utilities/Editor/IconEditor.cs | 107 + Utilities/Editor/IconEditor.cs.meta | 11 + Utilities/Editor/InputManagerAxis.cs | 27 + Utilities/Editor/InputManagerAxis.cs.meta | 11 + Utilities/Editor/InputManagerAxisType.cs | 15 + Utilities/Editor/InputManagerAxisType.cs.meta | 11 + Utilities/Editor/InputMappingAxisUtility.cs | 209 ++ .../Editor/InputMappingAxisUtility.cs.meta | 11 + .../Editor/MixedRealityEditorSettings.cs | 232 ++ .../Editor/MixedRealityEditorSettings.cs.meta | 11 + Utilities/Editor/USB.meta | 10 + Utilities/Editor/USB/USBDeviceInfo.cs | 30 + Utilities/Editor/USB/USBDeviceInfo.cs.meta | 11 + Utilities/Editor/USB/USBDeviceListener.cs | 40 + .../Editor/USB/USBDeviceListener.cs.meta | 11 + Utilities/Editor/XRTK.Utilities.Editor.asmdef | 14 + .../Editor/XRTK.Utilities.Editor.asmdef.meta | 7 + Utilities/FastSimplexNoise.cs | 501 +++++ Utilities/FastSimplexNoise.cs.meta | 11 + Utilities/Gltf.meta | 8 + Utilities/Gltf/Schema.meta | 8 + Utilities/Gltf/Schema/Extensions.meta | 8 + .../Gltf/Schema/Extensions/GltfExtension.cs | 10 + .../Schema/Extensions/GltfExtension.cs.meta | 11 + .../KHR_Materials_PbrSpecularGlossiness.cs | 14 + ...HR_Materials_PbrSpecularGlossiness.cs.meta | 11 + Utilities/Gltf/Schema/GltfAccessor.cs | 104 + Utilities/Gltf/Schema/GltfAccessor.cs.meta | 11 + .../Gltf/Schema/GltfAccessorAttributeType.cs | 20 + .../Schema/GltfAccessorAttributeType.cs.meta | 11 + Utilities/Gltf/Schema/GltfAccessorSparse.cs | 34 + .../Gltf/Schema/GltfAccessorSparse.cs.meta | 11 + .../Gltf/Schema/GltfAccessorSparseIndices.cs | 35 + .../Schema/GltfAccessorSparseIndices.cs.meta | 11 + .../Gltf/Schema/GltfAccessorSparseValues.cs | 26 + .../Schema/GltfAccessorSparseValues.cs.meta | 11 + Utilities/Gltf/Schema/GltfAlphaMode.cs | 16 + Utilities/Gltf/Schema/GltfAlphaMode.cs.meta | 11 + Utilities/Gltf/Schema/GltfAnimation.cs | 28 + Utilities/Gltf/Schema/GltfAnimation.cs.meta | 11 + Utilities/Gltf/Schema/GltfAnimationChannel.cs | 26 + .../Gltf/Schema/GltfAnimationChannel.cs.meta | 11 + .../Gltf/Schema/GltfAnimationChannelPath.cs | 20 + .../Schema/GltfAnimationChannelPath.cs.meta | 11 + .../Gltf/Schema/GltfAnimationChannelTarget.cs | 25 + .../Schema/GltfAnimationChannelTarget.cs.meta | 11 + Utilities/Gltf/Schema/GltfAnimationSampler.cs | 39 + .../Gltf/Schema/GltfAnimationSampler.cs.meta | 11 + Utilities/Gltf/Schema/GltfAssetInfo.cs | 35 + Utilities/Gltf/Schema/GltfAssetInfo.cs.meta | 11 + Utilities/Gltf/Schema/GltfBuffer.cs | 30 + Utilities/Gltf/Schema/GltfBuffer.cs.meta | 11 + Utilities/Gltf/Schema/GltfBufferView.cs | 52 + Utilities/Gltf/Schema/GltfBufferView.cs.meta | 11 + Utilities/Gltf/Schema/GltfBufferViewTarget.cs | 16 + .../Gltf/Schema/GltfBufferViewTarget.cs.meta | 11 + Utilities/Gltf/Schema/GltfCamera.cs | 35 + Utilities/Gltf/Schema/GltfCamera.cs.meta | 11 + .../Gltf/Schema/GltfCameraOrthographic.cs | 36 + .../Schema/GltfCameraOrthographic.cs.meta | 11 + .../Gltf/Schema/GltfCameraPerspective.cs | 43 + .../Gltf/Schema/GltfCameraPerspective.cs.meta | 11 + Utilities/Gltf/Schema/GltfCameraType.cs | 15 + Utilities/Gltf/Schema/GltfCameraType.cs.meta | 11 + .../Gltf/Schema/GltfChildOfRootProperty.cs | 21 + .../Schema/GltfChildOfRootProperty.cs.meta | 11 + Utilities/Gltf/Schema/GltfComponentType.cs | 21 + .../Gltf/Schema/GltfComponentType.cs.meta | 11 + Utilities/Gltf/Schema/GltfDrawMode.cs | 20 + Utilities/Gltf/Schema/GltfDrawMode.cs.meta | 11 + Utilities/Gltf/Schema/GltfImage.cs | 44 + Utilities/Gltf/Schema/GltfImage.cs.meta | 11 + .../Gltf/Schema/GltfInterpolationType.cs | 17 + .../Gltf/Schema/GltfInterpolationType.cs.meta | 11 + .../Schema/GltfMagnificationFilterMode.cs | 16 + .../GltfMagnificationFilterMode.cs.meta | 11 + Utilities/Gltf/Schema/GltfMaterial.cs | 88 + Utilities/Gltf/Schema/GltfMaterial.cs.meta | 11 + .../Gltf/Schema/GltfMaterialCommonConstant.cs | 29 + .../Schema/GltfMaterialCommonConstant.cs.meta | 11 + Utilities/Gltf/Schema/GltfMesh.cs | 35 + Utilities/Gltf/Schema/GltfMesh.cs.meta | 11 + Utilities/Gltf/Schema/GltfMeshPrimitive.cs | 63 + .../Gltf/Schema/GltfMeshPrimitive.cs.meta | 11 + .../Schema/GltfMeshPrimitiveAttributes.cs | 29 + .../GltfMeshPrimitiveAttributes.cs.meta | 11 + Utilities/Gltf/Schema/GltfMinFilterMode.cs | 20 + .../Gltf/Schema/GltfMinFilterMode.cs.meta | 11 + Utilities/Gltf/Schema/GltfNode.cs | 80 + Utilities/Gltf/Schema/GltfNode.cs.meta | 11 + .../Gltf/Schema/GltfNormalTextureInfo.cs | 21 + .../Gltf/Schema/GltfNormalTextureInfo.cs.meta | 11 + Utilities/Gltf/Schema/GltfObject.cs | 130 ++ Utilities/Gltf/Schema/GltfObject.cs.meta | 11 + .../Gltf/Schema/GltfOcclusionTextureInfo.cs | 25 + .../Schema/GltfOcclusionTextureInfo.cs.meta | 11 + .../Gltf/Schema/GltfPbrMetallicRoughness.cs | 59 + .../Schema/GltfPbrMetallicRoughness.cs.meta | 11 + Utilities/Gltf/Schema/GltfProperty.cs | 20 + Utilities/Gltf/Schema/GltfProperty.cs.meta | 11 + Utilities/Gltf/Schema/GltfSampler.cs | 36 + Utilities/Gltf/Schema/GltfSampler.cs.meta | 11 + Utilities/Gltf/Schema/GltfScene.cs | 20 + Utilities/Gltf/Schema/GltfScene.cs.meta | 11 + Utilities/Gltf/Schema/GltfSkin.cs | 34 + Utilities/Gltf/Schema/GltfSkin.cs.meta | 11 + Utilities/Gltf/Schema/GltfTexture.cs | 31 + Utilities/Gltf/Schema/GltfTexture.cs.meta | 11 + Utilities/Gltf/Schema/GltfTextureInfo.cs | 26 + Utilities/Gltf/Schema/GltfTextureInfo.cs.meta | 11 + Utilities/Gltf/Schema/GltfWrapMode.cs | 17 + Utilities/Gltf/Schema/GltfWrapMode.cs.meta | 11 + Utilities/Gltf/Serialization.meta | 8 + Utilities/Gltf/Serialization/ColliderType.cs | 13 + .../Gltf/Serialization/ColliderType.cs.meta | 11 + Utilities/Gltf/Serialization/ConstructGltf.cs | 734 +++++++ .../Gltf/Serialization/ConstructGltf.cs.meta | 11 + Utilities/Gltf/Serialization/ExportGltf.cs | 9 + .../Gltf/Serialization/ExportGltf.cs.meta | 11 + Utilities/Gltf/Serialization/GltfAsset.cs | 26 + .../Gltf/Serialization/GltfAsset.cs.meta | 11 + Utilities/Gltf/Serialization/GltfChunkType.cs | 11 + .../Gltf/Serialization/GltfChunkType.cs.meta | 11 + .../Gltf/Serialization/GltfConversions.cs | 440 ++++ .../Serialization/GltfConversions.cs.meta | 11 + Utilities/Gltf/Serialization/GltfUtility.cs | 383 ++++ .../Gltf/Serialization/GltfUtility.cs.meta | 11 + Utilities/Gltf/Serialization/Importers.meta | 8 + .../Importers/GlbAssetImporter.cs | 13 + .../Importers/GlbAssetImporter.cs.meta | 11 + .../Importers/GltfAssetImporter.cs | 13 + .../Importers/GltfAssetImporter.cs.meta | 11 + .../Importers/GltfEditorImporter.cs | 103 + .../Importers/GltfEditorImporter.cs.meta | 11 + .../XRTK.Utilities.Gltf.Importers.asmdef | 17 + .../XRTK.Utilities.Gltf.Importers.asmdef.meta | 7 + Utilities/HoverLight.cs | 159 ++ Utilities/HoverLight.cs.meta | 11 + Utilities/Lines.meta | 10 + Utilities/Lines/DataProviders.meta | 8 + .../BaseMixedRealityLineDataProvider.cs | 714 +++++++ .../BaseMixedRealityLineDataProvider.cs.meta | 11 + .../DataProviders/EllipseLineDataProvider.cs | 89 + .../EllipseLineDataProvider.cs.meta | 11 + .../ParabolaConstrainedLineDataProvider.cs | 111 + ...arabolaConstrainedLineDataProvider.cs.meta | 11 + .../DataProviders/ParabolaLineDataProvider.cs | 60 + .../ParabolaLineDataProvider.cs.meta | 11 + .../ParabolaPhysicalLineDataProvider.cs | 112 + .../ParabolaPhysicalLineDataProvider.cs.meta | 11 + .../RectangleLineDataProvider.cs | 182 ++ .../RectangleLineDataProvider.cs.meta | 11 + .../DataProviders/SimpleLineDataProvider.cs | 109 + .../SimpleLineDataProvider.cs.meta | 11 + .../Lines/DataProviders/SplineDataProvider.cs | 276 +++ .../DataProviders/SplineDataProvider.cs.meta | 11 + Utilities/Lines/LineFollower.cs | 102 + Utilities/Lines/LineFollower.cs.meta | 11 + Utilities/Lines/LineUtility.cs | 241 +++ Utilities/Lines/LineUtility.cs.meta | 11 + Utilities/Lines/Renderers.meta | 8 + .../Renderers/BaseMixedRealityLineRenderer.cs | 332 +++ .../BaseMixedRealityLineRenderer.cs.meta | 11 + Utilities/Lines/Renderers/MeshLineRenderer.cs | 156 ++ .../Lines/Renderers/MeshLineRenderer.cs.meta | 11 + .../Renderers/MixedRealityLineRenderer.cs | 127 ++ .../MixedRealityLineRenderer.cs.meta | 14 + .../Renderers/ParticleSystemLineRenderer.cs | 233 ++ .../ParticleSystemLineRenderer.cs.meta | 11 + .../Lines/Renderers/StripMeshLineRenderer.cs | 210 ++ .../Renderers/StripMeshLineRenderer.cs.meta | 11 + Utilities/MathUtilities.cs | 457 ++++ Utilities/MathUtilities.cs.meta | 11 + Utilities/Physics.meta | 8 + Utilities/Physics/BaseRayStabilizer.cs | 47 + Utilities/Physics/BaseRayStabilizer.cs.meta | 11 + Utilities/Physics/Distorters.meta | 10 + Utilities/Physics/Distorters/Distorter.cs | 115 + .../Physics/Distorters/Distorter.cs.meta | 11 + .../Physics/Distorters/DistorterBulge.cs | 106 + .../Physics/Distorters/DistorterBulge.cs.meta | 11 + .../Physics/Distorters/DistorterGravity.cs | 96 + .../Distorters/DistorterGravity.cs.meta | 11 + .../Physics/Distorters/DistorterSimplex.cs | 96 + .../Distorters/DistorterSimplex.cs.meta | 11 + .../Physics/Distorters/DistorterSphere.cs | 39 + .../Distorters/DistorterSphere.cs.meta | 11 + .../Physics/Distorters/DistorterWiggly.cs | 137 ++ .../Distorters/DistorterWiggly.cs.meta | 11 + Utilities/Physics/GazeStabilizer.cs | 121 ++ Utilities/Physics/GazeStabilizer.cs.meta | 11 + Utilities/Physics/InterpolationUtilities.cs | 51 + .../Physics/InterpolationUtilities.cs.meta | 11 + Utilities/Physics/Interpolator.cs | 454 ++++ Utilities/Physics/Interpolator.cs.meta | 11 + Utilities/Physics/MixedRealityRaycaster.cs | 184 ++ .../Physics/MixedRealityRaycaster.cs.meta | 11 + Utilities/Physics/RaycastResultComparer.cs | 73 + .../Physics/RaycastResultComparer.cs.meta | 11 + Utilities/Physics/TwoHandMoveLogic.cs | 91 + Utilities/Physics/TwoHandMoveLogic.cs.meta | 11 + Utilities/Physics/TwoHandRotateLogic.cs | 128 ++ Utilities/Physics/TwoHandRotateLogic.cs.meta | 11 + Utilities/Physics/TwoHandScaleLogic.cs | 67 + Utilities/Physics/TwoHandScaleLogic.cs.meta | 11 + Utilities/Physics/VectorRollingStatistics.cs | 217 ++ .../Physics/VectorRollingStatistics.cs.meta | 11 + Utilities/PlatformUtility.cs | 92 + Utilities/PlatformUtility.cs.meta | 11 + Utilities/Rendering.meta | 8 + Utilities/Rendering/ClippingBox.cs | 55 + Utilities/Rendering/ClippingBox.cs.meta | 11 + Utilities/Rendering/ClippingPlane.cs | 53 + Utilities/Rendering/ClippingPlane.cs.meta | 11 + Utilities/Rendering/ClippingPrimitive.cs | 258 +++ Utilities/Rendering/ClippingPrimitive.cs.meta | 11 + Utilities/Rendering/ClippingSphere.cs | 58 + Utilities/Rendering/ClippingSphere.cs.meta | 11 + Utilities/Solvers.meta | 10 + Utilities/Solvers/ConstantViewSize.cs | 160 ++ Utilities/Solvers/ConstantViewSize.cs.meta | 11 + Utilities/Solvers/ControllerFinder.cs | 151 ++ Utilities/Solvers/ControllerFinder.cs.meta | 11 + Utilities/Solvers/InBetween.cs | 115 + Utilities/Solvers/InBetween.cs.meta | 11 + Utilities/Solvers/Momentum.cs | 99 + Utilities/Solvers/Momentum.cs.meta | 11 + Utilities/Solvers/Orbital.cs | 162 ++ Utilities/Solvers/Orbital.cs.meta | 11 + Utilities/Solvers/Overlap.cs | 20 + Utilities/Solvers/Overlap.cs.meta | 11 + Utilities/Solvers/RadialView.cs | 203 ++ Utilities/Solvers/RadialView.cs.meta | 11 + Utilities/Solvers/Solver.cs | 319 +++ Utilities/Solvers/Solver.cs.meta | 11 + Utilities/Solvers/SolverHandler.cs | 247 +++ Utilities/Solvers/SolverHandler.cs.meta | 11 + Utilities/Solvers/SurfaceMagnetism.cs | 584 +++++ Utilities/Solvers/SurfaceMagnetism.cs.meta | 11 + Utilities/WebRequestRest.meta | 10 + Utilities/WebRequestRest/Response.cs | 46 + Utilities/WebRequestRest/Response.cs.meta | 11 + Utilities/WebRequestRest/Rest.cs | 248 +++ Utilities/WebRequestRest/Rest.cs.meta | 11 + Utilities/WindowsApiChecker.cs | 65 + Utilities/WindowsApiChecker.cs.meta | 11 + Utilities/WindowsDevicePortal.meta | 10 + .../WindowsDevicePortal/DataStructures.meta | 10 + .../DataStructures/ActivePowerSchemeInfo.cs | 13 + .../ActivePowerSchemeInfo.cs.meta | 11 + .../DataStructures/AdapterInfo.cs | 20 + .../DataStructures/AdapterInfo.cs.meta | 11 + .../DataStructures/ApplicationInfo.cs | 18 + .../DataStructures/ApplicationInfo.cs.meta | 11 + .../DataStructures/AvailableWiFiNetworks.cs | 13 + .../AvailableWiFiNetworks.cs.meta | 11 + .../DataStructures/BatteryInfo.cs | 46 + .../DataStructures/BatteryInfo.cs.meta | 11 + .../DataStructures/DHCPInfo.cs | 15 + .../DataStructures/DHCPInfo.cs.meta | 11 + .../DataStructures/DeviceInfo.cs | 88 + .../DataStructures/DeviceInfo.cs.meta | 11 + .../DataStructures/DeviceOsInfo.cs | 17 + .../DataStructures/DeviceOsInfo.cs.meta | 11 + .../DataStructures/DevicePortalConnections.cs | 21 + .../DevicePortalConnections.cs.meta | 11 + .../DataStructures/FileInfo.cs | 32 + .../DataStructures/FileInfo.cs.meta | 11 + .../DataStructures/FileList.cs | 13 + .../DataStructures/FileList.cs.meta | 11 + .../DataStructures/InstallStatus.cs | 16 + .../DataStructures/InstallStatus.cs.meta | 11 + .../DataStructures/InstalledApps.cs | 13 + .../DataStructures/InstalledApps.cs.meta | 11 + .../DataStructures/InterfaceInfo.cs | 16 + .../DataStructures/InterfaceInfo.cs.meta | 11 + .../DataStructures/IpAddressInfo.cs | 14 + .../DataStructures/IpAddressInfo.cs.meta | 11 + .../DataStructures/IpConfigInfo.cs | 13 + .../DataStructures/IpConfigInfo.cs.meta | 11 + .../DataStructures/MachineName.cs | 13 + .../DataStructures/MachineName.cs.meta | 11 + .../DataStructures/NetworkInterfaces.cs | 13 + .../DataStructures/NetworkInterfaces.cs.meta | 11 + .../DataStructures/NetworkProfileInfo.cs | 15 + .../DataStructures/NetworkProfileInfo.cs.meta | 11 + .../DataStructures/PowerStateInfo.cs | 14 + .../DataStructures/PowerStateInfo.cs.meta | 11 + .../DataStructures/ProcessInfo.cs | 21 + .../DataStructures/ProcessInfo.cs.meta | 11 + .../DataStructures/ProcessList.cs | 13 + .../DataStructures/ProcessList.cs.meta | 11 + .../DataStructures/WirelessNetworkInfo.cs | 31 + .../WirelessNetworkInfo.cs.meta | 11 + Utilities/WindowsDevicePortal/DevicePortal.cs | 894 ++++++++ .../WindowsDevicePortal/DevicePortal.cs.meta | 11 + XRTK.asmdef | 14 + XRTK.asmdef.meta | 7 + package.json | 14 + package.json.meta | 7 + 1263 files changed, 70465 insertions(+) create mode 100644 .npmignore create mode 100644 AssemblyInfo.cs create mode 100644 AssemblyInfo.cs.meta create mode 100644 Attributes.meta create mode 100644 Attributes/EnumFlagsAttribute.cs create mode 100644 Attributes/EnumFlagsAttribute.cs.meta create mode 100644 Attributes/ExtendsAttribute.cs create mode 100644 Attributes/ExtendsAttribute.cs.meta create mode 100644 Attributes/ImplementsAttribute.cs create mode 100644 Attributes/ImplementsAttribute.cs.meta create mode 100644 Attributes/PhysicsLayerAttribute.cs create mode 100644 Attributes/PhysicsLayerAttribute.cs.meta create mode 100644 Attributes/PrefabAttribute.cs create mode 100644 Attributes/PrefabAttribute.cs.meta create mode 100644 Attributes/SystemTypeAttribute.cs create mode 100644 Attributes/SystemTypeAttribute.cs.meta create mode 100644 Attributes/Vector3RangeAttribute.cs create mode 100644 Attributes/Vector3RangeAttribute.cs.meta create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG.md.meta create mode 100644 Definitions.meta create mode 100644 Definitions/BaseMixedRealityExtensionServiceProfile.cs create mode 100644 Definitions/BaseMixedRealityExtensionServiceProfile.cs.meta create mode 100644 Definitions/BaseMixedRealityProfile.cs create mode 100644 Definitions/BaseMixedRealityProfile.cs.meta create mode 100644 Definitions/BoundarySystem.meta create mode 100644 Definitions/BoundarySystem/Edge.cs create mode 100644 Definitions/BoundarySystem/Edge.cs.meta create mode 100644 Definitions/BoundarySystem/InscribedRectangle.cs create mode 100644 Definitions/BoundarySystem/InscribedRectangle.cs.meta create mode 100644 Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs create mode 100644 Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs.meta create mode 100644 Definitions/Controllers.meta create mode 100644 Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs create mode 100644 Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs.meta create mode 100644 Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs create mode 100644 Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs create mode 100644 Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs create mode 100644 Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs.meta create mode 100644 Definitions/Controllers/MixedRealityControllerMappingProfiles.cs create mode 100644 Definitions/Controllers/MixedRealityControllerMappingProfiles.cs.meta create mode 100644 Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs create mode 100644 Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs.meta create mode 100644 Definitions/Controllers/OpenVR.meta create mode 100644 Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs create mode 100644 Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs create mode 100644 Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs create mode 100644 Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs create mode 100644 Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/UnityInput.meta create mode 100644 Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs create mode 100644 Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs create mode 100644 Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs create mode 100644 Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs.meta create mode 100644 Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs create mode 100644 Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs.meta create mode 100644 Definitions/DataModelConfiguration.cs create mode 100644 Definitions/DataModelConfiguration.cs.meta create mode 100644 Definitions/Devices.meta create mode 100644 Definitions/Devices/ControllerMappingLibrary.cs create mode 100644 Definitions/Devices/ControllerMappingLibrary.cs.meta create mode 100644 Definitions/Devices/DeviceInputType.cs create mode 100644 Definitions/Devices/DeviceInputType.cs.meta create mode 100644 Definitions/Devices/GestureInputType.cs create mode 100644 Definitions/Devices/GestureInputType.cs.meta create mode 100644 Definitions/Devices/Headset.cs create mode 100644 Definitions/Devices/Headset.cs.meta create mode 100644 Definitions/Devices/MixedRealityInteractionMapping.cs create mode 100644 Definitions/Devices/MixedRealityInteractionMapping.cs.meta create mode 100644 Definitions/Devices/SDKType.cs create mode 100644 Definitions/Devices/SDKType.cs.meta create mode 100644 Definitions/Devices/SupportedControllerType.cs create mode 100644 Definitions/Devices/SupportedControllerType.cs.meta create mode 100644 Definitions/Devices/TrackingState.cs create mode 100644 Definitions/Devices/TrackingState.cs.meta create mode 100644 Definitions/DiagnosticsSystem.meta create mode 100644 Definitions/DiagnosticsSystem/CpuUseTracker.cs create mode 100644 Definitions/DiagnosticsSystem/CpuUseTracker.cs.meta create mode 100644 Definitions/DiagnosticsSystem/FpsUseTracker.cs create mode 100644 Definitions/DiagnosticsSystem/FpsUseTracker.cs.meta create mode 100644 Definitions/DiagnosticsSystem/MemoryReading.cs create mode 100644 Definitions/DiagnosticsSystem/MemoryReading.cs.meta create mode 100644 Definitions/DiagnosticsSystem/MemoryUseTracker.cs create mode 100644 Definitions/DiagnosticsSystem/MemoryUseTracker.cs.meta create mode 100644 Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs create mode 100644 Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs.meta create mode 100644 Definitions/InputSystem.meta create mode 100644 Definitions/InputSystem/AnimatedCursorData.cs create mode 100644 Definitions/InputSystem/AnimatedCursorData.cs.meta create mode 100644 Definitions/InputSystem/ControllerDataProviderConfiguration.cs create mode 100644 Definitions/InputSystem/ControllerDataProviderConfiguration.cs.meta create mode 100644 Definitions/InputSystem/CursorStateEnum.cs create mode 100644 Definitions/InputSystem/CursorStateEnum.cs.meta create mode 100644 Definitions/InputSystem/InputActionEventPair.cs create mode 100644 Definitions/InputSystem/InputActionEventPair.cs.meta create mode 100644 Definitions/InputSystem/InputActionRuleDigital.cs create mode 100644 Definitions/InputSystem/InputActionRuleDigital.cs.meta create mode 100644 Definitions/InputSystem/InputActionRuleDualAxis.cs create mode 100644 Definitions/InputSystem/InputActionRuleDualAxis.cs.meta create mode 100644 Definitions/InputSystem/InputActionRulePoseAxis.cs create mode 100644 Definitions/InputSystem/InputActionRulePoseAxis.cs.meta create mode 100644 Definitions/InputSystem/InputActionRuleQuaternionAxis.cs create mode 100644 Definitions/InputSystem/InputActionRuleQuaternionAxis.cs.meta create mode 100644 Definitions/InputSystem/InputActionRuleSingleAxis.cs create mode 100644 Definitions/InputSystem/InputActionRuleSingleAxis.cs.meta create mode 100644 Definitions/InputSystem/InputActionRuleVectorAxis.cs create mode 100644 Definitions/InputSystem/InputActionRuleVectorAxis.cs.meta create mode 100644 Definitions/InputSystem/KeywordAndResponse.cs create mode 100644 Definitions/InputSystem/KeywordAndResponse.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityGestureMapping.cs create mode 100644 Definitions/InputSystem/MixedRealityGestureMapping.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityGesturesProfile.cs create mode 100644 Definitions/InputSystem/MixedRealityGesturesProfile.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityInputAction.cs create mode 100644 Definitions/InputSystem/MixedRealityInputAction.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs create mode 100644 Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityInputActionsProfile.cs create mode 100644 Definitions/InputSystem/MixedRealityInputActionsProfile.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityInputSystemProfile.cs create mode 100644 Definitions/InputSystem/MixedRealityInputSystemProfile.cs.meta create mode 100644 Definitions/InputSystem/MixedRealityPointerProfile.cs create mode 100644 Definitions/InputSystem/MixedRealityPointerProfile.cs.meta create mode 100644 Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs create mode 100644 Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs.meta create mode 100644 Definitions/InputSystem/PointerOption.cs create mode 100644 Definitions/InputSystem/PointerOption.cs.meta create mode 100644 Definitions/InputSystem/SpeechCommands.cs create mode 100644 Definitions/InputSystem/SpeechCommands.cs.meta create mode 100644 Definitions/InputSystem/WindowsGestureSettings.cs create mode 100644 Definitions/InputSystem/WindowsGestureSettings.cs.meta create mode 100644 Definitions/Lines.meta create mode 100644 Definitions/Lines/DistortionMode.cs create mode 100644 Definitions/Lines/DistortionMode.cs.meta create mode 100644 Definitions/Lines/InterpolationMode.cs create mode 100644 Definitions/Lines/InterpolationMode.cs.meta create mode 100644 Definitions/Lines/InterpolationType.cs create mode 100644 Definitions/Lines/InterpolationType.cs.meta create mode 100644 Definitions/Lines/LinePointTransformMode.cs create mode 100644 Definitions/Lines/LinePointTransformMode.cs.meta create mode 100644 Definitions/Lines/LineRotationMode.cs create mode 100644 Definitions/Lines/LineRotationMode.cs.meta create mode 100644 Definitions/Lines/PointDistributionMode.cs create mode 100644 Definitions/Lines/PointDistributionMode.cs.meta create mode 100644 Definitions/Lines/StepMode.cs create mode 100644 Definitions/Lines/StepMode.cs.meta create mode 100644 Definitions/MixedRealityCameraProfile.cs create mode 100644 Definitions/MixedRealityCameraProfile.cs.meta create mode 100644 Definitions/MixedRealityRegisteredServiceProvidersProfile.cs create mode 100644 Definitions/MixedRealityRegisteredServiceProvidersProfile.cs.meta create mode 100644 Definitions/MixedRealityServiceConfiguration.cs create mode 100644 Definitions/MixedRealityServiceConfiguration.cs.meta create mode 100644 Definitions/MixedRealityToolkitConfigurationProfile.cs create mode 100644 Definitions/MixedRealityToolkitConfigurationProfile.cs.meta create mode 100644 Definitions/NetworkingSystem.meta create mode 100644 Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs create mode 100644 Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs.meta create mode 100644 Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs create mode 100644 Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs.meta create mode 100644 Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs create mode 100644 Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs.meta create mode 100644 Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs create mode 100644 Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs.meta create mode 100644 Definitions/Physics.meta create mode 100644 Definitions/Physics/ComparableRaycastResult.cs create mode 100644 Definitions/Physics/ComparableRaycastResult.cs.meta create mode 100644 Definitions/Physics/FocusDetails.cs create mode 100644 Definitions/Physics/FocusDetails.cs.meta create mode 100644 Definitions/Physics/RayStep.cs create mode 100644 Definitions/Physics/RayStep.cs.meta create mode 100644 Definitions/Physics/RaycastMode.cs create mode 100644 Definitions/Physics/RaycastMode.cs.meta create mode 100644 Definitions/Physics/TeleportSurfaceResult.cs create mode 100644 Definitions/Physics/TeleportSurfaceResult.cs.meta create mode 100644 Definitions/README.md create mode 100644 Definitions/README.md.meta create mode 100644 Definitions/SpatialAwarenessSystem.meta create mode 100644 Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs create mode 100644 Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs.meta create mode 100644 Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs create mode 100644 Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs.meta create mode 100644 Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs create mode 100644 Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs.meta create mode 100644 Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs create mode 100644 Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs.meta create mode 100644 Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs create mode 100644 Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs.meta create mode 100644 Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs create mode 100644 Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs.meta create mode 100644 Definitions/SpatialObservers.meta create mode 100644 Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs create mode 100644 Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs.meta create mode 100644 Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs create mode 100644 Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs.meta create mode 100644 Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs create mode 100644 Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs.meta create mode 100644 Definitions/Utilities.meta create mode 100644 Definitions/Utilities/AnimatorParameter.cs create mode 100644 Definitions/Utilities/AnimatorParameter.cs.meta create mode 100644 Definitions/Utilities/AutoStartBehavior.cs create mode 100644 Definitions/Utilities/AutoStartBehavior.cs.meta create mode 100644 Definitions/Utilities/AxisType.cs create mode 100644 Definitions/Utilities/AxisType.cs.meta create mode 100644 Definitions/Utilities/CollationOrderType.cs create mode 100644 Definitions/Utilities/CollationOrderType.cs.meta create mode 100644 Definitions/Utilities/Handedness.cs create mode 100644 Definitions/Utilities/Handedness.cs.meta create mode 100644 Definitions/Utilities/MixedRealityPose.cs create mode 100644 Definitions/Utilities/MixedRealityPose.cs.meta create mode 100644 Definitions/Utilities/OrientationType.cs create mode 100644 Definitions/Utilities/OrientationType.cs.meta create mode 100644 Definitions/Utilities/PivotAxis.cs create mode 100644 Definitions/Utilities/PivotAxis.cs.meta create mode 100644 Definitions/Utilities/ProcessResult.cs create mode 100644 Definitions/Utilities/ProcessResult.cs.meta create mode 100644 Definitions/Utilities/ProfileMenuItemIndices.cs create mode 100644 Definitions/Utilities/ProfileMenuItemIndices.cs.meta create mode 100644 Definitions/Utilities/QuaternionSmoothed.cs create mode 100644 Definitions/Utilities/QuaternionSmoothed.cs.meta create mode 100644 Definitions/Utilities/RecognitionConfidenceLevel.cs create mode 100644 Definitions/Utilities/RecognitionConfidenceLevel.cs.meta create mode 100644 Definitions/Utilities/RotationConstraintType.cs create mode 100644 Definitions/Utilities/RotationConstraintType.cs.meta create mode 100644 Definitions/Utilities/ScaleStateType.cs create mode 100644 Definitions/Utilities/ScaleStateType.cs.meta create mode 100644 Definitions/Utilities/SolverOrientationType.cs create mode 100644 Definitions/Utilities/SolverOrientationType.cs.meta create mode 100644 Definitions/Utilities/SupportedPlatforms.cs create mode 100644 Definitions/Utilities/SupportedPlatforms.cs.meta create mode 100644 Definitions/Utilities/SystemType.cs create mode 100644 Definitions/Utilities/SystemType.cs.meta create mode 100644 Definitions/Utilities/TrackedObjectType.cs create mode 100644 Definitions/Utilities/TrackedObjectType.cs.meta create mode 100644 Definitions/Utilities/TypeGrouping.cs create mode 100644 Definitions/Utilities/TypeGrouping.cs.meta create mode 100644 Definitions/Utilities/Vector3Smoothed.cs create mode 100644 Definitions/Utilities/Vector3Smoothed.cs.meta create mode 100644 EventDatum.meta create mode 100644 EventDatum/Boundary.meta create mode 100644 EventDatum/Boundary/BoundaryEventData.cs create mode 100644 EventDatum/Boundary/BoundaryEventData.cs.meta create mode 100644 EventDatum/Diagnostics.meta create mode 100644 EventDatum/Diagnostics/DiagnosticsEventData.cs create mode 100644 EventDatum/Diagnostics/DiagnosticsEventData.cs.meta create mode 100644 EventDatum/GenericBaseEventData.cs create mode 100644 EventDatum/GenericBaseEventData.cs.meta create mode 100644 EventDatum/Input.meta create mode 100644 EventDatum/Input/BaseInputEventData.cs create mode 100644 EventDatum/Input/BaseInputEventData.cs.meta create mode 100644 EventDatum/Input/DictationEventData.cs create mode 100644 EventDatum/Input/DictationEventData.cs.meta create mode 100644 EventDatum/Input/FocusEventData.cs create mode 100644 EventDatum/Input/FocusEventData.cs.meta create mode 100644 EventDatum/Input/GraphicInputEventData.cs create mode 100644 EventDatum/Input/GraphicInputEventData.cs.meta create mode 100644 EventDatum/Input/InputEventData.cs create mode 100644 EventDatum/Input/InputEventData.cs.meta create mode 100644 EventDatum/Input/MixedRealityPointerEventData.cs create mode 100644 EventDatum/Input/MixedRealityPointerEventData.cs.meta create mode 100644 EventDatum/Input/SourcePoseEventData.cs create mode 100644 EventDatum/Input/SourcePoseEventData.cs.meta create mode 100644 EventDatum/Input/SourceStateEventData.cs create mode 100644 EventDatum/Input/SourceStateEventData.cs.meta create mode 100644 EventDatum/Input/SpeechEventData.cs create mode 100644 EventDatum/Input/SpeechEventData.cs.meta create mode 100644 EventDatum/Networking.meta create mode 100644 EventDatum/Networking/BaseNetworkingEventData.cs create mode 100644 EventDatum/Networking/BaseNetworkingEventData.cs.meta create mode 100644 EventDatum/PlacementEventData.cs create mode 100644 EventDatum/PlacementEventData.cs.meta create mode 100644 EventDatum/README.md create mode 100644 EventDatum/README.md.meta create mode 100644 EventDatum/SpatialAwareness.meta create mode 100644 EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs create mode 100644 EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs.meta create mode 100644 EventDatum/Teleport.meta create mode 100644 EventDatum/Teleport/TeleportEventData.cs create mode 100644 EventDatum/Teleport/TeleportEventData.cs.meta create mode 100644 Extensions.meta create mode 100644 Extensions/AnimationCurveExtensions.cs create mode 100644 Extensions/AnimationCurveExtensions.cs.meta create mode 100644 Extensions/ArrayExtensions.cs create mode 100644 Extensions/ArrayExtensions.cs.meta create mode 100644 Extensions/BoundsExtensions.cs create mode 100644 Extensions/BoundsExtensions.cs.meta create mode 100644 Extensions/CameraExtensions.cs create mode 100644 Extensions/CameraExtensions.cs.meta create mode 100644 Extensions/CanvasExtensions.cs create mode 100644 Extensions/CanvasExtensions.cs.meta create mode 100644 Extensions/CollectionsExtensions.cs create mode 100644 Extensions/CollectionsExtensions.cs.meta create mode 100644 Extensions/Color32Extensions.cs create mode 100644 Extensions/Color32Extensions.cs.meta create mode 100644 Extensions/ComparerExtensions.cs create mode 100644 Extensions/ComparerExtensions.cs.meta create mode 100644 Extensions/ComponentExtensions.cs create mode 100644 Extensions/ComponentExtensions.cs.meta create mode 100644 Extensions/ConverterExtensions.cs create mode 100644 Extensions/ConverterExtensions.cs.meta create mode 100644 Extensions/DataModelConfigurationExtensions.cs create mode 100644 Extensions/DataModelConfigurationExtensions.cs.meta create mode 100644 Extensions/DoubleExtensions.cs create mode 100644 Extensions/DoubleExtensions.cs.meta create mode 100644 Extensions/EditorClassExtensions.meta create mode 100644 Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs create mode 100644 Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs.meta create mode 100644 Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef create mode 100644 Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef.meta create mode 100644 Extensions/EnumerableExtensions.cs create mode 100644 Extensions/EnumerableExtensions.cs.meta create mode 100644 Extensions/EventSystemExtensions.cs create mode 100644 Extensions/EventSystemExtensions.cs.meta create mode 100644 Extensions/FloatExtensions.cs create mode 100644 Extensions/FloatExtensions.cs.meta create mode 100644 Extensions/GameObjectExtensions.cs create mode 100644 Extensions/GameObjectExtensions.cs.meta create mode 100644 Extensions/GestureRecognizerExtensions.cs create mode 100644 Extensions/GestureRecognizerExtensions.cs.meta create mode 100644 Extensions/InteractionSourceExtensions.cs create mode 100644 Extensions/InteractionSourceExtensions.cs.meta create mode 100644 Extensions/LayerExtensions.cs create mode 100644 Extensions/LayerExtensions.cs.meta create mode 100644 Extensions/MathfExtensions.cs create mode 100644 Extensions/MathfExtensions.cs.meta create mode 100644 Extensions/ProcessExtensions.cs create mode 100644 Extensions/ProcessExtensions.cs.meta create mode 100644 Extensions/QuaternionExtensions.cs create mode 100644 Extensions/QuaternionExtensions.cs.meta create mode 100644 Extensions/RayExtensions.cs create mode 100644 Extensions/RayExtensions.cs.meta create mode 100644 Extensions/StringExtensions.cs create mode 100644 Extensions/StringExtensions.cs.meta create mode 100644 Extensions/TextureExtensions.cs create mode 100644 Extensions/TextureExtensions.cs.meta create mode 100644 Extensions/TransformExtensions.cs create mode 100644 Extensions/TransformExtensions.cs.meta create mode 100644 Extensions/UnityObjectExtensions.cs create mode 100644 Extensions/UnityObjectExtensions.cs.meta create mode 100644 Extensions/VectorExtensions.cs create mode 100644 Extensions/VectorExtensions.cs.meta create mode 100644 Inspectors.meta create mode 100644 Inspectors/BaseMixedRealityToolkitInspector.cs create mode 100644 Inspectors/BaseMixedRealityToolkitInspector.cs.meta create mode 100644 Inspectors/ControllerPopupWindow.cs create mode 100644 Inspectors/ControllerPopupWindow.cs.meta create mode 100644 Inspectors/Data.meta create mode 100644 Inspectors/Data/ControllerInputActionOption.cs create mode 100644 Inspectors/Data/ControllerInputActionOption.cs.meta create mode 100644 Inspectors/Data/ControllerInputActionOptions.cs create mode 100644 Inspectors/Data/ControllerInputActionOptions.cs.meta create mode 100644 Inspectors/Data/EditorWindowOptions.json create mode 100644 Inspectors/Data/EditorWindowOptions.json.meta create mode 100644 Inspectors/EditorHandsShaderGUI.cs create mode 100644 Inspectors/EditorHandsShaderGUI.cs.meta create mode 100644 Inspectors/MixedRealityPreferences.cs create mode 100644 Inspectors/MixedRealityPreferences.cs.meta create mode 100644 Inspectors/MixedRealityStandardShaderGUI.cs create mode 100644 Inspectors/MixedRealityStandardShaderGUI.cs.meta create mode 100644 Inspectors/MixedRealityToolkitInspector.cs create mode 100644 Inspectors/MixedRealityToolkitInspector.cs.meta create mode 100644 Inspectors/Profiles.meta create mode 100644 Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/BaseMixedRealityProfileInspector.cs create mode 100644 Inspectors/Profiles/BaseMixedRealityProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/CustomControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/CustomControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs create mode 100644 Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityCameraProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityCameraProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityPointerProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityPointerProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs create mode 100644 Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/SpatialAwareness.meta create mode 100644 Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs create mode 100644 Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs create mode 100644 Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs create mode 100644 Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs.meta create mode 100644 Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs create mode 100644 Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs.meta create mode 100644 Inspectors/PropertyDrawers.meta create mode 100644 Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs create mode 100644 Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs create mode 100644 Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs create mode 100644 Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs create mode 100644 Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs create mode 100644 Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs create mode 100644 Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs create mode 100644 Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs.meta create mode 100644 Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs create mode 100644 Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs.meta create mode 100644 Inspectors/SystemTypeRepairWindow.cs create mode 100644 Inspectors/SystemTypeRepairWindow.cs.meta create mode 100644 Inspectors/Utilities.meta create mode 100644 Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs create mode 100644 Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs.meta create mode 100644 Inspectors/Utilities/AutoSceneSwitcher.cs create mode 100644 Inspectors/Utilities/AutoSceneSwitcher.cs.meta create mode 100644 Inspectors/Utilities/CanvasEditorExtension.cs create mode 100644 Inspectors/Utilities/CanvasEditorExtension.cs.meta create mode 100644 Inspectors/Utilities/ChannelPackerWindow.cs create mode 100644 Inspectors/Utilities/ChannelPackerWindow.cs.meta create mode 100644 Inspectors/Utilities/GitUtilities.cs create mode 100644 Inspectors/Utilities/GitUtilities.cs.meta create mode 100644 Inspectors/Utilities/HoverLightInspector.cs create mode 100644 Inspectors/Utilities/HoverLightInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs create mode 100644 Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs.meta create mode 100644 Inspectors/Utilities/MixedRealityInspectorUtility.cs create mode 100644 Inspectors/Utilities/MixedRealityInspectorUtility.cs.meta create mode 100644 Inspectors/Utilities/Packages.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs.meta create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs create mode 100644 Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs.meta create mode 100644 Inspectors/Utilities/Rendering.meta create mode 100644 Inspectors/Utilities/Rendering/ClippingBoxInspector.cs create mode 100644 Inspectors/Utilities/Rendering/ClippingBoxInspector.cs.meta create mode 100644 Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs create mode 100644 Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs.meta create mode 100644 Inspectors/Utilities/Rendering/ClippingSphereInspector.cs create mode 100644 Inspectors/Utilities/Rendering/ClippingSphereInspector.cs.meta create mode 100644 Inspectors/Utilities/SymbolicLinks.meta create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs.meta create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs.meta create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs.meta create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs.meta create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs create mode 100644 Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs.meta create mode 100644 Inspectors/XRTK.Inspectors.asmdef create mode 100644 Inspectors/XRTK.Inspectors.asmdef.meta create mode 100644 Interfaces.meta create mode 100644 Interfaces/Audio.meta create mode 100644 Interfaces/Audio/IAudioInfluencer.cs create mode 100644 Interfaces/Audio/IAudioInfluencer.cs.meta create mode 100644 Interfaces/BoundarySystem.meta create mode 100644 Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs create mode 100644 Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs.meta create mode 100644 Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs create mode 100644 Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs.meta create mode 100644 Interfaces/CameraSystem.meta create mode 100644 Interfaces/CameraSystem/IMixedRealityCameraSystem.cs create mode 100644 Interfaces/CameraSystem/IMixedRealityCameraSystem.cs.meta create mode 100644 Interfaces/Diagnostics.meta create mode 100644 Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs create mode 100644 Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs.meta create mode 100644 Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs create mode 100644 Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs.meta create mode 100644 Interfaces/EventSystem.meta create mode 100644 Interfaces/EventSystem/Handlers.meta create mode 100644 Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs create mode 100644 Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs.meta create mode 100644 Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs create mode 100644 Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs.meta create mode 100644 Interfaces/EventSystem/IMixedRealityEventSource.cs create mode 100644 Interfaces/EventSystem/IMixedRealityEventSource.cs.meta create mode 100644 Interfaces/EventSystem/IMixedRealityEventSystem.cs create mode 100644 Interfaces/EventSystem/IMixedRealityEventSystem.cs.meta create mode 100644 Interfaces/IMixedRealityDataProvider.cs create mode 100644 Interfaces/IMixedRealityDataProvider.cs.meta create mode 100644 Interfaces/IMixedRealityExtensionService.cs create mode 100644 Interfaces/IMixedRealityExtensionService.cs.meta create mode 100644 Interfaces/IMixedRealityService.cs create mode 100644 Interfaces/IMixedRealityService.cs.meta create mode 100644 Interfaces/InputSystem.meta create mode 100644 Interfaces/InputSystem/Handlers.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs.meta create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs create mode 100644 Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs.meta create mode 100644 Interfaces/InputSystem/ICursorModifier.cs create mode 100644 Interfaces/InputSystem/ICursorModifier.cs.meta create mode 100644 Interfaces/InputSystem/IInputActionRule.cs create mode 100644 Interfaces/InputSystem/IInputActionRule.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityCursor.cs create mode 100644 Interfaces/InputSystem/IMixedRealityCursor.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityFocusProvider.cs create mode 100644 Interfaces/InputSystem/IMixedRealityFocusProvider.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityGazeProvider.cs create mode 100644 Interfaces/InputSystem/IMixedRealityGazeProvider.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityInputSource.cs create mode 100644 Interfaces/InputSystem/IMixedRealityInputSource.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityInputSystem.cs create mode 100644 Interfaces/InputSystem/IMixedRealityInputSystem.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityMousePointer.cs create mode 100644 Interfaces/InputSystem/IMixedRealityMousePointer.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityPointer.cs create mode 100644 Interfaces/InputSystem/IMixedRealityPointer.cs.meta create mode 100644 Interfaces/InputSystem/IMixedRealityTouchPointer.cs create mode 100644 Interfaces/InputSystem/IMixedRealityTouchPointer.cs.meta create mode 100644 Interfaces/InputSystem/IPointerResult.cs create mode 100644 Interfaces/InputSystem/IPointerResult.cs.meta create mode 100644 Interfaces/NetworkingSystem.meta create mode 100644 Interfaces/NetworkingSystem/Handlers.meta create mode 100644 Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs create mode 100644 Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs.meta create mode 100644 Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs create mode 100644 Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs.meta create mode 100644 Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs create mode 100644 Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs.meta create mode 100644 Interfaces/Physics.meta create mode 100644 Interfaces/Physics/IBaseRayStabilizer.cs create mode 100644 Interfaces/Physics/IBaseRayStabilizer.cs.meta create mode 100644 Interfaces/Providers.meta create mode 100644 Interfaces/Providers/Controllers.meta create mode 100644 Interfaces/Providers/Controllers/IMixedRealityController.cs create mode 100644 Interfaces/Providers/Controllers/IMixedRealityController.cs.meta create mode 100644 Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs create mode 100644 Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs.meta create mode 100644 Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs create mode 100644 Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs.meta create mode 100644 Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs create mode 100644 Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs.meta create mode 100644 Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs create mode 100644 Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs.meta create mode 100644 Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs create mode 100644 Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs.meta create mode 100644 Interfaces/Providers/SpatialObservers.meta create mode 100644 Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs create mode 100644 Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs.meta create mode 100644 Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs create mode 100644 Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs.meta create mode 100644 Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs create mode 100644 Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs.meta create mode 100644 Interfaces/README.md create mode 100644 Interfaces/README.md.meta create mode 100644 Interfaces/SpatialAwareness.meta create mode 100644 Interfaces/SpatialAwareness/Handlers.meta create mode 100644 Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs create mode 100644 Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs.meta create mode 100644 Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs create mode 100644 Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs.meta create mode 100644 Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs create mode 100644 Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs.meta create mode 100644 Interfaces/TeleportSystem.meta create mode 100644 Interfaces/TeleportSystem/Handlers.meta create mode 100644 Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs create mode 100644 Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs.meta create mode 100644 Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs create mode 100644 Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs.meta create mode 100644 Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs create mode 100644 Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs.meta create mode 100644 LICENSE.md create mode 100644 LICENSE.md.meta create mode 100644 Providers.meta create mode 100644 Providers/Controllers.meta create mode 100644 Providers/Controllers/BaseController.cs create mode 100644 Providers/Controllers/BaseController.cs.meta create mode 100644 Providers/Controllers/BaseControllerDataProvider.cs create mode 100644 Providers/Controllers/BaseControllerDataProvider.cs.meta create mode 100644 Providers/Controllers/BaseDictationDataProvider.cs create mode 100644 Providers/Controllers/BaseDictationDataProvider.cs.meta create mode 100644 Providers/Controllers/BaseSpeechDataProvider.cs create mode 100644 Providers/Controllers/BaseSpeechDataProvider.cs.meta create mode 100644 Providers/Controllers/MixedRealityControllerMapping.cs create mode 100644 Providers/Controllers/MixedRealityControllerMapping.cs.meta create mode 100644 Providers/Controllers/MixedRealityControllerVisualizationSetting.cs create mode 100644 Providers/Controllers/MixedRealityControllerVisualizationSetting.cs.meta create mode 100644 Providers/Controllers/OpenVR.meta create mode 100644 Providers/Controllers/OpenVR/GenericOpenVRController.cs create mode 100644 Providers/Controllers/OpenVR/GenericOpenVRController.cs.meta create mode 100644 Providers/Controllers/OpenVR/OculusRemoteController.cs create mode 100644 Providers/Controllers/OpenVR/OculusRemoteController.cs.meta create mode 100644 Providers/Controllers/OpenVR/OculusTouchController.cs create mode 100644 Providers/Controllers/OpenVR/OculusTouchController.cs.meta create mode 100644 Providers/Controllers/OpenVR/OpenVRDataProvider.cs create mode 100644 Providers/Controllers/OpenVR/OpenVRDataProvider.cs.meta create mode 100644 Providers/Controllers/OpenVR/ViveKnucklesController.cs create mode 100644 Providers/Controllers/OpenVR/ViveKnucklesController.cs.meta create mode 100644 Providers/Controllers/OpenVR/ViveWandController.cs create mode 100644 Providers/Controllers/OpenVR/ViveWandController.cs.meta create mode 100644 Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs create mode 100644 Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs.meta create mode 100644 Providers/Controllers/UnityInput.meta create mode 100644 Providers/Controllers/UnityInput/GenericJoystickController.cs create mode 100644 Providers/Controllers/UnityInput/GenericJoystickController.cs.meta create mode 100644 Providers/Controllers/UnityInput/MouseController.cs create mode 100644 Providers/Controllers/UnityInput/MouseController.cs.meta create mode 100644 Providers/Controllers/UnityInput/MouseDataProvider.cs create mode 100644 Providers/Controllers/UnityInput/MouseDataProvider.cs.meta create mode 100644 Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs create mode 100644 Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs.meta create mode 100644 Providers/Controllers/UnityInput/UnityTouchController.cs create mode 100644 Providers/Controllers/UnityInput/UnityTouchController.cs.meta create mode 100644 Providers/Controllers/UnityInput/UnityTouchDataProvider.cs create mode 100644 Providers/Controllers/UnityInput/UnityTouchDataProvider.cs.meta create mode 100644 Providers/Controllers/UnityInput/XboxController.cs create mode 100644 Providers/Controllers/UnityInput/XboxController.cs.meta create mode 100644 Providers/Networking.meta create mode 100644 Providers/Networking/WebRTC.meta create mode 100644 Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs create mode 100644 Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs.meta create mode 100644 Providers/Networking/WebRTC/WebRtcPeerConnection.cs create mode 100644 Providers/Networking/WebRTC/WebRtcPeerConnection.cs.meta create mode 100644 Providers/SpatialObservers.meta create mode 100644 Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs create mode 100644 Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs.meta create mode 100644 Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs create mode 100644 Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs.meta create mode 100644 Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs create mode 100644 Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs.meta create mode 100644 README.md create mode 100644 README.md.meta create mode 100644 Services.meta create mode 100644 Services/BaseDataProvider.cs create mode 100644 Services/BaseDataProvider.cs.meta create mode 100644 Services/BaseEventSystem.cs create mode 100644 Services/BaseEventSystem.cs.meta create mode 100644 Services/BaseExtensionService.cs create mode 100644 Services/BaseExtensionService.cs.meta create mode 100644 Services/BaseService.cs create mode 100644 Services/BaseService.cs.meta create mode 100644 Services/BaseServiceWithConstructor.cs create mode 100644 Services/BaseServiceWithConstructor.cs.meta create mode 100644 Services/BaseSystem.cs create mode 100644 Services/BaseSystem.cs.meta create mode 100644 Services/BoundarySystem.meta create mode 100644 Services/BoundarySystem/MixedRealityBoundarySystem.cs create mode 100644 Services/BoundarySystem/MixedRealityBoundarySystem.cs.meta create mode 100644 Services/CameraSystem.meta create mode 100644 Services/CameraSystem/MixedRealityCameraSystem.cs create mode 100644 Services/CameraSystem/MixedRealityCameraSystem.cs.meta create mode 100644 Services/DiagnosticsSystem.meta create mode 100644 Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs create mode 100644 Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs.meta create mode 100644 Services/InputSystem.meta create mode 100644 Services/InputSystem/BaseGenericInputSource.cs create mode 100644 Services/InputSystem/BaseGenericInputSource.cs.meta create mode 100644 Services/InputSystem/FocusProvider.cs create mode 100644 Services/InputSystem/FocusProvider.cs.meta create mode 100644 Services/InputSystem/GenericPointer.cs create mode 100644 Services/InputSystem/GenericPointer.cs.meta create mode 100644 Services/InputSystem/MixedRealityInputSystem.cs create mode 100644 Services/InputSystem/MixedRealityInputSystem.cs.meta create mode 100644 Services/MixedRealityToolkit.cs create mode 100644 Services/MixedRealityToolkit.cs.meta create mode 100644 Services/NetworkingSystem.meta create mode 100644 Services/NetworkingSystem/MixedRealityNetworkingSystem.cs create mode 100644 Services/NetworkingSystem/MixedRealityNetworkingSystem.cs.meta create mode 100644 Services/SpatialAwarenessSystem.meta create mode 100644 Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs create mode 100644 Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs.meta create mode 100644 Services/TeleportSystem.meta create mode 100644 Services/TeleportSystem/MixedRealityTeleportSystem.cs create mode 100644 Services/TeleportSystem/MixedRealityTeleportSystem.cs.meta create mode 100644 StandardAssets.meta create mode 100644 StandardAssets/Fonts.meta create mode 100644 StandardAssets/Fonts/LICENSE.txt create mode 100644 StandardAssets/Fonts/LICENSE.txt.meta create mode 100644 StandardAssets/Fonts/selawk.ttf create mode 100644 StandardAssets/Fonts/selawk.ttf.meta create mode 100644 StandardAssets/Fonts/selawkb.ttf create mode 100644 StandardAssets/Fonts/selawkb.ttf.meta create mode 100644 StandardAssets/Fonts/selawkl.ttf create mode 100644 StandardAssets/Fonts/selawkl.ttf.meta create mode 100644 StandardAssets/Fonts/selawksb.ttf create mode 100644 StandardAssets/Fonts/selawksb.ttf.meta create mode 100644 StandardAssets/Fonts/selawksl.ttf create mode 100644 StandardAssets/Fonts/selawksl.ttf.meta create mode 100644 StandardAssets/Icons.meta create mode 100644 StandardAssets/Icons/mic_icon.png create mode 100644 StandardAssets/Icons/mic_icon.png.meta create mode 100644 StandardAssets/Icons/mixed_reality_icon.png create mode 100644 StandardAssets/Icons/mixed_reality_icon.png.meta create mode 100644 StandardAssets/Icons/script_icon.png create mode 100644 StandardAssets/Icons/script_icon.png.meta create mode 100644 StandardAssets/Icons/settings_icon.png create mode 100644 StandardAssets/Icons/settings_icon.png.meta create mode 100644 StandardAssets/Icons/shapes_icon.png create mode 100644 StandardAssets/Icons/shapes_icon.png.meta create mode 100644 StandardAssets/Icons/spatial_icon.png create mode 100644 StandardAssets/Icons/spatial_icon.png.meta create mode 100644 StandardAssets/Icons/spatial_understanding_icon.png create mode 100644 StandardAssets/Icons/spatial_understanding_icon.png.meta create mode 100644 StandardAssets/Icons/toolkit_icon.png create mode 100644 StandardAssets/Icons/toolkit_icon.png.meta create mode 100644 StandardAssets/Icons/ux_icon.png create mode 100644 StandardAssets/Icons/ux_icon.png.meta create mode 100644 StandardAssets/Materials.meta create mode 100644 StandardAssets/Materials/3DTextSelawik.mat create mode 100644 StandardAssets/Materials/3DTextSelawik.mat.meta create mode 100644 StandardAssets/Materials/3DTextSelawikBold.mat create mode 100644 StandardAssets/Materials/3DTextSelawikBold.mat.meta create mode 100644 StandardAssets/Materials/3DTextSelawikLight.mat create mode 100644 StandardAssets/Materials/3DTextSelawikLight.mat.meta create mode 100644 StandardAssets/Materials/3DTextSelawikSemibold.mat create mode 100644 StandardAssets/Materials/3DTextSelawikSemibold.mat.meta create mode 100644 StandardAssets/Materials/3DTextSelawikSemilight.mat create mode 100644 StandardAssets/Materials/3DTextSelawikSemilight.mat.meta create mode 100644 StandardAssets/Materials/UIDarkGray.mat create mode 100644 StandardAssets/Materials/UIDarkGray.mat.meta create mode 100644 StandardAssets/Models.meta create mode 100644 StandardAssets/Models/GizmoLeft.fbx create mode 100644 StandardAssets/Models/GizmoLeft.fbx.meta create mode 100644 StandardAssets/Models/GizmoRight.fbx create mode 100644 StandardAssets/Models/GizmoRight.fbx.meta create mode 100644 StandardAssets/Prefabs.meta create mode 100644 StandardAssets/Prefabs/Gizmos.meta create mode 100644 StandardAssets/Prefabs/Gizmos/GizmoLeft.prefab create mode 100644 StandardAssets/Prefabs/Gizmos/GizmoLeft.prefab.meta create mode 100644 StandardAssets/Prefabs/Gizmos/GizmoRight.prefab create mode 100644 StandardAssets/Prefabs/Gizmos/GizmoRight.prefab.meta create mode 100644 StandardAssets/Shaders.meta create mode 100644 StandardAssets/Shaders/ChannelPacker.shader create mode 100644 StandardAssets/Shaders/ChannelPacker.shader.meta create mode 100644 StandardAssets/Shaders/InvisibleShader.shader create mode 100644 StandardAssets/Shaders/InvisibleShader.shader.meta create mode 100644 StandardAssets/Shaders/MixedRealityStandard.shader create mode 100644 StandardAssets/Shaders/MixedRealityStandard.shader.meta create mode 100644 StandardAssets/Shaders/XRTK_Wireframe.shader create mode 100644 StandardAssets/Shaders/XRTK_Wireframe.shader.meta create mode 100644 StandardAssets/Textures.meta create mode 100644 StandardAssets/Textures/Generic_controller_black_scaled.png create mode 100644 StandardAssets/Textures/Generic_controller_black_scaled.png.meta create mode 100644 StandardAssets/Textures/Generic_controller_white_scaled.png create mode 100644 StandardAssets/Textures/Generic_controller_white_scaled.png.meta create mode 100644 StandardAssets/Textures/LuminController_left_black.png create mode 100644 StandardAssets/Textures/LuminController_left_black.png.meta create mode 100644 StandardAssets/Textures/LuminController_left_black_scaled.png create mode 100644 StandardAssets/Textures/LuminController_left_black_scaled.png.meta create mode 100644 StandardAssets/Textures/LuminController_left_white.png create mode 100644 StandardAssets/Textures/LuminController_left_white.png.meta create mode 100644 StandardAssets/Textures/LuminController_left_white_scaled.png create mode 100644 StandardAssets/Textures/LuminController_left_white_scaled.png.meta create mode 100644 StandardAssets/Textures/LuminController_right_black.png create mode 100644 StandardAssets/Textures/LuminController_right_black.png.meta create mode 100644 StandardAssets/Textures/LuminController_right_black_scaled.png create mode 100644 StandardAssets/Textures/LuminController_right_black_scaled.png.meta create mode 100644 StandardAssets/Textures/LuminController_right_white.png create mode 100644 StandardAssets/Textures/LuminController_right_white.png.meta create mode 100644 StandardAssets/Textures/LuminController_right_white_scaled.png create mode 100644 StandardAssets/Textures/LuminController_right_white_scaled.png.meta create mode 100644 StandardAssets/Textures/MotionController_left_black.png create mode 100644 StandardAssets/Textures/MotionController_left_black.png.meta create mode 100644 StandardAssets/Textures/MotionController_left_black_scaled.png create mode 100644 StandardAssets/Textures/MotionController_left_black_scaled.png.meta create mode 100644 StandardAssets/Textures/MotionController_left_white.png create mode 100644 StandardAssets/Textures/MotionController_left_white.png.meta create mode 100644 StandardAssets/Textures/MotionController_left_white_scaled.png create mode 100644 StandardAssets/Textures/MotionController_left_white_scaled.png.meta create mode 100644 StandardAssets/Textures/MotionController_right_black.png create mode 100644 StandardAssets/Textures/MotionController_right_black.png.meta create mode 100644 StandardAssets/Textures/MotionController_right_black_scaled.png create mode 100644 StandardAssets/Textures/MotionController_right_black_scaled.png.meta create mode 100644 StandardAssets/Textures/MotionController_right_white.png create mode 100644 StandardAssets/Textures/MotionController_right_white.png.meta create mode 100644 StandardAssets/Textures/MotionController_right_white_scaled.png create mode 100644 StandardAssets/Textures/MotionController_right_white_scaled.png.meta create mode 100644 StandardAssets/Textures/MouseCursor.png create mode 100644 StandardAssets/Textures/MouseCursor.png.meta create mode 100644 StandardAssets/Textures/Oculus lineart attribution.txt create mode 100644 StandardAssets/Textures/Oculus lineart attribution.txt.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_black.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_black.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_white.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_white.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_black.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_black.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_white.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_white.png.meta create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png create mode 100644 StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png.meta create mode 100644 StandardAssets/Textures/OculusRemoteController_black.png create mode 100644 StandardAssets/Textures/OculusRemoteController_black.png.meta create mode 100644 StandardAssets/Textures/OculusRemoteController_black_scaled.png create mode 100644 StandardAssets/Textures/OculusRemoteController_black_scaled.png.meta create mode 100644 StandardAssets/Textures/OculusRemoteController_white.png create mode 100644 StandardAssets/Textures/OculusRemoteController_white.png.meta create mode 100644 StandardAssets/Textures/OculusRemoteController_white_scaled.png create mode 100644 StandardAssets/Textures/OculusRemoteController_white_scaled.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_left_black.png create mode 100644 StandardAssets/Textures/ViveWandController_left_black.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_left_black_scaled.png create mode 100644 StandardAssets/Textures/ViveWandController_left_black_scaled.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_left_white.png create mode 100644 StandardAssets/Textures/ViveWandController_left_white.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_left_white_scaled.png create mode 100644 StandardAssets/Textures/ViveWandController_left_white_scaled.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_right_black.png create mode 100644 StandardAssets/Textures/ViveWandController_right_black.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_right_black_scaled.png create mode 100644 StandardAssets/Textures/ViveWandController_right_black_scaled.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_right_white.png create mode 100644 StandardAssets/Textures/ViveWandController_right_white.png.meta create mode 100644 StandardAssets/Textures/ViveWandController_right_white_scaled.png create mode 100644 StandardAssets/Textures/ViveWandController_right_white_scaled.png.meta create mode 100644 StandardAssets/Textures/XRTK_Logo_Black.png create mode 100644 StandardAssets/Textures/XRTK_Logo_Black.png.meta create mode 100644 StandardAssets/Textures/XRTK_Logo_White.png create mode 100644 StandardAssets/Textures/XRTK_Logo_White.png.meta create mode 100644 StandardAssets/Textures/XboxController_black.png create mode 100644 StandardAssets/Textures/XboxController_black.png.meta create mode 100644 StandardAssets/Textures/XboxController_black_scaled.png create mode 100644 StandardAssets/Textures/XboxController_black_scaled.png.meta create mode 100644 StandardAssets/Textures/XboxController_white.png create mode 100644 StandardAssets/Textures/XboxController_white.png.meta create mode 100644 StandardAssets/Textures/XboxController_white_scaled.png create mode 100644 StandardAssets/Textures/XboxController_white_scaled.png.meta create mode 100644 Utilities.meta create mode 100644 Utilities/Async.meta create mode 100644 Utilities/Async/AwaitYieldInstructions.meta create mode 100644 Utilities/Async/AwaitYieldInstructions/BackgroundThread.cs create mode 100644 Utilities/Async/AwaitYieldInstructions/BackgroundThread.cs.meta create mode 100644 Utilities/Async/AwaitYieldInstructions/UnityMainThread.cs create mode 100644 Utilities/Async/AwaitYieldInstructions/UnityMainThread.cs.meta create mode 100644 Utilities/Async/AwaiterExtensions.cs create mode 100644 Utilities/Async/AwaiterExtensions.cs.meta create mode 100644 Utilities/Async/Awaiters.cs create mode 100644 Utilities/Async/Awaiters.cs.meta create mode 100644 Utilities/Async/Internal.meta create mode 100644 Utilities/Async/Internal/SyncContextUtility.cs create mode 100644 Utilities/Async/Internal/SyncContextUtility.cs.meta create mode 100644 Utilities/Async/License.md create mode 100644 Utilities/Async/License.md.meta create mode 100644 Utilities/Async/ReadMe.md create mode 100644 Utilities/Async/ReadMe.md.meta create mode 100644 Utilities/BuildAndDeploy.meta create mode 100644 Utilities/BuildAndDeploy/BuildDeployPreferences.cs create mode 100644 Utilities/BuildAndDeploy/BuildDeployPreferences.cs.meta create mode 100644 Utilities/BuildAndDeploy/BuildDeployWindow.cs create mode 100644 Utilities/BuildAndDeploy/BuildDeployWindow.cs.meta create mode 100644 Utilities/BuildAndDeploy/BuildInfo.cs create mode 100644 Utilities/BuildAndDeploy/BuildInfo.cs.meta create mode 100644 Utilities/BuildAndDeploy/BuildInfoExtensions.cs create mode 100644 Utilities/BuildAndDeploy/BuildInfoExtensions.cs.meta create mode 100644 Utilities/BuildAndDeploy/IBuildInfo.cs create mode 100644 Utilities/BuildAndDeploy/IBuildInfo.cs.meta create mode 100644 Utilities/BuildAndDeploy/MixedRealityAppIcon.cs create mode 100644 Utilities/BuildAndDeploy/MixedRealityAppIcon.cs.meta create mode 100644 Utilities/BuildAndDeploy/UnityPlayerBuildTools.cs create mode 100644 Utilities/BuildAndDeploy/UnityPlayerBuildTools.cs.meta create mode 100644 Utilities/BuildAndDeploy/UwpAppxBuildTools.cs create mode 100644 Utilities/BuildAndDeploy/UwpAppxBuildTools.cs.meta create mode 100644 Utilities/BuildAndDeploy/UwpBuildDeployPreferences.cs create mode 100644 Utilities/BuildAndDeploy/UwpBuildDeployPreferences.cs.meta create mode 100644 Utilities/BuildAndDeploy/UwpBuildInfo.cs create mode 100644 Utilities/BuildAndDeploy/UwpBuildInfo.cs.meta create mode 100644 Utilities/BuildAndDeploy/UwpPlayerBuildTools.cs create mode 100644 Utilities/BuildAndDeploy/UwpPlayerBuildTools.cs.meta create mode 100644 Utilities/BuildAndDeploy/XRTK.Utilities.Build.asmdef create mode 100644 Utilities/BuildAndDeploy/XRTK.Utilities.Build.asmdef.meta create mode 100644 Utilities/CalibrationSpace.cs create mode 100644 Utilities/CalibrationSpace.cs.meta create mode 100644 Utilities/CameraCache.cs create mode 100644 Utilities/CameraCache.cs.meta create mode 100644 Utilities/CanvasUtility.cs create mode 100644 Utilities/CanvasUtility.cs.meta create mode 100644 Utilities/DebugUtilities.cs create mode 100644 Utilities/DebugUtilities.cs.meta create mode 100644 Utilities/EdgeUtilities.cs create mode 100644 Utilities/EdgeUtilities.cs.meta create mode 100644 Utilities/Editor.meta create mode 100644 Utilities/Editor/EditorAssemblyReloadManager.cs create mode 100644 Utilities/Editor/EditorAssemblyReloadManager.cs.meta create mode 100644 Utilities/Editor/EditorPreferences.cs create mode 100644 Utilities/Editor/EditorPreferences.cs.meta create mode 100644 Utilities/Editor/IconEditor.cs create mode 100644 Utilities/Editor/IconEditor.cs.meta create mode 100644 Utilities/Editor/InputManagerAxis.cs create mode 100644 Utilities/Editor/InputManagerAxis.cs.meta create mode 100644 Utilities/Editor/InputManagerAxisType.cs create mode 100644 Utilities/Editor/InputManagerAxisType.cs.meta create mode 100644 Utilities/Editor/InputMappingAxisUtility.cs create mode 100644 Utilities/Editor/InputMappingAxisUtility.cs.meta create mode 100644 Utilities/Editor/MixedRealityEditorSettings.cs create mode 100644 Utilities/Editor/MixedRealityEditorSettings.cs.meta create mode 100644 Utilities/Editor/USB.meta create mode 100644 Utilities/Editor/USB/USBDeviceInfo.cs create mode 100644 Utilities/Editor/USB/USBDeviceInfo.cs.meta create mode 100644 Utilities/Editor/USB/USBDeviceListener.cs create mode 100644 Utilities/Editor/USB/USBDeviceListener.cs.meta create mode 100644 Utilities/Editor/XRTK.Utilities.Editor.asmdef create mode 100644 Utilities/Editor/XRTK.Utilities.Editor.asmdef.meta create mode 100644 Utilities/FastSimplexNoise.cs create mode 100644 Utilities/FastSimplexNoise.cs.meta create mode 100644 Utilities/Gltf.meta create mode 100644 Utilities/Gltf/Schema.meta create mode 100644 Utilities/Gltf/Schema/Extensions.meta create mode 100644 Utilities/Gltf/Schema/Extensions/GltfExtension.cs create mode 100644 Utilities/Gltf/Schema/Extensions/GltfExtension.cs.meta create mode 100644 Utilities/Gltf/Schema/Extensions/KHR_Materials_PbrSpecularGlossiness.cs create mode 100644 Utilities/Gltf/Schema/Extensions/KHR_Materials_PbrSpecularGlossiness.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAccessor.cs create mode 100644 Utilities/Gltf/Schema/GltfAccessor.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAccessorAttributeType.cs create mode 100644 Utilities/Gltf/Schema/GltfAccessorAttributeType.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAccessorSparse.cs create mode 100644 Utilities/Gltf/Schema/GltfAccessorSparse.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAccessorSparseIndices.cs create mode 100644 Utilities/Gltf/Schema/GltfAccessorSparseIndices.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAccessorSparseValues.cs create mode 100644 Utilities/Gltf/Schema/GltfAccessorSparseValues.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAlphaMode.cs create mode 100644 Utilities/Gltf/Schema/GltfAlphaMode.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAnimation.cs create mode 100644 Utilities/Gltf/Schema/GltfAnimation.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAnimationChannel.cs create mode 100644 Utilities/Gltf/Schema/GltfAnimationChannel.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAnimationChannelPath.cs create mode 100644 Utilities/Gltf/Schema/GltfAnimationChannelPath.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAnimationChannelTarget.cs create mode 100644 Utilities/Gltf/Schema/GltfAnimationChannelTarget.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAnimationSampler.cs create mode 100644 Utilities/Gltf/Schema/GltfAnimationSampler.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfAssetInfo.cs create mode 100644 Utilities/Gltf/Schema/GltfAssetInfo.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfBuffer.cs create mode 100644 Utilities/Gltf/Schema/GltfBuffer.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfBufferView.cs create mode 100644 Utilities/Gltf/Schema/GltfBufferView.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfBufferViewTarget.cs create mode 100644 Utilities/Gltf/Schema/GltfBufferViewTarget.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfCamera.cs create mode 100644 Utilities/Gltf/Schema/GltfCamera.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfCameraOrthographic.cs create mode 100644 Utilities/Gltf/Schema/GltfCameraOrthographic.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfCameraPerspective.cs create mode 100644 Utilities/Gltf/Schema/GltfCameraPerspective.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfCameraType.cs create mode 100644 Utilities/Gltf/Schema/GltfCameraType.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfChildOfRootProperty.cs create mode 100644 Utilities/Gltf/Schema/GltfChildOfRootProperty.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfComponentType.cs create mode 100644 Utilities/Gltf/Schema/GltfComponentType.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfDrawMode.cs create mode 100644 Utilities/Gltf/Schema/GltfDrawMode.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfImage.cs create mode 100644 Utilities/Gltf/Schema/GltfImage.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfInterpolationType.cs create mode 100644 Utilities/Gltf/Schema/GltfInterpolationType.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMagnificationFilterMode.cs create mode 100644 Utilities/Gltf/Schema/GltfMagnificationFilterMode.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMaterial.cs create mode 100644 Utilities/Gltf/Schema/GltfMaterial.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMaterialCommonConstant.cs create mode 100644 Utilities/Gltf/Schema/GltfMaterialCommonConstant.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMesh.cs create mode 100644 Utilities/Gltf/Schema/GltfMesh.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMeshPrimitive.cs create mode 100644 Utilities/Gltf/Schema/GltfMeshPrimitive.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMeshPrimitiveAttributes.cs create mode 100644 Utilities/Gltf/Schema/GltfMeshPrimitiveAttributes.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfMinFilterMode.cs create mode 100644 Utilities/Gltf/Schema/GltfMinFilterMode.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfNode.cs create mode 100644 Utilities/Gltf/Schema/GltfNode.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfNormalTextureInfo.cs create mode 100644 Utilities/Gltf/Schema/GltfNormalTextureInfo.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfObject.cs create mode 100644 Utilities/Gltf/Schema/GltfObject.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfOcclusionTextureInfo.cs create mode 100644 Utilities/Gltf/Schema/GltfOcclusionTextureInfo.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfPbrMetallicRoughness.cs create mode 100644 Utilities/Gltf/Schema/GltfPbrMetallicRoughness.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfProperty.cs create mode 100644 Utilities/Gltf/Schema/GltfProperty.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfSampler.cs create mode 100644 Utilities/Gltf/Schema/GltfSampler.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfScene.cs create mode 100644 Utilities/Gltf/Schema/GltfScene.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfSkin.cs create mode 100644 Utilities/Gltf/Schema/GltfSkin.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfTexture.cs create mode 100644 Utilities/Gltf/Schema/GltfTexture.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfTextureInfo.cs create mode 100644 Utilities/Gltf/Schema/GltfTextureInfo.cs.meta create mode 100644 Utilities/Gltf/Schema/GltfWrapMode.cs create mode 100644 Utilities/Gltf/Schema/GltfWrapMode.cs.meta create mode 100644 Utilities/Gltf/Serialization.meta create mode 100644 Utilities/Gltf/Serialization/ColliderType.cs create mode 100644 Utilities/Gltf/Serialization/ColliderType.cs.meta create mode 100644 Utilities/Gltf/Serialization/ConstructGltf.cs create mode 100644 Utilities/Gltf/Serialization/ConstructGltf.cs.meta create mode 100644 Utilities/Gltf/Serialization/ExportGltf.cs create mode 100644 Utilities/Gltf/Serialization/ExportGltf.cs.meta create mode 100644 Utilities/Gltf/Serialization/GltfAsset.cs create mode 100644 Utilities/Gltf/Serialization/GltfAsset.cs.meta create mode 100644 Utilities/Gltf/Serialization/GltfChunkType.cs create mode 100644 Utilities/Gltf/Serialization/GltfChunkType.cs.meta create mode 100644 Utilities/Gltf/Serialization/GltfConversions.cs create mode 100644 Utilities/Gltf/Serialization/GltfConversions.cs.meta create mode 100644 Utilities/Gltf/Serialization/GltfUtility.cs create mode 100644 Utilities/Gltf/Serialization/GltfUtility.cs.meta create mode 100644 Utilities/Gltf/Serialization/Importers.meta create mode 100644 Utilities/Gltf/Serialization/Importers/GlbAssetImporter.cs create mode 100644 Utilities/Gltf/Serialization/Importers/GlbAssetImporter.cs.meta create mode 100644 Utilities/Gltf/Serialization/Importers/GltfAssetImporter.cs create mode 100644 Utilities/Gltf/Serialization/Importers/GltfAssetImporter.cs.meta create mode 100644 Utilities/Gltf/Serialization/Importers/GltfEditorImporter.cs create mode 100644 Utilities/Gltf/Serialization/Importers/GltfEditorImporter.cs.meta create mode 100644 Utilities/Gltf/Serialization/Importers/XRTK.Utilities.Gltf.Importers.asmdef create mode 100644 Utilities/Gltf/Serialization/Importers/XRTK.Utilities.Gltf.Importers.asmdef.meta create mode 100644 Utilities/HoverLight.cs create mode 100644 Utilities/HoverLight.cs.meta create mode 100644 Utilities/Lines.meta create mode 100644 Utilities/Lines/DataProviders.meta create mode 100644 Utilities/Lines/DataProviders/BaseMixedRealityLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/BaseMixedRealityLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/EllipseLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/EllipseLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/ParabolaConstrainedLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/ParabolaConstrainedLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/ParabolaLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/ParabolaLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/RectangleLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/RectangleLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/SimpleLineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/SimpleLineDataProvider.cs.meta create mode 100644 Utilities/Lines/DataProviders/SplineDataProvider.cs create mode 100644 Utilities/Lines/DataProviders/SplineDataProvider.cs.meta create mode 100644 Utilities/Lines/LineFollower.cs create mode 100644 Utilities/Lines/LineFollower.cs.meta create mode 100644 Utilities/Lines/LineUtility.cs create mode 100644 Utilities/Lines/LineUtility.cs.meta create mode 100644 Utilities/Lines/Renderers.meta create mode 100644 Utilities/Lines/Renderers/BaseMixedRealityLineRenderer.cs create mode 100644 Utilities/Lines/Renderers/BaseMixedRealityLineRenderer.cs.meta create mode 100644 Utilities/Lines/Renderers/MeshLineRenderer.cs create mode 100644 Utilities/Lines/Renderers/MeshLineRenderer.cs.meta create mode 100644 Utilities/Lines/Renderers/MixedRealityLineRenderer.cs create mode 100644 Utilities/Lines/Renderers/MixedRealityLineRenderer.cs.meta create mode 100644 Utilities/Lines/Renderers/ParticleSystemLineRenderer.cs create mode 100644 Utilities/Lines/Renderers/ParticleSystemLineRenderer.cs.meta create mode 100644 Utilities/Lines/Renderers/StripMeshLineRenderer.cs create mode 100644 Utilities/Lines/Renderers/StripMeshLineRenderer.cs.meta create mode 100644 Utilities/MathUtilities.cs create mode 100644 Utilities/MathUtilities.cs.meta create mode 100644 Utilities/Physics.meta create mode 100644 Utilities/Physics/BaseRayStabilizer.cs create mode 100644 Utilities/Physics/BaseRayStabilizer.cs.meta create mode 100644 Utilities/Physics/Distorters.meta create mode 100644 Utilities/Physics/Distorters/Distorter.cs create mode 100644 Utilities/Physics/Distorters/Distorter.cs.meta create mode 100644 Utilities/Physics/Distorters/DistorterBulge.cs create mode 100644 Utilities/Physics/Distorters/DistorterBulge.cs.meta create mode 100644 Utilities/Physics/Distorters/DistorterGravity.cs create mode 100644 Utilities/Physics/Distorters/DistorterGravity.cs.meta create mode 100644 Utilities/Physics/Distorters/DistorterSimplex.cs create mode 100644 Utilities/Physics/Distorters/DistorterSimplex.cs.meta create mode 100644 Utilities/Physics/Distorters/DistorterSphere.cs create mode 100644 Utilities/Physics/Distorters/DistorterSphere.cs.meta create mode 100644 Utilities/Physics/Distorters/DistorterWiggly.cs create mode 100644 Utilities/Physics/Distorters/DistorterWiggly.cs.meta create mode 100644 Utilities/Physics/GazeStabilizer.cs create mode 100644 Utilities/Physics/GazeStabilizer.cs.meta create mode 100644 Utilities/Physics/InterpolationUtilities.cs create mode 100644 Utilities/Physics/InterpolationUtilities.cs.meta create mode 100644 Utilities/Physics/Interpolator.cs create mode 100644 Utilities/Physics/Interpolator.cs.meta create mode 100644 Utilities/Physics/MixedRealityRaycaster.cs create mode 100644 Utilities/Physics/MixedRealityRaycaster.cs.meta create mode 100644 Utilities/Physics/RaycastResultComparer.cs create mode 100644 Utilities/Physics/RaycastResultComparer.cs.meta create mode 100644 Utilities/Physics/TwoHandMoveLogic.cs create mode 100644 Utilities/Physics/TwoHandMoveLogic.cs.meta create mode 100644 Utilities/Physics/TwoHandRotateLogic.cs create mode 100644 Utilities/Physics/TwoHandRotateLogic.cs.meta create mode 100644 Utilities/Physics/TwoHandScaleLogic.cs create mode 100644 Utilities/Physics/TwoHandScaleLogic.cs.meta create mode 100644 Utilities/Physics/VectorRollingStatistics.cs create mode 100644 Utilities/Physics/VectorRollingStatistics.cs.meta create mode 100644 Utilities/PlatformUtility.cs create mode 100644 Utilities/PlatformUtility.cs.meta create mode 100644 Utilities/Rendering.meta create mode 100644 Utilities/Rendering/ClippingBox.cs create mode 100644 Utilities/Rendering/ClippingBox.cs.meta create mode 100644 Utilities/Rendering/ClippingPlane.cs create mode 100644 Utilities/Rendering/ClippingPlane.cs.meta create mode 100644 Utilities/Rendering/ClippingPrimitive.cs create mode 100644 Utilities/Rendering/ClippingPrimitive.cs.meta create mode 100644 Utilities/Rendering/ClippingSphere.cs create mode 100644 Utilities/Rendering/ClippingSphere.cs.meta create mode 100644 Utilities/Solvers.meta create mode 100644 Utilities/Solvers/ConstantViewSize.cs create mode 100644 Utilities/Solvers/ConstantViewSize.cs.meta create mode 100644 Utilities/Solvers/ControllerFinder.cs create mode 100644 Utilities/Solvers/ControllerFinder.cs.meta create mode 100644 Utilities/Solvers/InBetween.cs create mode 100644 Utilities/Solvers/InBetween.cs.meta create mode 100644 Utilities/Solvers/Momentum.cs create mode 100644 Utilities/Solvers/Momentum.cs.meta create mode 100644 Utilities/Solvers/Orbital.cs create mode 100644 Utilities/Solvers/Orbital.cs.meta create mode 100644 Utilities/Solvers/Overlap.cs create mode 100644 Utilities/Solvers/Overlap.cs.meta create mode 100644 Utilities/Solvers/RadialView.cs create mode 100644 Utilities/Solvers/RadialView.cs.meta create mode 100644 Utilities/Solvers/Solver.cs create mode 100644 Utilities/Solvers/Solver.cs.meta create mode 100644 Utilities/Solvers/SolverHandler.cs create mode 100644 Utilities/Solvers/SolverHandler.cs.meta create mode 100644 Utilities/Solvers/SurfaceMagnetism.cs create mode 100644 Utilities/Solvers/SurfaceMagnetism.cs.meta create mode 100644 Utilities/WebRequestRest.meta create mode 100644 Utilities/WebRequestRest/Response.cs create mode 100644 Utilities/WebRequestRest/Response.cs.meta create mode 100644 Utilities/WebRequestRest/Rest.cs create mode 100644 Utilities/WebRequestRest/Rest.cs.meta create mode 100644 Utilities/WindowsApiChecker.cs create mode 100644 Utilities/WindowsApiChecker.cs.meta create mode 100644 Utilities/WindowsDevicePortal.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ActivePowerSchemeInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ActivePowerSchemeInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/AdapterInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/AdapterInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ApplicationInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ApplicationInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/AvailableWiFiNetworks.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/AvailableWiFiNetworks.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/BatteryInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/BatteryInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DHCPInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DHCPInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DeviceInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DeviceInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DeviceOsInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DeviceOsInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DevicePortalConnections.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/DevicePortalConnections.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/FileInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/FileInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/FileList.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/FileList.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/InstallStatus.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/InstallStatus.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/InstalledApps.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/InstalledApps.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/InterfaceInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/InterfaceInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/IpAddressInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/IpAddressInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/IpConfigInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/IpConfigInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/MachineName.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/MachineName.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/NetworkInterfaces.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/NetworkInterfaces.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/NetworkProfileInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/NetworkProfileInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/PowerStateInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/PowerStateInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ProcessInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ProcessInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ProcessList.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/ProcessList.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DataStructures/WirelessNetworkInfo.cs create mode 100644 Utilities/WindowsDevicePortal/DataStructures/WirelessNetworkInfo.cs.meta create mode 100644 Utilities/WindowsDevicePortal/DevicePortal.cs create mode 100644 Utilities/WindowsDevicePortal/DevicePortal.cs.meta create mode 100644 XRTK.asmdef create mode 100644 XRTK.asmdef.meta create mode 100644 package.json create mode 100644 package.json.meta diff --git a/.npmignore b/.npmignore new file mode 100644 index 000000000..e51ad3869 --- /dev/null +++ b/.npmignore @@ -0,0 +1 @@ +Submodules/ \ No newline at end of file diff --git a/AssemblyInfo.cs b/AssemblyInfo.cs new file mode 100644 index 000000000..2311a10fc --- /dev/null +++ b/AssemblyInfo.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Runtime.CompilerServices; + +// Note: these are the names of the assembly definitions themselves, not necessarily the actual namespace the class is in. + +[assembly: InternalsVisibleTo("XRTK.Inspectors")] +[assembly: InternalsVisibleTo("XRTK.Tests")] +[assembly: InternalsVisibleTo("XRTK.Utilities.Gltf.Importers")] +[assembly: InternalsVisibleTo("XRTK.WindowsMixedReality")] +[assembly: InternalsVisibleTo("XRTK.WindowsMixedReality.Player")] diff --git a/AssemblyInfo.cs.meta b/AssemblyInfo.cs.meta new file mode 100644 index 000000000..bf5ce991a --- /dev/null +++ b/AssemblyInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72f565a8d0a14beb8866e7fcda137815 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes.meta b/Attributes.meta new file mode 100644 index 000000000..d4ad3c4a7 --- /dev/null +++ b/Attributes.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 517424277aef41d4bba05c9b9ed4e6fa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/EnumFlagsAttribute.cs b/Attributes/EnumFlagsAttribute.cs new file mode 100644 index 000000000..fec9583c5 --- /dev/null +++ b/Attributes/EnumFlagsAttribute.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Attributes +{ + /// + /// From https://answers.unity.com/questions/486694/default-editor-enum-as-flags-.html + /// + [AttributeUsage(AttributeTargets.Field)] + public sealed class EnumFlagsAttribute : PropertyAttribute + { + public EnumFlagsAttribute() { } + } +} \ No newline at end of file diff --git a/Attributes/EnumFlagsAttribute.cs.meta b/Attributes/EnumFlagsAttribute.cs.meta new file mode 100644 index 000000000..d3f410966 --- /dev/null +++ b/Attributes/EnumFlagsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0fa9f161450f4cd38e5d1d5b29afcdba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/ExtendsAttribute.cs b/Attributes/ExtendsAttribute.cs new file mode 100644 index 000000000..5f312b6c2 --- /dev/null +++ b/Attributes/ExtendsAttribute.cs @@ -0,0 +1,38 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using XRTK.Definitions.Utilities; + +namespace XRTK.Attributes +{ + /// + /// Constraint that allows selection of classes that extend a specific class when + /// selecting a with the Unity inspector. + /// + public sealed class ExtendsAttribute : SystemTypeAttribute + { + /// + /// Gets the type of class that selectable classes must derive from. + /// + public Type BaseType { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// Type of class that selectable classes must derive from. + /// Gets or sets grouping of selectable classes. Defaults to unless explicitly specified. + public ExtendsAttribute(Type baseType, TypeGrouping grouping) : base(baseType, grouping) + { + BaseType = baseType; + } + + /// + public override bool IsConstraintSatisfied(Type type) + { + return base.IsConstraintSatisfied(type) && + BaseType.IsAssignableFrom(type) && + type != BaseType; + } + } +} \ No newline at end of file diff --git a/Attributes/ExtendsAttribute.cs.meta b/Attributes/ExtendsAttribute.cs.meta new file mode 100644 index 000000000..ffa6f3391 --- /dev/null +++ b/Attributes/ExtendsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c3fd156fb43e4594b509b38a4e09e570 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/ImplementsAttribute.cs b/Attributes/ImplementsAttribute.cs new file mode 100644 index 000000000..b2c01e017 --- /dev/null +++ b/Attributes/ImplementsAttribute.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using XRTK.Definitions.Utilities; + +namespace XRTK.Attributes +{ + /// + /// Constraint that allows selection of classes that implement a specific interface + /// when selecting a with the Unity inspector. + /// + public sealed class ImplementsAttribute : SystemTypeAttribute + { + /// + /// Gets the type of interface that selectable classes must implement. + /// + public Type InterfaceType { get; private set; } + + /// + /// Initializes a new instance of the class. + /// + /// Type of interface that selectable classes must implement. + /// Gets or sets grouping of selectable classes. Defaults to unless explicitly specified. + public ImplementsAttribute(Type interfaceType, TypeGrouping grouping) + : base(interfaceType, grouping) + { + InterfaceType = interfaceType; + } + + /// + public override bool IsConstraintSatisfied(Type type) + { + if (base.IsConstraintSatisfied(type)) + { + var interfaces = type.GetInterfaces(); + + for (var i = 0; i < interfaces.Length; i++) + { + if (interfaces[i] == InterfaceType) + { + return true; + } + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/Attributes/ImplementsAttribute.cs.meta b/Attributes/ImplementsAttribute.cs.meta new file mode 100644 index 000000000..0592af59a --- /dev/null +++ b/Attributes/ImplementsAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8dfb85bbf32e4faeb88677a4b482ef93 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/PhysicsLayerAttribute.cs b/Attributes/PhysicsLayerAttribute.cs new file mode 100644 index 000000000..6599a3660 --- /dev/null +++ b/Attributes/PhysicsLayerAttribute.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Attributes +{ + /// + /// Attribute used to make an field render a dropdown generated from the current layers defined in the Tag Manager. + /// + [AttributeUsage(AttributeTargets.Field)] + public sealed class PhysicsLayerAttribute : PropertyAttribute + { + public PhysicsLayerAttribute() { } + } +} \ No newline at end of file diff --git a/Attributes/PhysicsLayerAttribute.cs.meta b/Attributes/PhysicsLayerAttribute.cs.meta new file mode 100644 index 000000000..51012b3a5 --- /dev/null +++ b/Attributes/PhysicsLayerAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5729d0cfc04649dc92243b3f243ba6d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/PrefabAttribute.cs b/Attributes/PrefabAttribute.cs new file mode 100644 index 000000000..895f4dd3b --- /dev/null +++ b/Attributes/PrefabAttribute.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Attributes +{ + /// + /// Attribute used to ensure that a GameObject inspector slot only accepts prefabs. + /// + [AttributeUsage(AttributeTargets.Field)] + public sealed class PrefabAttribute : PropertyAttribute + { + public PrefabAttribute() { } + + public PrefabAttribute(Type type) + { + Constraint = type; + } + + public Type Constraint { get; } + } +} \ No newline at end of file diff --git a/Attributes/PrefabAttribute.cs.meta b/Attributes/PrefabAttribute.cs.meta new file mode 100644 index 000000000..35b8ef871 --- /dev/null +++ b/Attributes/PrefabAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eefcbc5bbc0f4f43bd6c01cdcf7ad023 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/SystemTypeAttribute.cs b/Attributes/SystemTypeAttribute.cs new file mode 100644 index 000000000..00487e592 --- /dev/null +++ b/Attributes/SystemTypeAttribute.cs @@ -0,0 +1,52 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Attributes +{ + /// + /// Base class for class selection constraints that can be applied when selecting + /// a with the Unity inspector. + /// + public class SystemTypeAttribute : PropertyAttribute + { + /// + /// Gets or sets grouping of selectable classes. Defaults to unless explicitly specified. + /// + public TypeGrouping Grouping { get; protected set; } + + /// + /// Gets or sets whether abstract classes can be selected from drop-down. + /// Defaults to a value of false unless explicitly specified. + /// + public bool AllowAbstract { get; protected set; } = false; + + /// + /// + /// + /// Initializes a new instance of the class. + /// Gets or sets grouping of selectable classes. Defaults to unless explicitly specified. + public SystemTypeAttribute(Type type, TypeGrouping grouping = TypeGrouping.ByNamespaceFlat) + { + bool isValid = type.IsClass || type.IsInterface || type.IsValueType && !type.IsEnum; + Debug.Assert(isValid, $"Invalid Type {type} in attribute."); + Grouping = grouping; + } + + /// + /// Determines whether the specified satisfies filter constraint. + /// + /// Type to test. + /// + /// A value indicating if the type specified by + /// satisfies this constraint and should thus be selectable. + /// + public virtual bool IsConstraintSatisfied(Type type) + { + return AllowAbstract || !type.IsAbstract; + } + } +} \ No newline at end of file diff --git a/Attributes/SystemTypeAttribute.cs.meta b/Attributes/SystemTypeAttribute.cs.meta new file mode 100644 index 000000000..bae04a24f --- /dev/null +++ b/Attributes/SystemTypeAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5658ed6e9b7f4cd8b1d7ebedcd4e62ee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Attributes/Vector3RangeAttribute.cs b/Attributes/Vector3RangeAttribute.cs new file mode 100644 index 000000000..a83a28d2f --- /dev/null +++ b/Attributes/Vector3RangeAttribute.cs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Attributes +{ + /// + /// Attribute used to make a float or int variable in a script be restricted to a specific range. + /// + [AttributeUsage(AttributeTargets.Field)] + public sealed class Vector3RangeAttribute : PropertyAttribute + { + /// + /// Minimum value. + /// + public readonly float Min; + + /// + /// Maximum value. + /// + public readonly float Max; + + /// + /// Attribute used to make a float or int variable in a script be restricted to a specific range. + /// + /// The minimum allowed value. + /// The maximum allowed value. + public Vector3RangeAttribute(float min, float max) + { + Min = min; + Max = max; + } + } +} diff --git a/Attributes/Vector3RangeAttribute.cs.meta b/Attributes/Vector3RangeAttribute.cs.meta new file mode 100644 index 000000000..0699bcfc2 --- /dev/null +++ b/Attributes/Vector3RangeAttribute.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 813683d8d30f4d1a85a8a87a3be0316e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 000000000..e4d502a8a --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1 @@ +Placeholder to be replaced by root [changelog](../../../CHANGELOG.md) during build \ No newline at end of file diff --git a/CHANGELOG.md.meta b/CHANGELOG.md.meta new file mode 100644 index 000000000..9cbce4f52 --- /dev/null +++ b/CHANGELOG.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 4b8c7c1f4fb77c248bd868b5088be7fb +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions.meta b/Definitions.meta new file mode 100644 index 000000000..cce4206e8 --- /dev/null +++ b/Definitions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8a6d4f88b4ec4ddb8f881ba4f106ed21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/BaseMixedRealityExtensionServiceProfile.cs b/Definitions/BaseMixedRealityExtensionServiceProfile.cs new file mode 100644 index 000000000..cfb9dded1 --- /dev/null +++ b/Definitions/BaseMixedRealityExtensionServiceProfile.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Definitions +{ + /// + /// The base profile to use for custom s + /// + public abstract class BaseMixedRealityExtensionServiceProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("Currently registered IMixedRealityDataProvider configurations for this extension service.")] + private DataModelConfiguration[] registeredDataProviders = null; + + /// + /// Currently registered configurations for this extension service. + /// + public DataModelConfiguration[] RegisteredDataProviders + { + get => registeredDataProviders; + set => registeredDataProviders = value; + } + } +} \ No newline at end of file diff --git a/Definitions/BaseMixedRealityExtensionServiceProfile.cs.meta b/Definitions/BaseMixedRealityExtensionServiceProfile.cs.meta new file mode 100644 index 000000000..5f56454a6 --- /dev/null +++ b/Definitions/BaseMixedRealityExtensionServiceProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47d833ee7afb4d88abb4b0379ad7eb21 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/BaseMixedRealityProfile.cs b/Definitions/BaseMixedRealityProfile.cs new file mode 100644 index 000000000..45dcd0a33 --- /dev/null +++ b/Definitions/BaseMixedRealityProfile.cs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Definitions +{ + public abstract class BaseMixedRealityProfile : ScriptableObject + { + [SerializeField] + private bool isCustomProfile = true; + + internal bool IsCustomProfile => isCustomProfile; + } +} \ No newline at end of file diff --git a/Definitions/BaseMixedRealityProfile.cs.meta b/Definitions/BaseMixedRealityProfile.cs.meta new file mode 100644 index 000000000..785b8fe49 --- /dev/null +++ b/Definitions/BaseMixedRealityProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b96b051fca35454b9e87e9a72e39ebc3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/BoundarySystem.meta b/Definitions/BoundarySystem.meta new file mode 100644 index 000000000..1831d4d4a --- /dev/null +++ b/Definitions/BoundarySystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 434d755f896d49949178f7d69782ddd7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/BoundarySystem/Edge.cs b/Definitions/BoundarySystem/Edge.cs new file mode 100644 index 000000000..3de094827 --- /dev/null +++ b/Definitions/BoundarySystem/Edge.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Definitions.BoundarySystem +{ + /// + /// The BoundaryEdge structure defines the points of a line segment that are used to + /// construct a polygonal boundary. + /// + public struct Edge + { + /// + /// The first point of the edge line segment. + /// + public readonly Vector2 PointA; + + /// + /// The second point of the edge line segment. + /// + public readonly Vector2 PointB; + + /// + /// Initializes the BoundaryEdge structure. + /// + /// The first point of the line segment. + /// The second point of the line segment. + public Edge(Vector2 pointA, Vector2 pointB) + { + PointA = pointA; + PointB = pointB; + } + + /// + /// Initializes the BoundaryEdge structure. + /// + /// The first point of the line segment. + /// The second point of the line segment. + public Edge(Vector3 pointA, Vector3 pointB) : + // Use the X and Z parameters as our edges are height agnostic. + this(new Vector2(pointA.x, pointA.z), new Vector2(pointB.x, pointB.z)) + { } + } +} diff --git a/Definitions/BoundarySystem/Edge.cs.meta b/Definitions/BoundarySystem/Edge.cs.meta new file mode 100644 index 000000000..e7a561703 --- /dev/null +++ b/Definitions/BoundarySystem/Edge.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2dfefdc1978d4b548f405c8b3c3b46a0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/BoundarySystem/InscribedRectangle.cs b/Definitions/BoundarySystem/InscribedRectangle.cs new file mode 100644 index 000000000..695c7c770 --- /dev/null +++ b/Definitions/BoundarySystem/InscribedRectangle.cs @@ -0,0 +1,549 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Utilities; + +namespace XRTK.Definitions.BoundarySystem +{ + /// + /// The InscribedRectangle class defines the largest rectangle within an + /// arbitrary shape. + /// + public class InscribedRectangle + { + /// + /// Total number of starting points randomly generated within the boundary. + /// + private const int randomPointCount = 30; + + /// + /// The total amount of height, in meters, we want to gain with each binary search + /// change before we decide that it's good enough. + /// + private const float minimumHeightGain = 0.01f; + + /// + /// Angles to use for fitting the rectangle within the boundary. + /// + private static readonly float[] fitAngles = { 0, 15, 30, 45, 60, 75, 90, 105, 120, 135, 150, 165 }; + + /// + /// Aspect ratios used when fitting rectangles within the boundary. + /// + private static float[] aspectRatios = { + 1.0f, 1.5f, 2.0f, 2.5f, 3.0f, 3.5f, 4.0f, 4.5f, + 5.0f, 5.5f, 6, 6.5f, 7, 7.5f, 8.0f, 8.5f, 9.0f, + 9.5f, 10.0f, 10.5f, 11.0f, 11.5f, 12.0f, 12.5f, + 13.0f, 13.5f, 14.0f, 14.5f, 15.0f}; + + /// + /// The center point of the inscribed rectangle. + /// + public Vector2 Center { get; private set; } = EdgeUtilities.InvalidPoint; + + /// + /// The width of the inscribed rectangle. + /// + public float Width { get; private set; } = 0f; + + /// + /// The height of the inscribed rectangle. + /// + public float Height { get; private set; } = 0f; + + /// + /// The rotation angle, in degrees, of the inscribed rectangle. + /// + public float Angle { get; private set; } = 0f; + + /// + /// Is the described rectangle valid? + /// + /// + /// A rectangle is considered valid if it's center point is valid. + /// + public bool IsValid => EdgeUtilities.IsValidPoint(Center); + + /// + /// Finds a large inscribed rectangle. Tries to be maximal but this is + /// best effort. The algorithm used was inspired by the blog post + /// https://d3plus.org/blog/behind-the-scenes/2014/07/08/largest-rect/ + /// Random points within the polygon are chosen, and then 2 lines are + /// drawn through those points. The midpoints of those lines are + /// used as the center of various rectangles, using a binary search to + /// vary the size, until the largest fit-able rectangle is found. + /// This is then repeated for predefined angles (0-180 in steps of 15) + /// and aspect ratios (1 to 15 in steps of 0.5). + /// + /// The boundary geometry. + /// Random number generator seed. + /// + /// For the most reproducible results, use the same randomSeed value + /// each time this method is called. + /// + public InscribedRectangle(Edge[] geometryEdges, int randomSeed) + { + // Clear previous rectangle + Center = EdgeUtilities.InvalidPoint; + Width = 0; + Height = 0; + Angle = 0; + + float minX = EdgeUtilities.maxWidth; + float minY = EdgeUtilities.maxWidth; + float maxX = -EdgeUtilities.maxWidth; + float maxY = -EdgeUtilities.maxWidth; + + // Find min x, min y, max x, max y + for (int i = 0; i < geometryEdges.Length; i++) + { + Edge edge = geometryEdges[i]; + + if ((edge.PointA.x < minX) || (edge.PointB.x < minX)) + { + minX = Mathf.Min(edge.PointA.x, edge.PointB.x); + } + + if ((edge.PointA.y < minY) || (edge.PointB.y < minY)) + { + minY = Mathf.Min(edge.PointA.y, edge.PointB.y); + } + + if ((edge.PointA.x > maxX) || (edge.PointB.x > maxX)) + { + maxX = Mathf.Max(edge.PointA.x, edge.PointB.x); + } + + if ((edge.PointA.y > maxY) || (edge.PointB.y > maxY)) + { + maxY = Mathf.Min(edge.PointA.y, edge.PointB.y); + } + + } + + // Generate random points until we have randomPointCount starting points + Vector2[] startingPoints = new Vector2[randomPointCount]; + { + System.Random random = new System.Random(randomSeed); + for (int i = 0; i < startingPoints.Length; i++) + { + Vector2 candidatePoint; + + do + { + candidatePoint.x = ((float)random.NextDouble() * (maxX - minX)) + minX; + candidatePoint.y = ((float)random.NextDouble() * (maxY - minY)) + minY; + } + while (!EdgeUtilities.IsInsideBoundary(geometryEdges, candidatePoint)); + + startingPoints[i] = candidatePoint; + } + } + + for (int angleIndex = 0; angleIndex < fitAngles.Length; angleIndex++) + { + for (int pointIndex = 0; pointIndex < startingPoints.Length; pointIndex++) + { + float angleRadians = MathUtilities.DegreesToRadians(fitAngles[angleIndex]); + + // Find the collision point of a cross through the given point at the given angle. + // Note, we are ignoring the return value as we are checking each point's validity + // individually. + FindSurroundingCollisionPoints( + geometryEdges, + startingPoints[pointIndex], + angleRadians, + out Vector2 topCollisionPoint, + out Vector2 bottomCollisionPoint, + out Vector2 leftCollisionPoint, + out Vector2 rightCollisionPoint); + + float newWidth; + float newHeight; + + if (EdgeUtilities.IsValidPoint(topCollisionPoint) && EdgeUtilities.IsValidPoint(bottomCollisionPoint)) + { + float aX = topCollisionPoint.x; + float aY = topCollisionPoint.y; + float bX = bottomCollisionPoint.x; + float bY = bottomCollisionPoint.y; + + // Calculate the midpoint between the top and bottom collision points. + Vector2 verticalMidpoint = new Vector2((aX + bX) * 0.5f, (aY + bY) * 0.5f); + if (TryFixMaximumRectangle( + geometryEdges, + verticalMidpoint, + angleRadians, + Width * Height, + out newWidth, + out newHeight)) + { + Center = verticalMidpoint; + Angle = fitAngles[angleIndex]; + Width = newWidth; + Height = newHeight; + } + } + + if (EdgeUtilities.IsValidPoint(leftCollisionPoint) && EdgeUtilities.IsValidPoint(rightCollisionPoint)) + { + float aX = leftCollisionPoint.x; + float aY = leftCollisionPoint.y; + float bX = rightCollisionPoint.x; + float bY = rightCollisionPoint.y; + + // Calculate the midpoint between the left and right collision points. + Vector2 horizontalMidpoint = new Vector2((aX + bX) * 0.5f, (aY + bY) * 0.5f); + if (TryFixMaximumRectangle( + geometryEdges, + horizontalMidpoint, + angleRadians, + Width * Height, + out newWidth, + out newHeight)) + { + Center = horizontalMidpoint; + Angle = fitAngles[angleIndex]; + Width = newWidth; + Height = newHeight; + } + } + } + } + } + + /// + /// Find points at which there are collisions with the geometry around a given point. + /// + /// The boundary geometry. + /// The point around which collisions will be identified. + /// The angle, in radians, at which the collision points will be oriented. + /// Receives the coordinates of the upper collision point. + /// Receives the coordinates of the lower collision point. + /// Receives the coordinates of the left collision point. + /// Receives the coordinates of the right collision point. + /// + /// True if all of the required collision points are located, false otherwise. + /// If a point is unable to be found, the appropriate out parameter will be set to . + /// + private bool FindSurroundingCollisionPoints( + Edge[] geometryEdges, + Vector2 point, + float angleRadians, + out Vector2 topCollisionPoint, + out Vector2 bottomCollisionPoint, + out Vector2 leftCollisionPoint, + out Vector2 rightCollisionPoint) + { + // Initialize out parameters. + topCollisionPoint = EdgeUtilities.InvalidPoint; + bottomCollisionPoint = EdgeUtilities.InvalidPoint; + leftCollisionPoint = EdgeUtilities.InvalidPoint; + rightCollisionPoint = EdgeUtilities.InvalidPoint; + + // Check to see if the point is inside the geometry. + if (!EdgeUtilities.IsInsideBoundary(geometryEdges, point)) + { + return false; + } + + // Define values that are outside of the maximum boundary size. + float largeValue = EdgeUtilities.maxWidth; + float smallValue = -largeValue; + + // Find the top and bottom collision points by creating a large line segment that goes through the point to MAX and MIN values on Y + Vector2 topEndpoint = new Vector2(point.x, largeValue); + Vector2 bottomEndpoint = new Vector2(point.x, smallValue); + topEndpoint = RotatePoint(topEndpoint, point, angleRadians); + bottomEndpoint = RotatePoint(bottomEndpoint, point, angleRadians); + Edge verticalLine = new Edge(topEndpoint, bottomEndpoint); + + // Find the left and right collision points by creating a large line segment that goes through the point to MAX and Min values on X + Vector2 rightEndpoint = new Vector2(largeValue, point.y); + Vector2 leftEndpoint = new Vector2(smallValue, point.y); + rightEndpoint = RotatePoint(rightEndpoint, point, angleRadians); + leftEndpoint = RotatePoint(leftEndpoint, point, angleRadians); + Edge horizontalLine = new Edge(rightEndpoint, leftEndpoint); + + for (int i = 0; i < geometryEdges.Length; i++) + { + // Look for a vertical collision + Vector2 verticalIntersectionPoint = EdgeUtilities.GetIntersectionPoint(geometryEdges[i], verticalLine); + if (EdgeUtilities.IsValidPoint(verticalIntersectionPoint)) + { + // Is the intersection above or below the point? + if (RotatePoint(verticalIntersectionPoint, point, -angleRadians).y > point.y) + { + // Update the top collision point + if (!EdgeUtilities.IsValidPoint(topCollisionPoint) || + (Vector2.SqrMagnitude(point - verticalIntersectionPoint) < Vector2.SqrMagnitude(point - topCollisionPoint))) + { + topCollisionPoint = verticalIntersectionPoint; + } + } + else + { + // Update the bottom collision point + if (!EdgeUtilities.IsValidPoint(bottomCollisionPoint) || + (Vector2.SqrMagnitude(point - verticalIntersectionPoint) < Vector2.SqrMagnitude(point - bottomCollisionPoint))) + { + bottomCollisionPoint = verticalIntersectionPoint; + } + } + } + + // Look for a horizontal collision + Vector2 horizontalIntersection = EdgeUtilities.GetIntersectionPoint(geometryEdges[i], horizontalLine); + if (EdgeUtilities.IsValidPoint(horizontalIntersection)) + { + // Is this intersection to the left or the right of the point? + if (RotatePoint(horizontalIntersection, point, -angleRadians).x < point.x) + { + // Update the left collision point + if (!EdgeUtilities.IsValidPoint(leftCollisionPoint) || + (Vector2.SqrMagnitude(point - horizontalIntersection) < Vector2.SqrMagnitude(point - leftCollisionPoint))) + { + leftCollisionPoint = horizontalIntersection; + } + } + else + { + // Update the right collision point + if (!EdgeUtilities.IsValidPoint(rightCollisionPoint) || + (Vector2.SqrMagnitude(point - horizontalIntersection) < Vector2.SqrMagnitude(point - rightCollisionPoint))) + { + rightCollisionPoint = horizontalIntersection; + } + } + } + } + + // Each corner of the rectangle must intersect with the geometry. + if (!EdgeUtilities.IsValidPoint(topCollisionPoint) || + !EdgeUtilities.IsValidPoint(bottomCollisionPoint) || + !EdgeUtilities.IsValidPoint(leftCollisionPoint) || + !EdgeUtilities.IsValidPoint(rightCollisionPoint)) + { + return false; + } + + return true; + } + + /// + /// Determine of the provided point lies within the defined rectangle. + /// + /// The point to check + /// + /// True if the point is within the rectangle's bounds, false otherwise. + /// + /// The rectangle is not valid. + public bool IsInsideBoundary(Vector2 point) + { + if (!IsValid) + { + throw new InvalidOperationException("A point cannot be within an invalid rectangle."); + } + + point -= Center; + point = RotatePoint(point, Vector2.zero, MathUtilities.DegreesToRadians(-Angle)); + + bool inWidth = Mathf.Abs(point.x) <= (Width * 0.5f); + bool inHeight = Mathf.Abs(point.y) <= (Height * 0.5f); + + return (inWidth && inHeight); + } + + /// + /// Rotate a two dimensional point about another point by the specified angle. + /// + /// The point to be rotated. + /// The point about which the rotation is to occur. + /// The angle for the rotation, in radians + /// + /// The coordinates of the rotated point. + /// + private Vector2 RotatePoint(Vector2 point, Vector2 origin, float angleRadians) + { + if (angleRadians.Equals(0f)) + { + return point; + } + + Vector2 rotated = point; + + // Translate to origin of rotation + rotated.x -= origin.x; + rotated.y -= origin.y; + + // Rotate the point + float sin = Mathf.Sin(angleRadians); + float cos = Mathf.Cos(angleRadians); + float x = rotated.x * cos - rotated.y * sin; + float y = rotated.x * sin + rotated.y * cos; + + // Translate back and return + rotated.x = x + origin.x; + rotated.y = y + origin.y; + + return rotated; + } + + /// + /// Check to see if a rectangle centered at the specified point and oriented at + /// the specified angle will fit within the geometry. + /// + /// The boundary geometry. + /// The center point of the rectangle. + /// The orientation, in radians, of the rectangle. + /// The width of the rectangle. + /// The height of the rectangle. + /// + private bool CheckRectangleFit( + Edge[] geometryEdges, + Vector2 centerPoint, + float angleRadians, + float width, + float height) + { + float halfWidth = width * 0.5f; + float halfHeight = height * 0.5f; + + // Calculate the rectangle corners. + Vector2 topLeft = new Vector2(centerPoint.x - halfWidth, centerPoint.y + halfHeight); + Vector2 topRight = new Vector2(centerPoint.x + halfWidth, centerPoint.y + halfHeight); + Vector2 bottomLeft = new Vector2(centerPoint.x - halfWidth, centerPoint.y - halfHeight); + Vector2 bottomRight = new Vector2(centerPoint.x + halfWidth, centerPoint.y - halfHeight); + + // Rotate the rectangle. + topLeft = RotatePoint(topLeft, centerPoint, angleRadians); + topRight = RotatePoint(topRight, centerPoint, angleRadians); + bottomLeft = RotatePoint(bottomLeft, centerPoint, angleRadians); + bottomRight = RotatePoint(bottomRight, centerPoint, angleRadians); + + // Get the rectangle edges. + Edge topEdge = new Edge(topLeft, topRight); + Edge rightEdge = new Edge(topRight, bottomRight); + Edge bottomEdge = new Edge(bottomLeft, bottomRight); + Edge leftEdge = new Edge(topLeft, bottomLeft); + + // Check for collisions with the boundary geometry. If any of our edges collide, + // the rectangle will not fit within the playspace. + for (int i = 0; i < geometryEdges.Length; i++) + { + if (EdgeUtilities.IsValidPoint(EdgeUtilities.GetIntersectionPoint(geometryEdges[i], topEdge)) || + EdgeUtilities.IsValidPoint(EdgeUtilities.GetIntersectionPoint(geometryEdges[i], rightEdge)) || + EdgeUtilities.IsValidPoint(EdgeUtilities.GetIntersectionPoint(geometryEdges[i], bottomEdge)) || + EdgeUtilities.IsValidPoint(EdgeUtilities.GetIntersectionPoint(geometryEdges[i], leftEdge))) + { + return false; + } + } + + // No collisions found with the rectangle. Success! + return true; + } + + /// + /// Attempt to fit the largest rectangle possible within the geometry. + /// + /// The boundary geometry. + /// The center point for the rectangle. + /// The rotation, in radians, of the rectangle. + /// The smallest allowed area. + /// Returns the width of the rectangle. + /// Returns the height of the rectangle. + /// + /// True if a rectangle with an area greater than or equal to minArea was able to be fit + /// within the geometry at centerPoint. + /// + private bool TryFixMaximumRectangle( + Edge[] geometryEdges, + Vector2 centerPoint, + float angleRadians, + float minArea, + out float width, + out float height) + { + width = 0.0f; + height = 0.0f; + + // Find the collision points with the geometry + if (!FindSurroundingCollisionPoints(geometryEdges, centerPoint, angleRadians, + out Vector2 topCollisionPoint, out Vector2 bottomCollisionPoint, out Vector2 leftCollisionPoint, out Vector2 rightCollisionPoint)) + { + return false; + } + + // Start by calculating max width and height by ray-casting a cross from the point at the given angle + // and taking the shortest leg of each ray. Width is the longest. + float verticalMinDistanceToEdge = Mathf.Min( + Vector2.Distance(centerPoint, topCollisionPoint), + Vector2.Distance(centerPoint, bottomCollisionPoint)); + + float horizontalMinDistanceToEdge = Mathf.Min( + Vector2.Distance(centerPoint, leftCollisionPoint), + Vector2.Distance(centerPoint, rightCollisionPoint)); + + // Width is the largest of the possible dimensions + float maxWidth = Math.Max(verticalMinDistanceToEdge, horizontalMinDistanceToEdge) * 2.0f; + float maxHeight = Math.Min(verticalMinDistanceToEdge, horizontalMinDistanceToEdge) * 2.0f; + + float aspectRatio = 0.0f; + + // For each aspect ratio we do a binary search to find the maximum rectangle that fits, + // though once we start increasing our area by minimumHeightGain we call it good enough. + for (int i = 0; i < aspectRatios.Length; i++) + { + // The height is limited by the width. If a height would make our width exceed maxWidth, it can't be used + float searchHeightUpperBound = Mathf.Max(maxHeight, maxWidth / aspectRatios[i]); + + // Set to the min height that will out perform our previous area at the given aspect ratio. This is 0 the first time. + // Derived from biggestAreaSoFar=height*(height*aspectRatio) + float searchHeightLowerBound = Mathf.Sqrt(Mathf.Max((width * height), minArea) / aspectRatios[i]); + + // If the lowest value needed to outperform the previous best is greater than our max, + // this aspect ratio can't outperform what we've already calculated. + if ((searchHeightLowerBound > searchHeightUpperBound) || + (searchHeightLowerBound * aspectRatios[i] > maxWidth)) + { + continue; + } + + float currentTestingHeight = Mathf.Max(searchHeightLowerBound, maxHeight * 0.5f); + + + // Perform the binary search until continuing to search will not give us a significant win. + do + { + if (CheckRectangleFit(geometryEdges, + centerPoint, + angleRadians, + aspectRatios[i] * currentTestingHeight, + currentTestingHeight)) + { + // Binary search up-ward + // If the rectangle will fit, increase the lower bounds of our binary search + searchHeightLowerBound = currentTestingHeight; + + width = currentTestingHeight * aspectRatios[i]; + height = currentTestingHeight; + aspectRatio = aspectRatios[i]; + currentTestingHeight = (searchHeightUpperBound + currentTestingHeight) * 0.5f; + } + else + { + // If the rectangle won't fit, update our upper bound and lower our binary search + searchHeightUpperBound = currentTestingHeight; + currentTestingHeight = (currentTestingHeight + searchHeightLowerBound) * 0.5f; + } + } + while ((searchHeightUpperBound - searchHeightLowerBound) > minimumHeightGain); + } + + return (aspectRatio > 0.0f); + } + } +} diff --git a/Definitions/BoundarySystem/InscribedRectangle.cs.meta b/Definitions/BoundarySystem/InscribedRectangle.cs.meta new file mode 100644 index 000000000..ed149101b --- /dev/null +++ b/Definitions/BoundarySystem/InscribedRectangle.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81ca6a940de645d28b9c0f4e25046a27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs b/Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs new file mode 100644 index 000000000..bb04072f9 --- /dev/null +++ b/Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs @@ -0,0 +1,199 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.BoundarySystem +{ + /// + /// Configuration profile settings for setting up boundary visualizations. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Boundary Visualization Profile", fileName = "MixedRealityBoundaryVisualizationProfile", order = (int)CreateProfileMenuItemIndices.BoundaryVisualization)] + public class MixedRealityBoundaryVisualizationProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("The approximate height of the play space, in meters.")] + private float boundaryHeight = 3.0f; + + /// + /// The developer defined height of the boundary, in meters. + /// + /// + /// The BoundaryHeight property is used to create a three dimensional volume for the play space. + /// + public float BoundaryHeight => boundaryHeight; + + #region Floor settings + + [SerializeField] + [Tooltip("Should the floor be displayed in the scene?")] + private bool showFloor = true; + + /// + /// Should the boundary system display the floor? + /// + public bool ShowFloor => showFloor; + + // todo: consider allowing optional custom prefab + + [SerializeField] + [Tooltip("The material to use when displaying the floor.")] + private Material floorMaterial = null; + + /// + /// The material to use for the floor when created by the boundary system. + /// + public Material FloorMaterial => floorMaterial; + + [PhysicsLayer] + [SerializeField] + [Tooltip("The physics layer to assign to the generated floor.")] + private int floorPhysicsLayer = 0; + + /// + /// The physics layer to assign to the generated floor. + /// + public int FloorPhysicsLayer => floorPhysicsLayer; + + [SerializeField] + [Tooltip("The dimensions of the floor, in meters.")] + private Vector2 floorScale = new Vector2(10f, 10f); + + /// + /// The size at which to display the rectangular floor plane . + /// + public Vector2 FloorScale => floorScale; + + #endregion Floor settings + + #region Play area settings + + [SerializeField] + [Tooltip("Should the play area be displayed in the scene?")] + private bool showPlayArea = true; + + /// + /// Should the boundary system display the play area? + /// + public bool ShowPlayArea => showPlayArea; + + [SerializeField] + [Tooltip("The material to use when displaying the play area.")] + private Material playAreaMaterial = null; + + /// + /// The material to use for the rectangular play area . + /// + public Material PlayAreaMaterial => playAreaMaterial; + + [PhysicsLayer] + [SerializeField] + [Tooltip("The physics layer to assign to the generated play area.")] + private int playAreaPhysicsLayer = 2; + + /// + /// The physics layer to assign to the generated play area. + /// + public int PlayAreaPhysicsLayer => playAreaPhysicsLayer; + + #endregion Play area settings + + #region Tracked area settings + + [SerializeField] + [Tooltip("Should the tracked area be displayed in the scene?")] + private bool showTrackedArea = true; + + /// + /// Should the boundary system display the tracked area? + /// + public bool ShowTrackedArea => showTrackedArea; + + [SerializeField] + [Tooltip("The material to use when displaying the tracked area.")] + private Material trackedAreaMaterial = null; + + /// + /// The material to use for the boundary geometry . + /// + public Material TrackedAreaMaterial => trackedAreaMaterial; + + [PhysicsLayer] + [SerializeField] + [Tooltip("The physics layer to assign to the generated tracked area.")] + private int trackedAreaPhysicsLayer = 2; + + /// + /// The physics layer to assign to the generated tracked area. + /// + public int TrackedAreaPhysicsLayer => trackedAreaPhysicsLayer; + + #endregion Tracked area settings + + #region Boundary wall settings + + [SerializeField] + [Tooltip("Should the boundary walls be displayed in the scene?")] + private bool showBoundaryWalls = false; + + /// + /// Should the boundary system display the boundary geometry walls? + /// + public bool ShowBoundaryWalls => showBoundaryWalls; + + [SerializeField] + [Tooltip("The material to use when displaying the boundary walls.")] + private Material boundaryWallMaterial = null; + + /// + /// The material to use for displaying the boundary geometry walls. + /// + public Material BoundaryWallMaterial => boundaryWallMaterial; + + [PhysicsLayer] + [SerializeField] + [Tooltip("The physics layer to assign to the generated boundary walls.")] + private int boundaryWallsPhysicsLayer = 2; + + /// + /// The physics layer to assign to the generated boundary walls. + /// + public int BoundaryWallsPhysicsLayer => boundaryWallsPhysicsLayer; + + #endregion Boundary wall settings + + #region Boundary ceiling settings + + [SerializeField] + [Tooltip("Should the boundary ceiling be displayed in the scene?")] + private bool showBoundaryCeiling = false; + + /// + /// Should the boundary system display the boundary ceiling? + /// + public bool ShowBoundaryCeiling => showBoundaryCeiling; + + [SerializeField] + [Tooltip("The material to use when displaying the boundary ceiling.")] + private Material boundaryCeilingMaterial = null; + + /// + /// The material to use for displaying the boundary ceiling. + /// + public Material BoundaryCeilingMaterial => boundaryCeilingMaterial; + + [PhysicsLayer] + [SerializeField] + [Tooltip("The physics layer to assign to the generated boundary ceiling.")] + private int ceilingPhysicsLayer = 2; + + /// + /// The physics layer to assign to the generated boundary ceiling. + /// + public int CeilingPhysicsLayer => ceilingPhysicsLayer; + + #endregion Boundary ceiling settings + } +} diff --git a/Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs.meta b/Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs.meta new file mode 100644 index 000000000..c93d3a2b8 --- /dev/null +++ b/Definitions/BoundarySystem/MixedRealityBoundaryVisualizationProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e50d0c2910ab4e8a9d14709c5f17506e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers.meta b/Definitions/Controllers.meta new file mode 100644 index 000000000..e9a0cfc21 --- /dev/null +++ b/Definitions/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f483335f944a4ffc908147363a8aebfa +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs b/Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs new file mode 100644 index 000000000..a2c776896 --- /dev/null +++ b/Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs @@ -0,0 +1,11 @@ +using XRTK.Definitions; + +namespace XRTK.Providers.Controllers +{ + /// + /// Provides additional information about the controller data provider other than the input mapping. + /// + public abstract class BaseMixedRealityControllerDataProviderProfile : BaseMixedRealityProfile + { + } +} \ No newline at end of file diff --git a/Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs.meta b/Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs.meta new file mode 100644 index 000000000..95f51c9e7 --- /dev/null +++ b/Definitions/Controllers/BaseMixedRealityControllerDataProviderProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 650c72bc944045f399dafa4ef9f43918 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs b/Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs new file mode 100644 index 000000000..db592da3f --- /dev/null +++ b/Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs @@ -0,0 +1,75 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.Devices; + +namespace XRTK.Providers.Controllers +{ + /// + /// Base Controller Mapping profile. + /// + public abstract class BaseMixedRealityControllerMappingProfile : BaseMixedRealityProfile + { + [SerializeField] + private bool hasSetupDefaults = false; + + /// + /// Has this controller profile setup the default interactions? + /// + protected bool HasSetupDefaults => hasSetupDefaults; + + /// + /// The supported controller type for this profile. + /// + public virtual SupportedControllerType ControllerType => SupportedControllerType.GenericUnity; + + [SerializeField] + private MixedRealityControllerMapping[] controllerMappings; + + /// + /// The controller mappings for this device. + /// + public MixedRealityControllerMapping[] ControllerMappings + { + get => controllerMappings; + protected set => controllerMappings = value; + } + + /// + /// The partial path to the controller's texture. This path is meaningless outside of the context of the editor. + /// + /// + /// The path only needs to include the name of the controller. + /// The file name should be formatted as:XRTK/StandardAssets/Textures/{ControllerName}_{handedness}_{theme}_{scaled}.png + /// scaled suffix is optional. + /// Custom file paths should never call the base property. + /// + public virtual string TexturePath + { + get + { + // this path is meaningless outside of the editor. +#if UNITY_EDITOR + return $"{Utilities.Editor.MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}/StandardAssets/Textures/"; +#else + return string.Empty; +#endif + } + } + + protected virtual void Awake() + { + if (!hasSetupDefaults) + { + for (int i = 0; i < controllerMappings?.Length; i++) + { + controllerMappings[i].SetDefaultInteractionMapping(); + } + + hasSetupDefaults = true; + } + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs.meta b/Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs.meta new file mode 100644 index 000000000..7c88af3f7 --- /dev/null +++ b/Definitions/Controllers/BaseMixedRealityControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d555fd45e4924c1089bee088bca1867c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs b/Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs new file mode 100644 index 000000000..9bf2b0aa5 --- /dev/null +++ b/Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions.Devices; + +namespace XRTK.Providers.Controllers +{ + // No Scriptable Object Menu constructor attributes here, as this class is meant to be overwritten. + + /// + /// Custom Mixed Reality Controller class to inherit from to enable custom profile support in mapping profile. + /// + public class CustomMixedRealityControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.None; + } +} \ No newline at end of file diff --git a/Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs.meta b/Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs.meta new file mode 100644 index 000000000..646d9f248 --- /dev/null +++ b/Definitions/Controllers/CustomMixedRealityControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea757b5810d043b79d9654b2c74f15e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs b/Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs new file mode 100644 index 000000000..3b1afa0e7 --- /dev/null +++ b/Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Data Providers Profiles", fileName = "MixedRealityControllerDataModelsProfile", order = (int)CreateProfileMenuItemIndices.ControllerDataProviders)] + public class MixedRealityControllerDataProvidersProfile : BaseMixedRealityProfile + { + [SerializeField] + private ControllerDataProviderConfiguration[] registeredControllerDataProviders = new ControllerDataProviderConfiguration[0]; + + /// + /// The currently registered controller data providers for this input system. + /// + public ControllerDataProviderConfiguration[] RegisteredControllerDataProviders => registeredControllerDataProviders; + } +} \ No newline at end of file diff --git a/Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs.meta b/Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs.meta new file mode 100644 index 000000000..066a1b7d2 --- /dev/null +++ b/Definitions/Controllers/MixedRealityControllerDataProvidersProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d628c3f3d8034aa7a4c414bf96227e1a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/MixedRealityControllerMappingProfiles.cs b/Definitions/Controllers/MixedRealityControllerMappingProfiles.cs new file mode 100644 index 000000000..fb7523793 --- /dev/null +++ b/Definitions/Controllers/MixedRealityControllerMappingProfiles.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mapping Profiles", fileName = "MixedRealityControllerMappingProfiles", order = (int)CreateProfileMenuItemIndices.ControllerMappings)] + public class MixedRealityControllerMappingProfiles : BaseMixedRealityProfile + { + [SerializeField] + private List controllerMappingProfiles = new List(); + + /// + /// A list of all the Controller Mapping Profiles. + /// + public List ControllerMappingProfiles => controllerMappingProfiles; + + /// + /// The list of controller mappings across all . + /// + public List MixedRealityControllerMappings + { + get + { + var mappings = new List(); + + if (controllerMappingProfiles != null) + { + for (int i = 0; i < controllerMappingProfiles.Count; i++) + { + if (controllerMappingProfiles[i] != null) + { + for (int j = 0; j < controllerMappingProfiles[i].ControllerMappings?.Length; j++) + { + + mappings.Add(controllerMappingProfiles[i].ControllerMappings[j]); + } + } + } + } + + return mappings; + } + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/MixedRealityControllerMappingProfiles.cs.meta b/Definitions/Controllers/MixedRealityControllerMappingProfiles.cs.meta new file mode 100644 index 000000000..1087a6ddc --- /dev/null +++ b/Definitions/Controllers/MixedRealityControllerMappingProfiles.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a77a13b8e0bc48acaa8594833e47d96c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs b/Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs new file mode 100644 index 000000000..b1ae0fe2c --- /dev/null +++ b/Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs @@ -0,0 +1,190 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; + +namespace XRTK.Providers.Controllers +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Visualization Profile", fileName = "MixedRealityControllerVisualizationProfile", order = (int)CreateProfileMenuItemIndices.ControllerVisualization)] + public class MixedRealityControllerVisualizationProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("Enable and configure the controller rendering of the Motion Controllers on Startup.")] + private bool renderMotionControllers = false; + + /// + /// Enable and configure the controller rendering of the Motion Controllers on Startup. + /// + public bool RenderMotionControllers + { + get => renderMotionControllers; + private set => renderMotionControllers = value; + } + + [SerializeField] + [Implements(typeof(IMixedRealityControllerVisualizer), TypeGrouping.ByNamespaceFlat)] + [Tooltip("The concrete Controller Visualizer component to use on the rendered controller model.")] + private SystemType controllerVisualizationType; + + /// + /// The concrete Controller Visualizer component to use on the rendered controller model + /// + public SystemType ControllerVisualizationType + { + get => controllerVisualizationType; + private set => controllerVisualizationType = value; + } + + [SerializeField] + [Tooltip("Use the platform SDK to load the default controller models.")] + private bool useDefaultModels = false; + + /// + /// User the controller model loader provided by the SDK, or provide override models. + /// + public bool UseDefaultModels + { + get => useDefaultModels; + private set => useDefaultModels = value; + } + + [SerializeField] + [Tooltip("Override Left Controller Model.")] + private GameObject globalLeftHandModel; + + /// + /// The Default controller model when there is no specific controller model for the Left hand or when no hand is specified (Handedness = none) + /// + /// + /// If the default model for the left hand controller can not be found, the controller will fall back and use this for visualization. + /// + public GameObject GlobalLeftHandModel + { + get => globalLeftHandModel; + private set => globalLeftHandModel = value; + } + + [SerializeField] + [Tooltip("Override Right Controller Model.\nNote: If the default model is not found, the fallback is the global right hand model.")] + private GameObject globalRightHandModel; + + /// + /// The Default controller model when there is no specific controller model for the Right hand. + /// + /// + /// If the default model for the right hand controller can not be found, the controller will fall back and use this for visualization. + /// + public GameObject GlobalRightHandModel + { + get => globalRightHandModel; + private set => globalRightHandModel = value; + } + + [SerializeField] + private MixedRealityControllerVisualizationSetting[] controllerVisualizationSettings = new MixedRealityControllerVisualizationSetting[0]; + + /// + /// The current list of controller visualization settings. + /// + public MixedRealityControllerVisualizationSetting[] ControllerVisualizationSettings => controllerVisualizationSettings; + + /// + /// Gets the override model for a specific controller type and hand + /// + /// The type of controller to query for + /// The specific hand assigned to the controller + public GameObject GetControllerModelOverride(Type controllerType, Handedness hand) + { + for (int i = 0; i < controllerVisualizationSettings.Length; i++) + { + if (!controllerVisualizationSettings[i].UseDefaultModel && + controllerVisualizationSettings[i].ControllerType != null && + controllerVisualizationSettings[i].ControllerType.Type == controllerType && + (controllerVisualizationSettings[i].Handedness == hand || controllerVisualizationSettings[i].Handedness == Handedness.Both)) + { + return controllerVisualizationSettings[i].OverrideControllerModel; + } + } + + return null; + } + + /// + /// Gets the pose action for this controller to use when synchronizing the position of the controller's visualization. + /// + /// The type of controller to query for. + /// The specific hand assigned to the controller. + /// The to use for tracking pose data. + /// True, if the controller should use the pose action, otherwise false. + public bool TryGetControllerPose(Type controllerType, Handedness hand, out MixedRealityInputAction poseAction) + { + poseAction = MixedRealityInputAction.None; + + for (int i = 0; i < controllerVisualizationSettings.Length; i++) + { + if (controllerVisualizationSettings[i].ControllerType != null && + controllerVisualizationSettings[i].ControllerType.Type == controllerType && + (controllerVisualizationSettings[i].Handedness == hand || controllerVisualizationSettings[i].Handedness == Handedness.Both) && + controllerVisualizationSettings[i].PoseAction != MixedRealityInputAction.None) + { + poseAction = controllerVisualizationSettings[i].PoseAction; + return true; + } + } + + return false; + } + + /// + /// Gets the alternate pose action for this controller variant. + /// + /// The type of controller to query for + /// The specific hand assigned to the controller + /// The alternate to use + /// True, if a valid alternative is found. + public bool TryGetControllerPoseOverride(Type controllerType, Handedness hand, out MixedRealityInputAction alternatePoseAction) + { + alternatePoseAction = MixedRealityInputAction.None; + + for (int i = 0; i < controllerVisualizationSettings.Length; i++) + { + if (controllerVisualizationSettings[i].ControllerType != null && + controllerVisualizationSettings[i].ControllerType.Type == controllerType && + (controllerVisualizationSettings[i].Handedness == hand || controllerVisualizationSettings[i].Handedness == Handedness.Both) && + controllerVisualizationSettings[i].AlternatePoseAction != MixedRealityInputAction.None) + { + alternatePoseAction = controllerVisualizationSettings[i].AlternatePoseAction; + return true; + } + } + + return false; + } + + /// + /// Gets the override type for a specific controller type and hand. + /// + /// The type of controller to query for + /// The specific hand assigned to the controller + public SystemType GetControllerVisualizationTypeOverride(Type controllerType, Handedness hand) + { + for (int i = 0; i < controllerVisualizationSettings.Length; i++) + { + if (controllerVisualizationSettings[i].ControllerType != null && + controllerVisualizationSettings[i].ControllerType.Type == controllerType && + (controllerVisualizationSettings[i].Handedness == hand || controllerVisualizationSettings[i].Handedness == Handedness.Both)) + { + return controllerVisualizationSettings[i].ControllerVisualizationType; + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs.meta b/Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs.meta new file mode 100644 index 000000000..9f230c3bd --- /dev/null +++ b/Definitions/Controllers/MixedRealityControllerVisualizationProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e889ee36d1db42b482979f81f550d3b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/OpenVR.meta b/Definitions/Controllers/OpenVR.meta new file mode 100644 index 000000000..9ca63eaa2 --- /dev/null +++ b/Definitions/Controllers/OpenVR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 105b420a0cbb493bb706eb6d7e66781f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs b/Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs new file mode 100644 index 000000000..5970c944e --- /dev/null +++ b/Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers.OpenVR +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Generic OpenVR Controller Mapping Profile", fileName = "GenericOpenVRControllerMappingProfile")] + public class GenericOpenVRControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.GenericOpenVR; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Generic OpenVR Controller Left", typeof(GenericOpenVRController), Handedness.Left, true), + new MixedRealityControllerMapping("Generic OpenVR Controller Right", typeof(GenericOpenVRController), Handedness.Right, true), + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs.meta b/Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs.meta new file mode 100644 index 000000000..de9bea94a --- /dev/null +++ b/Definitions/Controllers/OpenVR/GenericOpenVRControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca432493baa34f69a0297ba33d31ab23 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs b/Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs new file mode 100644 index 000000000..e9e158438 --- /dev/null +++ b/Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; + +namespace XRTK.Providers.Controllers.OpenVR +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Oculus Remote Controller Mapping Profile", fileName = "OculusRemoteControllerMappingProfile")] + public class OculusRemoteControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.OculusRemote; + + /// + public override string TexturePath => $"{base.TexturePath}OculusRemoteController"; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Oculus Remote Controller", typeof(OculusRemoteController)), + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs.meta b/Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs.meta new file mode 100644 index 000000000..1579827e0 --- /dev/null +++ b/Definitions/Controllers/OpenVR/OculusRemoteControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f17f827e08945279699139b64b44d68 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs b/Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs new file mode 100644 index 000000000..8cf45222b --- /dev/null +++ b/Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers.OpenVR +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Oculus Touch Controller Mapping Profile", fileName = "OculusTouchControllerMappingProfile")] + public class OculusTouchControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.OculusTouch; + + /// + public override string TexturePath => $"{base.TexturePath}OculusControllersTouch"; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Oculus Touch Controller Left", typeof(OculusTouchController), Handedness.Left), + new MixedRealityControllerMapping("Oculus Touch Controller Right", typeof(OculusTouchController), Handedness.Right), + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs.meta b/Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs.meta new file mode 100644 index 000000000..cb8f6c7ef --- /dev/null +++ b/Definitions/Controllers/OpenVR/OculusTouchControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ae182fe909d4e03ab1523c0c74b17f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs b/Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs new file mode 100644 index 000000000..0d0c0dbb2 --- /dev/null +++ b/Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers.OpenVR +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Vive Wand Controller Mapping Profile", fileName = "ViveWandControllerMappingProfile")] + public class ViveWandControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.ViveWand; + + /// + public override string TexturePath => $"{base.TexturePath}ViveWandController"; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Vive Wand Controller Left", typeof(ViveWandController), Handedness.Left), + new MixedRealityControllerMapping("Vive Wand Controller Right", typeof(ViveWandController), Handedness.Right), + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs.meta b/Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs.meta new file mode 100644 index 000000000..35ff622d9 --- /dev/null +++ b/Definitions/Controllers/OpenVR/ViveWandControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dd95b05f91204700a86b9a6a86856064 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/UnityInput.meta b/Definitions/Controllers/UnityInput.meta new file mode 100644 index 000000000..81ae3015a --- /dev/null +++ b/Definitions/Controllers/UnityInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 05e54248869e4cdda7a418817acdd9ae +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs b/Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs new file mode 100644 index 000000000..3346358f9 --- /dev/null +++ b/Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Generic Unity Controller Mapping Profile", fileName = "GenericUnityControllerMappingProfile")] + public class GenericUnityControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.GenericUnity; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Generic Unity Controller", typeof(GenericJoystickController), Handedness.None, true), + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs.meta b/Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs.meta new file mode 100644 index 000000000..67f7f763a --- /dev/null +++ b/Definitions/Controllers/UnityInput/GenericUnityControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61724940349b4ef2961efaab3ed51cb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs b/Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs new file mode 100644 index 000000000..560996d57 --- /dev/null +++ b/Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Mouse Controller Mapping Profile", fileName = "MouseControllerMappingProfile")] + public class MouseControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.Mouse; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Mouse Input", typeof(MouseController), Handedness.Any) + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs.meta b/Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs.meta new file mode 100644 index 000000000..3ac5ccb39 --- /dev/null +++ b/Definitions/Controllers/UnityInput/MouseControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a4b26248d1594598be5962b186e4d395 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs b/Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs new file mode 100644 index 000000000..7b9ffba0f --- /dev/null +++ b/Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Touch Screen Mapping Profile", fileName = "TouchScreenMappingProfile")] + public class TouchScreenControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.TouchScreen; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Touch Screen Input", typeof(UnityTouchController), Handedness.Any) + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs.meta b/Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs.meta new file mode 100644 index 000000000..5b0a2e574 --- /dev/null +++ b/Definitions/Controllers/UnityInput/TouchScreenControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dabbad6e31fe49b2882850ce3ee225c8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs b/Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs new file mode 100644 index 000000000..9533c9edf --- /dev/null +++ b/Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Controller Mappings/Xbox Controller Mapping Profile", fileName = "XboxControllerMappingProfile")] + public class XboxControllerMappingProfile : BaseMixedRealityControllerMappingProfile + { + /// + public override SupportedControllerType ControllerType => SupportedControllerType.Xbox; + + /// + public override string TexturePath => $"{base.TexturePath}XboxController"; + + protected override void Awake() + { + if (!HasSetupDefaults) + { + ControllerMappings = new[] + { + new MixedRealityControllerMapping("Xbox Controller", typeof(XboxController)) + }; + } + + base.Awake(); + } + } +} \ No newline at end of file diff --git a/Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs.meta b/Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs.meta new file mode 100644 index 000000000..97f38da41 --- /dev/null +++ b/Definitions/Controllers/UnityInput/XboxControllerMappingProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 65b5b96daf57415a8080c7ef4d929e15 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DataModelConfiguration.cs b/Definitions/DataModelConfiguration.cs new file mode 100644 index 000000000..815a8023f --- /dev/null +++ b/Definitions/DataModelConfiguration.cs @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces; + +namespace XRTK.Definitions +{ + [Serializable] + public struct DataModelConfiguration + { + /// + /// Constructor. + /// + /// The concrete type for the system, feature or manager. + /// The simple, human readable name for the system, feature, or manager. + /// The priority this system, feature, or manager will be initialized in. + /// The runtime platform(s) to run this system, feature, or manager on. + /// The configuration profile for the system, feature, or manager. + public DataModelConfiguration(SystemType dataModelType, string dataModelName, uint priority, SupportedPlatforms runtimePlatform, BaseMixedRealityProfile configurationProfile) + { + this.dataModelType = dataModelType; + this.dataModelName = dataModelName; + this.priority = priority; + this.runtimePlatform = runtimePlatform; + this.configurationProfile = configurationProfile; + } + + [SerializeField] + [Implements(typeof(IMixedRealityDataProvider), TypeGrouping.ByNamespaceFlat)] + private SystemType dataModelType; + + /// + /// The concrete type for the system, feature or manager. + /// + public SystemType DataModelType => dataModelType; + + [SerializeField] + private string dataModelName; + + /// + /// The simple, human readable name for the system, feature, or manager. + /// + public string DataModelName => dataModelName; + + [SerializeField] + private uint priority; + + /// + /// The priority this system, feature, or manager will be initialized in. + /// + public uint Priority => priority; + + [EnumFlags] + [SerializeField] + private SupportedPlatforms runtimePlatform; + + /// + /// The runtime platform(s) to run this system, feature, or manager on. + /// + public SupportedPlatforms RuntimePlatform => runtimePlatform; + + [SerializeField] + private BaseMixedRealityProfile configurationProfile; + + /// + /// The configuration profile for the system, feature, or manager. + /// + public BaseMixedRealityProfile ConfigurationProfile => configurationProfile; + } +} \ No newline at end of file diff --git a/Definitions/DataModelConfiguration.cs.meta b/Definitions/DataModelConfiguration.cs.meta new file mode 100644 index 000000000..9b7c33972 --- /dev/null +++ b/Definitions/DataModelConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff55faf0294e495e9f08c0b419ad78e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices.meta b/Definitions/Devices.meta new file mode 100644 index 000000000..ba5a383df --- /dev/null +++ b/Definitions/Devices.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 35c76dded9fc441a8572431a00bd3981 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/ControllerMappingLibrary.cs b/Definitions/Devices/ControllerMappingLibrary.cs new file mode 100644 index 000000000..c0b5c44bf --- /dev/null +++ b/Definitions/Devices/ControllerMappingLibrary.cs @@ -0,0 +1,322 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_EDITOR +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Providers.Controllers; +using XRTK.Services; +using XRTK.Utilities.Editor; +#endif + +namespace XRTK.Definitions.Devices +{ + /// + /// Helper utility to manage all the required Axis configuration for platforms, where required + /// + public static class ControllerMappingLibrary + { + #region Constants + + /// + /// Mouse: Position Horizontal Movement + /// HTC Vive Controller: Left Controller Trackpad (2) Horizontal Movement + /// Oculus Touch Controller: Axis2D.PrimaryThumbstick Horizontal Movement + /// Valve Knuckles Controller: Left Controller Trackpad Horizontal Movement + /// Windows Mixed Reality Motion Controller: Left Thumbstick Horizontal Movement + /// Xbox Controller: Left Thumbstick Horizontal Movement + /// + public const string AXIS_1 = "AXIS_1"; + + /// + /// Mouse: Position Vertical Movement + /// HTC Vive Controller: Left Controller Trackpad (2) Vertical Movement + /// Oculus Touch Controller: Axis2D.PrimaryThumbstick Vertical Movement + /// Valve Knuckles Controller: Left Controller Trackpad Vertical Movement + /// Windows Mixed Reality Motion Controller: Left Thumbstick Vertical Movement + /// Xbox Controller: Left Thumbstick Vertical Movement + /// + public const string AXIS_2 = "AXIS_2"; + + /// + /// Mouse: Scroll + /// Xbox Controller: Shared Trigger + /// + public const string AXIS_3 = "AXIS_3"; + + /// + /// HTC Vive Controller: Right Controller Trackpad (2) Horizontal Movement + /// Oculus Touch Controller: Axis2D.SecondaryThumbstick Horizontal Movement + /// Valve Knuckles Controller: Right Controller Trackpad Horizontal Movement + /// Windows Mixed Reality Motion Controller: Right Thumbstick Horizontal Movement + /// Xbox Controller: Right Thumbstick Vertical Movement + /// + public const string AXIS_4 = "AXIS_4"; + + /// + /// HTC Vive Controller: Right Controller Trackpad (2) Vertical Movement + /// Oculus Touch Controller: Axis2D.SecondaryThumbstick Vertical Movement + /// Valve Knuckles Controller: Right Controller Trackpad Vertical Movement + /// Windows Mixed Reality Motion Controller: Right Thumbstick Vertical Movement + /// Xbox Controller: Right Thumbstick Vertical Movement + /// + public const string AXIS_5 = "AXIS_5"; + + /// + /// None + /// + public const string AXIS_6 = "AXIS_6"; + + /// + /// Xbox Controller: D-Pad Horizontal + /// + public const string AXIS_7 = "AXIS_7"; + + /// + /// Xbox Controller: D-Pad Vertical + /// + public const string AXIS_8 = "AXIS_8"; + + /// + /// HTC Vive Controller: Left Controller Trigger (7) Squeeze + /// Oculus Touch Controller: Axis1D.PrimaryIndexTrigger Squeeze + /// Valve Knuckles Controller: Left Controller Trigger Squeeze + /// Windows Mixed Reality Motion Controller: Left Trigger Squeeze + /// + public const string AXIS_9 = "AXIS_9"; + + /// + /// HTC Vive Controller: Right Controller Trigger (7) Squeeze + /// Oculus Touch Controller: Axis1D.SecondaryIndexTrigger Movement Squeeze + /// Valve Knuckles Controller: Right Controller Trigger Squeeze + /// Windows Mixed Reality Motion Controller: Right Trigger Squeeze + /// + public const string AXIS_10 = "AXIS_10"; + + /// + /// HTC Vive Controller: Left Controller Grip Button (8) Squeeze + /// Oculus Touch Controller: Axis1D.PrimaryHandTrigger Squeeze + /// Valve Knuckles Controller: Left Controller Grip Average Squeeze + /// Windows Mixed Reality Motion Controller: Left Grip Squeeze + /// + public const string AXIS_11 = "AXIS_11"; + + /// + /// HTC Vive Controller: Right Controller Grip Button (8) Squeeze + /// Oculus Touch Controller: Axis1D.SecondaryHandTrigger Squeeze + /// Valve Knuckles Controller: Right Controller Grip Average Squeeze + /// Windows Mixed Reality Motion Controller: Right Grip Squeeze + /// + public const string AXIS_12 = "AXIS_12"; + + /// + /// Oculus Touch Controller: Axis1D.PrimaryIndexTrigger Near Touch + /// + public const string AXIS_13 = "AXIS_13"; + + /// + /// Oculus Touch Controller: Axis1D.SecondaryIndexTrigger Near Touch + /// + public const string AXIS_14 = "AXIS_14"; + + /// + /// Oculus Touch Controller: Touch.PrimaryThumbRest Near Touch + /// + public const string AXIS_15 = "AXIS_15"; + + /// + /// Oculus Touch Controller: Button.SecondaryThumbstick Near Touch + /// + public const string AXIS_16 = "AXIS_16"; + + /// + /// Windows Mixed Reality Motion Controller: Left Touchpad Horizontal Movement + /// + public const string AXIS_17 = "AXIS_17"; + + /// + /// Windows Mixed Reality Motion Controller: Left Touchpad Vertical Movement + /// + public const string AXIS_18 = "AXIS_18"; + + /// + /// Windows Mixed Reality Motion Controller: Right Touchpad Horizontal Movement + /// + public const string AXIS_19 = "AXIS_19"; + + /// + /// Windows Mixed Reality Motion Controller: Right Touchpad Vertical Movement + /// Valve Knuckles Controller: Left Controller Index Finger Cap Sensor + /// + public const string AXIS_20 = "AXIS_20"; + + /// + /// Valve Knuckles Controller: Right Controller Index Finger Cap Sensor + /// + public const string AXIS_21 = "AXIS_21"; + + /// + /// Valve Knuckles Controller: Left Controller Middle Finger Cap Sensor + /// + public const string AXIS_22 = "AXIS_22"; + + /// + /// Valve Knuckles Controller: Right Controller Middle Finger Cap Sensor + /// + public const string AXIS_23 = "AXIS_23"; + + /// + /// Valve Knuckles Controller: Left Controller Ring Finger Cap Sensor + /// + public const string AXIS_24 = "AXIS_24"; + + /// + /// Valve Knuckles Controller: Right Controller Ring Finger Cap Sensor + /// + public const string AXIS_25 = "AXIS_25"; + + /// + /// Valve Knuckles Controller: Left Controller Pinky Finger Cap Sensor + /// + public const string AXIS_26 = "AXIS_26"; + + /// + /// Valve Knuckles Controller: Right Controller Pinky Finger Cap Sensor + /// + public const string AXIS_27 = "AXIS_27"; + + #endregion Constants + +#if UNITY_EDITOR + + #region InputAxisConfig + + /// + /// Get the InputManagerAxis data needed to configure the Input Mappings for a controller + /// + /// + public static InputManagerAxis[] UnityInputManagerAxes => new[] + { + new InputManagerAxis { Name = AXIS_1, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 1 }, + new InputManagerAxis { Name = AXIS_2, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 2 }, + new InputManagerAxis { Name = AXIS_3, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 3 }, + new InputManagerAxis { Name = AXIS_4, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 4 }, + new InputManagerAxis { Name = AXIS_5, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 5 }, + new InputManagerAxis { Name = AXIS_6, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 6 }, + new InputManagerAxis { Name = AXIS_7, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 7 }, + new InputManagerAxis { Name = AXIS_8, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 8 }, + new InputManagerAxis { Name = AXIS_9, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 9 }, + new InputManagerAxis { Name = AXIS_10, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 10 }, + new InputManagerAxis { Name = AXIS_11, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 11 }, + new InputManagerAxis { Name = AXIS_12, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 12 }, + new InputManagerAxis { Name = AXIS_13, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 13 }, + new InputManagerAxis { Name = AXIS_14, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 14 }, + new InputManagerAxis { Name = AXIS_15, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 15 }, + new InputManagerAxis { Name = AXIS_16, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 16 }, + new InputManagerAxis { Name = AXIS_17, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 17 }, + new InputManagerAxis { Name = AXIS_18, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 18 }, + new InputManagerAxis { Name = AXIS_19, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 19 }, + new InputManagerAxis { Name = AXIS_20, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 20 }, + new InputManagerAxis { Name = AXIS_21, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 21 }, + new InputManagerAxis { Name = AXIS_22, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 22 }, + new InputManagerAxis { Name = AXIS_23, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 23 }, + new InputManagerAxis { Name = AXIS_24, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 24 }, + new InputManagerAxis { Name = AXIS_25, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 25 }, + new InputManagerAxis { Name = AXIS_26, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 26 }, + new InputManagerAxis { Name = AXIS_27, Dead = 0.001f, Sensitivity = 1, Invert = false, Type = InputManagerAxisType.JoystickAxis, Axis = 27 } + }; + + #endregion InputAxisConfig + + #region Controller Texture Loading + + private static readonly Dictionary, Texture2D> CachedTextures = new Dictionary, Texture2D>(); + + /// + /// Gets a texture for the based on a list of the active . + /// + /// + /// + /// The texture for the controller type, if none found then a generic texture is returned. + public static Texture2D GetControllerTexture(SupportedControllerType controllerType, Handedness handedness) + { + return GetControllerTextureCached(controllerType, handedness); + } + + /// + /// Gets a scaled texture for the based on a list of the active . + /// + /// + /// + /// The scaled texture for the controller type, if none found then a generic texture is returned. + public static Texture2D GetControllerTextureScaled(SupportedControllerType controllerType, Handedness handedness) + { + return GetControllerTextureCached(controllerType, handedness, true); + } + + private static Texture2D GetControllerTextureCached(SupportedControllerType controllerType, Handedness handedness, bool scaled = false) + { + var key = new Tuple(controllerType, handedness, scaled); + + if (CachedTextures.TryGetValue(key, out Texture2D texture)) + { + return texture; + } + + texture = GetControllerTextureInternal(controllerType, handedness, scaled); + CachedTextures.Add(key, texture); + return texture; + } + + private static Texture2D GetControllerTextureInternal(SupportedControllerType controllerType, Handedness handedness, bool scaled) + { + var profiles = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.ControllerMappingProfiles; + + if (MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + profiles != null) + { + foreach (var profile in profiles.ControllerMappingProfiles) + { + if (profile != null && + profile.ControllerType == controllerType) + { + var texture = GetControllerTextureInternal(profile.TexturePath, handedness, scaled); + + if (texture != null) + { + return texture; + } + } + } + } + + return GetControllerTextureInternal($"{MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}/StandardAssets/Textures/Generic_controller", Handedness.None, scaled); + } + + private static Texture2D GetControllerTextureInternal(string fullTexturePath, Handedness handedness, bool scaled) + { + var handednessSuffix = string.Empty; + + switch (handedness) + { + case Handedness.Left: + handednessSuffix = "_left"; + break; + case Handedness.Right: + handednessSuffix = "_right"; + break; + } + + var themeSuffix = EditorGUIUtility.isProSkin ? "_white" : "_black"; + + return (Texture2D)AssetDatabase.LoadAssetAtPath($"{fullTexturePath}{handednessSuffix}{themeSuffix}{(scaled ? "_scaled" : string.Empty)}.png", typeof(Texture2D)); + } + + #endregion Controller Texture Loading + +#endif // UNITY_EDITOR + } +} \ No newline at end of file diff --git a/Definitions/Devices/ControllerMappingLibrary.cs.meta b/Definitions/Devices/ControllerMappingLibrary.cs.meta new file mode 100644 index 000000000..9331ba749 --- /dev/null +++ b/Definitions/Devices/ControllerMappingLibrary.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fd24cd9a4dc3455c8751cb2d74f27147 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/DeviceInputType.cs b/Definitions/Devices/DeviceInputType.cs new file mode 100644 index 000000000..4c59051fa --- /dev/null +++ b/Definitions/Devices/DeviceInputType.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Devices +{ + // TODO - Expand input list for additional controller types and have a filter defined by the controller + /// + /// The InputType defines the types of input exposed by a controller. + /// Denoting the available buttons / interactions that a controller supports. + /// + public enum DeviceInputType + { + None = 0, + Gaze, + Voice, + /// + /// 6 Dof Pointer with position and rotation. + /// + SpatialPointer, + /// + /// 3 Dof Pointer with only position. + /// + PointerPosition, + /// + /// 3 Dof Pointer with only rotation. + /// + PointerRotation, + PointerClick, + ButtonPress, + ButtonTouch, + ButtonNearTouch, + Trigger, + TriggerTouch, + TriggerNearTouch, + TriggerPress, + /// + /// 6 DoF Grip with position and rotation. + /// + SpatialGrip, + /// + /// 3 DoF Grip with only position. + /// + GripPosition, + /// + /// 3 Dof Grip with only rotation. + /// + GripRotation, + ThumbStick, + ThumbStickPress, + ThumbStickTouch, + ThumbStickNearTouch, + Touchpad, + TouchpadTouch, + TouchpadNearTouch, + TouchpadPress, + Select, + Start, + Menu, + Hand, + Thumb, + ThumbTouch, + ThumbNearTouch, + ThumbPress, + IndexFinger, + IndexFingerTouch, + IndexFingerNearTouch, + IndexFingerPress, + MiddleFinger, + MiddleFingerTouch, + MiddleFingerNearTouch, + MiddleFingerPress, + RingFinger, + RingFingerTouch, + RingFingerNearTouch, + RingFingerPress, + PinkyFinger, + PinkyFingerTouch, + PinkyFingerNearTouch, + PinkyFingerPress, + DirectionalPad, + Scroll, + } +} \ No newline at end of file diff --git a/Definitions/Devices/DeviceInputType.cs.meta b/Definitions/Devices/DeviceInputType.cs.meta new file mode 100644 index 000000000..e21d6337d --- /dev/null +++ b/Definitions/Devices/DeviceInputType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c60ae1868fa84d5194eb47e1bdbfba6c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/GestureInputType.cs b/Definitions/Devices/GestureInputType.cs new file mode 100644 index 000000000..139e3cfac --- /dev/null +++ b/Definitions/Devices/GestureInputType.cs @@ -0,0 +1,18 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Devices +{ + /// + /// The GestureInputType defines the types of gestures exposed by a controller. + /// + public enum GestureInputType + { + None = 0, + Tap, + DoubleTap, + Hold, + Navigation, + Manipulation + } +} \ No newline at end of file diff --git a/Definitions/Devices/GestureInputType.cs.meta b/Definitions/Devices/GestureInputType.cs.meta new file mode 100644 index 000000000..08a7f62bd --- /dev/null +++ b/Definitions/Devices/GestureInputType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0d43f056ce48417e98e317cad47a7b46 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/Headset.cs b/Definitions/Devices/Headset.cs new file mode 100644 index 000000000..e2ecb7e4f --- /dev/null +++ b/Definitions/Devices/Headset.cs @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Definitions.Devices +{ + // TODO - currently not used, consider removing maybe? + /// + /// The headset definition defines the headset as defined by the SDK / Unity. + /// + public struct Headset + { + /// + /// The ID assigned to the Headset + /// + public string Id { get; set; } + + /// + /// The designated hand that the controller is managing, as defined by the SDK / Unity. + /// + public SDKType HeadsetSDKType { get; set; } + + /// + /// Indicates whether or not the headset is currently providing position data. + /// + public bool IsPositionAvailable { get; set; } + + /// + /// Outputs the current position of the headset, as defined by the SDK / Unity. + /// + public Vector3 Position { get; set; } + + /// + /// Indicates whether or not the headset is currently providing rotation data. + /// + public bool IsRotationAvailable { get; set; } + + /// + /// Outputs the current rotation of the headset, as defined by the SDK / Unity. + /// + public Quaternion Rotation { get; set; } + + /// + /// Outputs the current state of the headset, whether it is tracked or not. As defined by the SDK / Unity. + /// + public TrackingState TrackingState { get; set; } + + /// + /// Indicates whether or not the headset display is opaque. As defined by the SDK / Unity. + /// + public bool IsOpaque { get; set; } + } +} \ No newline at end of file diff --git a/Definitions/Devices/Headset.cs.meta b/Definitions/Devices/Headset.cs.meta new file mode 100644 index 000000000..dd0fdc822 --- /dev/null +++ b/Definitions/Devices/Headset.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9ba6f7c4b4e3418aa150d1cae44e7cf7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/MixedRealityInteractionMapping.cs b/Definitions/Devices/MixedRealityInteractionMapping.cs new file mode 100644 index 000000000..47094bc2e --- /dev/null +++ b/Definitions/Devices/MixedRealityInteractionMapping.cs @@ -0,0 +1,511 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.Devices +{ + /// + /// Maps the capabilities of controllers, linking the Physical inputs of a controller to a Logical construct in a runtime project + /// + /// One definition should exist for each physical device input, such as buttons, triggers, joysticks, dpads, and more. + [Serializable] + public class MixedRealityInteractionMapping + { + /// + /// The constructor for a new Interaction Mapping definition + /// + /// Identity for mapping + /// The description of the interaction mapping. + /// The axis that the mapping operates on, also denotes the data type for the mapping + /// The physical input device / control + /// Optional horizontal or single axis value to get axis data from Unity's old input system. + /// Optional vertical axis value to get axis data from Unity's old input system. + /// Optional horizontal axis invert option. + /// Optional vertical axis invert option. + public MixedRealityInteractionMapping(uint id, string description, AxisType axisType, DeviceInputType inputType, string axisCodeX, string axisCodeY = "", bool invertXAxis = false, bool invertYAxis = false) + { + this.id = id; + this.description = description; + this.axisType = axisType; + this.inputType = inputType; + inputAction = MixedRealityInputAction.None; + keyCode = KeyCode.None; + this.axisCodeX = axisCodeX; + this.axisCodeY = axisCodeY; + this.invertXAxis = invertXAxis; + this.invertYAxis = invertYAxis; + rawData = null; + boolData = false; + floatData = 0f; + vector2Data = Vector2.zero; + positionData = Vector3.zero; + rotationData = Quaternion.identity; + poseData = MixedRealityPose.ZeroIdentity; + changed = false; + } + + /// + /// The constructor for a new Interaction Mapping definition + /// + /// Identity for mapping + /// The description of the interaction mapping. + /// The axis that the mapping operates on, also denotes the data type for the mapping + /// The physical input device / control + /// Optional KeyCode value to get input from Unity's old input system + public MixedRealityInteractionMapping(uint id, string description, AxisType axisType, DeviceInputType inputType, KeyCode keyCode) + { + this.id = id; + this.description = description; + this.axisType = axisType; + this.inputType = inputType; + inputAction = MixedRealityInputAction.None; + this.keyCode = keyCode; + axisCodeX = string.Empty; + axisCodeY = string.Empty; + rawData = null; + boolData = false; + floatData = 0f; + vector2Data = Vector2.zero; + positionData = Vector3.zero; + rotationData = Quaternion.identity; + poseData = MixedRealityPose.ZeroIdentity; + changed = false; + } + + /// + /// The constructor for a new Interaction Mapping definition + /// + /// Identity for mapping + /// The description of the interaction mapping. + /// The axis that the mapping operates on, also denotes the data type for the mapping + /// The physical input device / control + /// The logical MixedRealityInputAction that this input performs + /// Optional KeyCode value to get input from Unity's old input system + /// Optional horizontal or single axis value to get axis data from Unity's old input system. + /// Optional vertical axis value to get axis data from Unity's old input system. + /// Optional horizontal axis invert option. + /// Optional vertical axis invert option. + public MixedRealityInteractionMapping(uint id, string description, AxisType axisType, DeviceInputType inputType, MixedRealityInputAction inputAction, KeyCode keyCode = KeyCode.None, string axisCodeX = "", string axisCodeY = "", bool invertXAxis = false, bool invertYAxis = false) + { + this.id = id; + this.description = description; + this.axisType = axisType; + this.inputType = inputType; + this.inputAction = inputAction; + this.keyCode = keyCode; + this.axisCodeX = axisCodeX; + this.axisCodeY = axisCodeY; + this.invertXAxis = invertXAxis; + this.invertYAxis = invertYAxis; + rawData = null; + boolData = false; + floatData = 0f; + vector2Data = Vector2.zero; + positionData = Vector3.zero; + rotationData = Quaternion.identity; + poseData = MixedRealityPose.ZeroIdentity; + changed = false; + } + + public MixedRealityInteractionMapping(MixedRealityInteractionMapping mixedRealityInteractionMapping) + { + id = mixedRealityInteractionMapping.id; + description = mixedRealityInteractionMapping.description; + axisType = mixedRealityInteractionMapping.axisType; + inputType = mixedRealityInteractionMapping.inputType; + inputAction = mixedRealityInteractionMapping.inputAction; + keyCode = mixedRealityInteractionMapping.keyCode; + axisCodeX = mixedRealityInteractionMapping.axisCodeX; + axisCodeY = mixedRealityInteractionMapping.axisCodeY; + invertXAxis = mixedRealityInteractionMapping.invertXAxis; + invertYAxis = mixedRealityInteractionMapping.invertYAxis; + rawData = null; + boolData = false; + floatData = 0f; + vector2Data = Vector2.zero; + positionData = Vector3.zero; + rotationData = Quaternion.identity; + poseData = MixedRealityPose.ZeroIdentity; + changed = false; + } + + #region Interaction Properties + + [SerializeField] + [Tooltip("The Id assigned to the Interaction.")] + private uint id; + + /// + /// The Id assigned to the Interaction. + /// + public uint Id => id; + + [SerializeField] + [Tooltip("The description of the interaction mapping.")] + private string description; + + /// + /// The description of the interaction mapping. + /// + public string Description => description; + + [SerializeField] + [Tooltip("The axis type of the button, e.g. Analogue, Digital, etc.")] + private AxisType axisType; + + /// + /// The axis type of the button, e.g. Analogue, Digital, etc. + /// + public AxisType AxisType => axisType; + + [SerializeField] + [Tooltip("The primary action of the input as defined by the controller SDK.")] + private DeviceInputType inputType; + + /// + /// The primary action of the input as defined by the controller SDK. + /// + public DeviceInputType InputType => inputType; + + [SerializeField] + [Tooltip("Action to be raised to the Input Manager when the input data has changed.")] + private MixedRealityInputAction inputAction; + + /// + /// Action to be raised to the Input Manager when the input data has changed. + /// + public MixedRealityInputAction MixedRealityInputAction + { + get => inputAction; + internal set => inputAction = value; + } + + [SerializeField] + [Tooltip("Optional KeyCode value to get input from Unity's old input system.")] + private KeyCode keyCode; + + /// + /// Optional KeyCode value to get input from Unity's old input system. + /// + public KeyCode KeyCode => keyCode; + + [SerializeField] + [Tooltip("Optional horizontal or single axis value to get axis data from Unity's old input system.")] + private string axisCodeX; + + /// + /// Optional horizontal or single axis value to get axis data from Unity's old input system. + /// + public string AxisCodeX => axisCodeX; + + [SerializeField] + [Tooltip("Optional vertical axis value to get axis data from Unity's old input system.")] + private string axisCodeY; + + /// + /// Optional vertical axis value to get axis data from Unity's old input system. + /// + public string AxisCodeY => axisCodeY; + + [SerializeField] + [Tooltip("Should the X axis be inverted?")] + private bool invertXAxis = false; + + /// + /// Should the X axis be inverted? + /// + /// + /// Only valid for and inputs. + /// + public bool InvertXAxis + { + get => invertXAxis; + set + { + if (axisType != AxisType.SingleAxis && axisType != AxisType.DualAxis) + { + Debug.LogWarning("Inverted X axis only valid for Single or Dual Axis inputs."); + return; + } + + invertXAxis = value; + } + } + + [SerializeField] + [Tooltip("Should the Y axis be inverted?")] + private bool invertYAxis = false; + + /// + /// Should the Y axis be inverted? + /// + /// + /// Only valid for inputs. + /// + public bool InvertYAxis + { + get => invertYAxis; + set + { + if (axisType != AxisType.DualAxis) + { + Debug.LogWarning("Inverted Y axis only valid for Dual Axis inputs."); + return; + } + + invertYAxis = value; + } + } + + private bool changed; + + /// + /// Has the value changed since the last reading. + /// + public bool Changed + { + get + { + bool returnValue = changed; + + if (changed) + { + changed = false; + } + + return returnValue; + } + private set => changed = value; + } + + private bool updated; + + /// + /// Has the value been updated since the last reading? + /// + public bool Updated + { + get + { + bool returnValue = updated; + + if (updated) + { + updated = false; + } + + return returnValue; + } + private set => updated = value; + } + + #endregion Interaction Properties + + #region Definition Data Items + + private object rawData; + + private bool boolData; + + private float floatData; + + private Vector2 vector2Data; + + private Vector3 positionData; + + private Quaternion rotationData; + + private MixedRealityPose poseData; + + #endregion Definition Data Items + + #region Data Properties + + /// + /// The Raw (object) data value. + /// + /// Only supported for a Raw mapping axis type + public object RawData + { + get => rawData; + + set + { + if (AxisType != AxisType.Raw) + { + Debug.LogError($"SetRawValue is only valid for AxisType.Raw InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + + Changed = rawData != value; + // use the internal reading for changed so we don't reset it. + Updated = changed || value != null; + rawData = value; + } + } + + /// + /// The Bool data value. + /// + /// Only supported for a Digital mapping axis type + public bool BoolData + { + get => boolData; + + set + { + if (AxisType != AxisType.Digital && AxisType != AxisType.SingleAxis && AxisType != AxisType.DualAxis) + { + Debug.LogError($"SetBoolValue is only valid for AxisType.Digital, AxisType.SingleAxis, or AxisType.DualAxis InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + + Changed = boolData != value; + // use the internal reading for changed so we don't reset it. + Updated = changed || value; + boolData = value; + } + } + + /// + /// The Float data value. + /// + /// Only supported for a SingleAxis mapping axis type + public float FloatData + { + get => floatData; + + set + { + if (AxisType != AxisType.SingleAxis) + { + Debug.LogError($"SetFloatValue is only valid for AxisType.SingleAxis InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + + if (invertXAxis) + { + Changed = !floatData.Equals(value * -1f); + floatData = value * -1f; + } + else + { + Changed = !floatData.Equals(value); + // use the internal reading for changed so we don't reset it. + Updated = changed || !floatData.Equals(0f); + floatData = value; + } + } + } + + /// + /// The Vector2 data value. + /// + /// Only supported for a DualAxis mapping axis type + public Vector2 Vector2Data + { + get => vector2Data; + + set + { + if (AxisType != AxisType.DualAxis) + { + Debug.LogError($"SetVector2Value is only valid for AxisType.DualAxis InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + + if (invertXAxis || invertYAxis) + { + float invertXAxisFactor = invertXAxis ? -1f : 1f; + float invertYAxisFactor = invertYAxis ? -1f : 1f; + + Changed = !vector2Data.x.Equals(value.x * invertXAxisFactor) && + !vector2Data.y.Equals(value.y * invertYAxisFactor); + // use the internal reading for changed so we don't reset it. + Updated = changed || !vector2Data.Equals(Vector2.zero); + vector2Data.x = value.x * invertXAxisFactor; + vector2Data.y = value.y * invertYAxisFactor; + } + else + { + Changed = vector2Data != value; + // use the internal reading for changed so we don't reset it. + Updated = changed || !vector2Data.Equals(Vector2.zero); + vector2Data = value; + } + } + } + + /// + /// The ThreeDof Vector3 Position data value. + /// + /// Only supported for a ThreeDof mapping axis type + public Vector3 PositionData + { + get => positionData; + + set + { + if (AxisType != AxisType.ThreeDofPosition) + { + { + Debug.LogError($"SetPositionValue is only valid for AxisType.ThreeDoFPosition InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + } + + Changed = positionData != value; + // use the internal reading for changed so we don't reset it. + Updated = changed || !value.Equals(Vector3.zero); + positionData = value; + } + } + + /// + /// The ThreeDof Quaternion Rotation data value. + /// + /// Only supported for a ThreeDof mapping axis type + public Quaternion RotationData + { + get => rotationData; + + set + { + if (AxisType != AxisType.ThreeDofRotation) + { + Debug.LogError($"SetRotationValue is only valid for AxisType.ThreeDoFRotation InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + + Changed = rotationData != value; + // use the internal reading for changed so we don't reset it. + Updated = changed || !value.Equals(Quaternion.identity); + rotationData = value; + } + } + + /// + /// The Pose data value. + /// + /// Only supported for a SixDof mapping axis type + public MixedRealityPose PoseData + { + get => poseData; + set + { + if (AxisType != AxisType.SixDof) + { + Debug.LogError($"SetPoseValue is only valid for AxisType.SixDoF InteractionMappings\nPlease check the {inputType} mapping for the current controller"); + } + + Changed = poseData != value; + // use the internal reading for changed so we don't reset it. + Updated = changed || !value.Equals(MixedRealityPose.ZeroIdentity); + poseData = value; + positionData = poseData.Position; + rotationData = poseData.Rotation; + } + } + + #endregion Data Properties + + } +} \ No newline at end of file diff --git a/Definitions/Devices/MixedRealityInteractionMapping.cs.meta b/Definitions/Devices/MixedRealityInteractionMapping.cs.meta new file mode 100644 index 000000000..98f1daa2d --- /dev/null +++ b/Definitions/Devices/MixedRealityInteractionMapping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c2a9fc3630747b9b5ba27446fd04b72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/SDKType.cs b/Definitions/Devices/SDKType.cs new file mode 100644 index 000000000..d606ec3da --- /dev/null +++ b/Definitions/Devices/SDKType.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Devices +{ + /// + /// The SDKType lists the XR SDKs that are supported by the Mixed Reality Toolkit. + /// Initially, this lists proposed SDKs, not all may be implemented at this time (please see ReleaseNotes for more details) + /// + public enum SDKType + { + /// + /// No specified type or Standalone / non-XR type + /// + None = 0, + /// + /// Undefined SDK. + /// + Other, + /// + /// The Windows 10 Mixed reality SDK provided by the Universal Windows Platform (UWP), for Immersive MR headsets and HoloLens. + /// + WindowsMR, + /// + /// The OpenVR platform provided by Unity (does not support the downloadable SteamVR SDK). + /// + OpenVR, + /// + /// The OpenXR platform. SDK to be determined once released. + /// + OpenXR + } +} \ No newline at end of file diff --git a/Definitions/Devices/SDKType.cs.meta b/Definitions/Devices/SDKType.cs.meta new file mode 100644 index 000000000..d0d8532f9 --- /dev/null +++ b/Definitions/Devices/SDKType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1386c703a151485387f3a1e3317f2f39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/SupportedControllerType.cs b/Definitions/Devices/SupportedControllerType.cs new file mode 100644 index 000000000..dcfc8ff5f --- /dev/null +++ b/Definitions/Devices/SupportedControllerType.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Devices +{ + /// + /// The SDKType lists the XR SDKs that are supported by the Mixed Reality Toolkit. + /// Initially, this lists proposed SDKs, not all may be implemented at this time (please see ReleaseNotes for more details) + /// + public enum SupportedControllerType + { + None = 0, + GenericOpenVR, + ViveWand, + ViveKnuckles, + OculusTouch, + OculusRemote, + WindowsMixedReality, + GenericUnity, + Xbox, + TouchScreen, + Mouse, + Lumin + } +} diff --git a/Definitions/Devices/SupportedControllerType.cs.meta b/Definitions/Devices/SupportedControllerType.cs.meta new file mode 100644 index 000000000..b660aa007 --- /dev/null +++ b/Definitions/Devices/SupportedControllerType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4025b9c9bf14e25bd7ea0bac10e7fb8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Devices/TrackingState.cs b/Definitions/Devices/TrackingState.cs new file mode 100644 index 000000000..bd271d4ee --- /dev/null +++ b/Definitions/Devices/TrackingState.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Devices +{ + /// + /// The Tracking State defines how a device is currently being tracked. + /// This enables developers to be able to handle non-tracked situations and react accordingly. + /// + /// + /// Tracking is being defined as receiving sensor (positional and/or rotational) data from the device. + /// + public enum TrackingState + { + /// + /// The device does not support tracking (ex: a traditional game controller). + /// + NotApplicable = 0, + /// + /// The device is not tracked. + /// + NotTracked, + /// + /// The device is tracked (positionally and/or rotationally). + /// + /// + /// Some devices provide additional details regarding the accuracy of the tracking. + /// + Tracked + } +} \ No newline at end of file diff --git a/Definitions/Devices/TrackingState.cs.meta b/Definitions/Devices/TrackingState.cs.meta new file mode 100644 index 000000000..0d7e0f8c4 --- /dev/null +++ b/Definitions/Devices/TrackingState.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1557ecf712b4c06a6b84c7bb23f42e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DiagnosticsSystem.meta b/Definitions/DiagnosticsSystem.meta new file mode 100644 index 000000000..09ee1da98 --- /dev/null +++ b/Definitions/DiagnosticsSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5a75fd87af24071aed569bc680bce5e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DiagnosticsSystem/CpuUseTracker.cs b/Definitions/DiagnosticsSystem/CpuUseTracker.cs new file mode 100644 index 000000000..3441f3cb4 --- /dev/null +++ b/Definitions/DiagnosticsSystem/CpuUseTracker.cs @@ -0,0 +1,85 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if !WINDOWS_UWP +using System; +using System.Diagnostics; +using System.Linq; +#endif + +namespace XRTK.Definitions.Diagnostics +{ + /// + /// The Mixed Reality Toolkit's Cpu use tracker. + /// + public struct CpuUseTracker + { + /// + /// Constructor. + /// + /// The number of readings for this tracker. + public CpuUseTracker(int buffer = 20) + { +#if !WINDOWS_UWP + currentProcess = Process.GetCurrentProcess(); + readings = new TimeSpan[buffer]; + processorTime = null; + index = 0; +#endif + } + +#if !WINDOWS_UWP + private readonly Process currentProcess; + private readonly TimeSpan[] readings; + private TimeSpan? processorTime; + private int index; +#endif + + /// + /// The current reading in Milliseconds. + /// + public double CurrentReadingInMs + { + get + { +#if !WINDOWS_UWP + if (!processorTime.HasValue) + { + try + { + processorTime = currentProcess.TotalProcessorTime; + } + catch (Exception e) + { + UnityEngine.Debug.LogError(e.Message); + } + + return 0; + } + + var currentTime = currentProcess.TotalProcessorTime; + var diff = currentTime - processorTime.Value; + processorTime = currentTime; + + readings[index] = diff; + index = (index + 1) % readings.Length; + + return Math.Round(readings.Average(t => t.TotalMilliseconds), 2); +#else + // Platforms that don't support IL2CPP can't get CPU readings with the current pattern. + return -1; +#endif + } + } + + /// + /// Reset the tracker. + /// + public void Reset() + { +#if !WINDOWS_UWP + processorTime = null; +#endif + } + } +} diff --git a/Definitions/DiagnosticsSystem/CpuUseTracker.cs.meta b/Definitions/DiagnosticsSystem/CpuUseTracker.cs.meta new file mode 100644 index 000000000..db247e824 --- /dev/null +++ b/Definitions/DiagnosticsSystem/CpuUseTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ff03f7161df49f6b67f79751b55223e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DiagnosticsSystem/FpsUseTracker.cs b/Definitions/DiagnosticsSystem/FpsUseTracker.cs new file mode 100644 index 000000000..689e4328d --- /dev/null +++ b/Definitions/DiagnosticsSystem/FpsUseTracker.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Linq; +using UnityEngine; + +namespace XRTK.Definitions.Diagnostics +{ + /// + /// The Mixed Reality Toolkit's Fps use tracker. + /// + public struct FpsUseTracker + { + private readonly float[] timings; + private int index; + + /// + /// Constructor. + /// + /// The number of readings for this tracker. + public FpsUseTracker(int buffer = 10) + { + timings = new float[buffer]; + index = 0; + } + + /// + /// Gets the current FPS in seconds. + /// + public float CurrentReadingInSeconds + { + get + { + timings[index] = Time.unscaledDeltaTime; + index = (index + 1) % timings.Length; + return timings.Average(); + } + } + } +} diff --git a/Definitions/DiagnosticsSystem/FpsUseTracker.cs.meta b/Definitions/DiagnosticsSystem/FpsUseTracker.cs.meta new file mode 100644 index 000000000..163ad1cd4 --- /dev/null +++ b/Definitions/DiagnosticsSystem/FpsUseTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9cd40f7bd05412e9dee6e35dbbedcac +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DiagnosticsSystem/MemoryReading.cs b/Definitions/DiagnosticsSystem/MemoryReading.cs new file mode 100644 index 000000000..608c02e03 --- /dev/null +++ b/Definitions/DiagnosticsSystem/MemoryReading.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Diagnostics +{ + public struct MemoryReading + { + public long GcMemoryInBytes { get; set; } + + public MemoryReading Reset() + { + GcMemoryInBytes = 0; + return this; + } + + public static MemoryReading operator +(MemoryReading a, MemoryReading b) + { + a.GcMemoryInBytes += b.GcMemoryInBytes; + return a; + } + + public static MemoryReading operator /(MemoryReading a, int b) + { + a.GcMemoryInBytes /= b; + return a; + } + } +} \ No newline at end of file diff --git a/Definitions/DiagnosticsSystem/MemoryReading.cs.meta b/Definitions/DiagnosticsSystem/MemoryReading.cs.meta new file mode 100644 index 000000000..4819905d3 --- /dev/null +++ b/Definitions/DiagnosticsSystem/MemoryReading.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 14a40c5c91ce47869c571d44e27ddce5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DiagnosticsSystem/MemoryUseTracker.cs b/Definitions/DiagnosticsSystem/MemoryUseTracker.cs new file mode 100644 index 000000000..849af05d3 --- /dev/null +++ b/Definitions/DiagnosticsSystem/MemoryUseTracker.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Linq; + +namespace XRTK.Definitions.Diagnostics +{ + /// + /// The Mixed Reality Toolkit's Memory Use Tracker. + /// + public struct MemoryUseTracker + { + private readonly MemoryReading[] memoryReadings; + private MemoryReading sumReading; + private int index; + + /// + /// Constructor. + /// + /// The number of readings for this tracker. + public MemoryUseTracker(int buffer = 10) + { + memoryReadings = new MemoryReading[buffer]; + sumReading = new MemoryReading(); + index = 0; + + for (int i = 0; i < memoryReadings.Length; i++) + { + memoryReadings[i] = new MemoryReading(); + } + } + + /// + /// The current + /// + public MemoryReading CurrentReading + { + get + { + memoryReadings[index].GcMemoryInBytes = GC.GetTotalMemory(false); + index = (index + 1) % memoryReadings.Length; + + return memoryReadings.Aggregate(sumReading.Reset(), (a, b) => a + b) / memoryReadings.Length; + } + } + } +} diff --git a/Definitions/DiagnosticsSystem/MemoryUseTracker.cs.meta b/Definitions/DiagnosticsSystem/MemoryUseTracker.cs.meta new file mode 100644 index 000000000..ec546f725 --- /dev/null +++ b/Definitions/DiagnosticsSystem/MemoryUseTracker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2700d8a9ac2645d7bfa3a852f8f63264 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs b/Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs new file mode 100644 index 000000000..fd2ced1e9 --- /dev/null +++ b/Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Diagnostics; + +namespace XRTK.Definitions.Diagnostics +{ + /// + /// Configuration profile settings for setting up diagnostics. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Diagnostics System Profile", fileName = "MixedRealityDiagnosticsProfile", order = (int)CreateProfileMenuItemIndices.Diagnostics)] + public class MixedRealityDiagnosticsProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("Show diagnostics?")] + private bool visible = false; + + /// + /// Should the diagnostics be visible? + /// + public bool Visible => visible; + + [SerializeField] + [Tooltip("Should show cpu?")] + private bool showCpu = true; + + [SerializeField] + [Tooltip("The type of IMixedRealityDiagnosticsHandler to use for visualization.")] + [Implements(typeof(IMixedRealityDiagnosticsHandler), TypeGrouping.ByNamespaceFlat)] + private SystemType handlerType = null; + + /// + /// The type of to use for visualization. + /// + public SystemType HandlerType => handlerType; + + /// + /// Should the Cpu diagnostic be visible? + /// + public bool ShowCpu => showCpu; + + [SerializeField] + [Tooltip("How many samples should the cpu use tracker use?")] + private int cpuBuffer = 20; + + /// + /// The number of samples the cpu use tracker should use. + /// + public int CpuBuffer => cpuBuffer; + + [SerializeField] + [Tooltip("Should show fps?")] + private bool showFps = true; + + /// + /// Should the fps diagnostic be visible? + /// + public bool ShowFps => showFps; + + [SerializeField] + [Tooltip("How many samples should the fps use tracker use?")] + private int fpsBuffer = 10; + + /// + /// The number of samples the Fps use tracker should use. + /// + public int FpsBuffer => fpsBuffer; + + [SerializeField] + [Tooltip("Should show memory?")] + private bool showMemory = true; + + /// + /// How to show the memory diagnostic + /// + public bool ShowMemory => showMemory; + + [SerializeField] + [Tooltip("How many samples should the memory use tracker use?")] + private int memoryBuffer = 10; + + /// + /// The number of samples the memory use tracker should use. + /// + public int MemoryBuffer => memoryBuffer; + } +} \ No newline at end of file diff --git a/Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs.meta b/Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs.meta new file mode 100644 index 000000000..1a63297b4 --- /dev/null +++ b/Definitions/DiagnosticsSystem/MixedRealityDiagnosticsProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1564b9320d5f4bdf9823a35bb66d61a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem.meta b/Definitions/InputSystem.meta new file mode 100644 index 000000000..ee2425ceb --- /dev/null +++ b/Definitions/InputSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 602488a182fc44949c83d05cc3fd2982 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/AnimatedCursorData.cs b/Definitions/InputSystem/AnimatedCursorData.cs new file mode 100644 index 000000000..e2c6e375e --- /dev/null +++ b/Definitions/InputSystem/AnimatedCursorData.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Data struct for cursor state information for the Animated Cursor, which leverages the Unity animation system. + /// This defines a modification to an Unity animation parameter, based on cursor state. + /// + [Serializable] + public struct AnimatedCursorData + { + /// + /// Constructor. + /// + /// Name of the animation state for the cursor. + /// The enum state for the cursor's animation. + /// The linked animation parameter to used for the cursor state. + public AnimatedCursorData(string name, CursorStateEnum cursorState, AnimatorParameter parameter) + { + this.name = name; + this.cursorState = cursorState; + this.parameter = parameter; + } + + [SerializeField] + [Tooltip("The name of this specific cursor state.")] + private string name; + + /// + /// The name of this specific cursor state. + /// + public string Name => name; + + [SerializeField] + [Tooltip("The Cursor State for this specific animation.")] + private CursorStateEnum cursorState; + + /// + /// The Cursor State for this specific animation. + /// + public CursorStateEnum CursorState => cursorState; + + [SerializeField] + [Tooltip("Animator parameter definition for this cursor state.")] + private AnimatorParameter parameter; + + /// + /// Animator parameter definition for this cursor state. + /// + public AnimatorParameter Parameter => parameter; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/AnimatedCursorData.cs.meta b/Definitions/InputSystem/AnimatedCursorData.cs.meta new file mode 100644 index 000000000..07b3fb464 --- /dev/null +++ b/Definitions/InputSystem/AnimatedCursorData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ab215755259b4cfba680fcdf9e822fb1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/ControllerDataProviderConfiguration.cs b/Definitions/InputSystem/ControllerDataProviderConfiguration.cs new file mode 100644 index 000000000..53f2f3908 --- /dev/null +++ b/Definitions/InputSystem/ControllerDataProviderConfiguration.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Providers.Controllers; + +namespace XRTK.Definitions.InputSystem +{ + [Serializable] + public struct ControllerDataProviderConfiguration + { + /// + /// Constructor. + /// + /// + /// + /// + /// + /// + public ControllerDataProviderConfiguration(SystemType dataProviderType, string dataProviderName, uint priority, SupportedPlatforms runtimePlatform, BaseMixedRealityControllerDataProviderProfile profile) + { + this.dataProviderType = dataProviderType; + this.dataProviderName = dataProviderName; + this.priority = priority; + this.runtimePlatform = runtimePlatform; + this.profile = profile; + } + + [SerializeField] + [Tooltip("The concrete type of controller data provider to register.")] + [Implements(typeof(IMixedRealityControllerDataProvider), TypeGrouping.ByNamespaceFlat)] + private SystemType dataProviderType; + + /// + /// The concrete type to use for this controller data provider. + /// + public SystemType DataProviderType => dataProviderType; + + [SerializeField] + private string dataProviderName; + + /// + /// The simple, human readable name for the system, feature, or manager. + /// + public string DataProviderName => dataProviderName; + + [SerializeField] + private uint priority; + + /// + /// The priority this system, feature, or manager will be initialized in. + /// + public uint Priority => priority; + + [EnumFlags] + [SerializeField] + private SupportedPlatforms runtimePlatform; + + /// + /// The runtime platform(s) to run this system, feature, or manager on. + /// + public SupportedPlatforms RuntimePlatform => runtimePlatform; + + [SerializeField] + private BaseMixedRealityControllerDataProviderProfile profile; + + /// + /// The profile settings for the controller data provider. + /// + public BaseMixedRealityControllerDataProviderProfile Profile => profile; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/ControllerDataProviderConfiguration.cs.meta b/Definitions/InputSystem/ControllerDataProviderConfiguration.cs.meta new file mode 100644 index 000000000..f22ce875c --- /dev/null +++ b/Definitions/InputSystem/ControllerDataProviderConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 315ec8eda11441f497ed4794d9f15f4f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/CursorStateEnum.cs b/Definitions/InputSystem/CursorStateEnum.cs new file mode 100644 index 000000000..34c9444e0 --- /dev/null +++ b/Definitions/InputSystem/CursorStateEnum.cs @@ -0,0 +1,46 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Enum for current cursor state + /// + public enum CursorStateEnum + { + /// + /// Useful for releasing external override. + /// See CursorStateEnum.Contextual + /// + None = -1, + /// + /// Not IsHandDetected OR HasTeleportIntent + /// + Observe, + /// + /// Not IsHandDetected AND not IsPointerDown AND TargetedObject exists OR HasTeleportIntent AND Teleport Surface IsValid + /// + ObserveHover, + /// + /// IsHandDetected AND not IsPointerDown AND TargetedObject is NULL + /// + Interact, + /// + /// IsHandDetected AND not IsPointerDown AND TargetedObject exists + /// + InteractHover, + /// + /// IsHandDetected AND IsPointerDown + /// + Select, + /// + /// Available for use by classes that extend Cursor. + /// No logic for setting Release state exists in the base Cursor class. + /// + Release, + /// + /// Allows for external override + /// + Contextual + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/CursorStateEnum.cs.meta b/Definitions/InputSystem/CursorStateEnum.cs.meta new file mode 100644 index 000000000..8e3eac98f --- /dev/null +++ b/Definitions/InputSystem/CursorStateEnum.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fed961b68a0e4c0fa0922fab9a1361c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionEventPair.cs b/Definitions/InputSystem/InputActionEventPair.cs new file mode 100644 index 000000000..4a7177180 --- /dev/null +++ b/Definitions/InputSystem/InputActionEventPair.cs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using UnityEngine.Events; + +namespace XRTK.Definitions.InputSystem { + /// + /// Data class that maps s to s wired up in the inspector. + /// + [Serializable] + public struct InputActionEventPair + { + /// + /// Constructor. + /// + /// + /// + public InputActionEventPair(MixedRealityInputAction inputAction, UnityEvent unityEvent) + { + this.inputAction = inputAction; + this.unityEvent = unityEvent; + } + + [SerializeField] + [Tooltip("The MixedRealityInputAction to listen for to invoke the UnityEvent.")] + private MixedRealityInputAction inputAction; + + /// + /// The to listen for to invoke the . + /// + public MixedRealityInputAction InputAction => inputAction; + + [SerializeField] + [Tooltip("The UnityEvent to invoke when MixedRealityInputAction is raised.")] + private UnityEvent unityEvent; + + /// + /// The to invoke when is raised. + /// + public UnityEvent UnityEvent => unityEvent; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionEventPair.cs.meta b/Definitions/InputSystem/InputActionEventPair.cs.meta new file mode 100644 index 000000000..dd88dcaf9 --- /dev/null +++ b/Definitions/InputSystem/InputActionEventPair.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 13fb65feccda4a61905e34ffd5b417c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionRuleDigital.cs b/Definitions/InputSystem/InputActionRuleDigital.cs new file mode 100644 index 000000000..a7125acb6 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleDigital.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Generic Input Action Rule for raising actions based on specific criteria. + /// + [Serializable] + public struct InputActionRuleDigital : IInputActionRule + { + /// + /// Constructor. + /// + /// The Base Action that the rule will listen to. + /// The Action to raise if the criteria is met. + /// The criteria to check against for determining if the action should be raised. + public InputActionRuleDigital(MixedRealityInputAction baseAction, MixedRealityInputAction ruleAction, bool criteria) + { + this.baseAction = baseAction; + this.ruleAction = ruleAction; + this.criteria = criteria; + } + + [SerializeField] + [Tooltip("The Base Action that the rule will listen to.")] + private MixedRealityInputAction baseAction; + + /// + public MixedRealityInputAction BaseAction => baseAction; + + [SerializeField] + [Tooltip("The Action to raise if the criteria is met.")] + private MixedRealityInputAction ruleAction; + + /// + public MixedRealityInputAction RuleAction => ruleAction; + + [SerializeField] + [Tooltip("The criteria to check against for determining if the action should be raised.")] + private bool criteria; + + /// + public bool Criteria => criteria; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionRuleDigital.cs.meta b/Definitions/InputSystem/InputActionRuleDigital.cs.meta new file mode 100644 index 000000000..ac5433e0d --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleDigital.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 350dea0470194a2680934e4ed0dd81cb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionRuleDualAxis.cs b/Definitions/InputSystem/InputActionRuleDualAxis.cs new file mode 100644 index 000000000..2cdc0c8c2 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleDualAxis.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Generic Input Action Rule for raising actions based on specific criteria. + /// + [Serializable] + public struct InputActionRuleDualAxis : IInputActionRule + { + /// + /// Constructor. + /// + /// The Base Action that the rule will listen to. + /// The Action to raise if the criteria is met. + /// The criteria to check against for determining if the action should be raised. + public InputActionRuleDualAxis(MixedRealityInputAction baseAction, MixedRealityInputAction ruleAction, Vector2 criteria) + { + this.baseAction = baseAction; + this.ruleAction = ruleAction; + this.criteria = criteria; + } + + [SerializeField] + [Tooltip("The Base Action that the rule will listen to.")] + private MixedRealityInputAction baseAction; + + /// + public MixedRealityInputAction BaseAction => baseAction; + + [SerializeField] + [Tooltip("The Action to raise if the criteria is met.")] + private MixedRealityInputAction ruleAction; + + /// + public MixedRealityInputAction RuleAction => ruleAction; + + [SerializeField] + [Tooltip("The criteria to check against for determining if the action should be raised.")] + private Vector2 criteria; + + /// + public Vector2 Criteria => criteria; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionRuleDualAxis.cs.meta b/Definitions/InputSystem/InputActionRuleDualAxis.cs.meta new file mode 100644 index 000000000..1218b8620 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleDualAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0685a76ec25a4d68aac44844356571b3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionRulePoseAxis.cs b/Definitions/InputSystem/InputActionRulePoseAxis.cs new file mode 100644 index 000000000..88568797a --- /dev/null +++ b/Definitions/InputSystem/InputActionRulePoseAxis.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Generic Input Action Rule for raising actions based on specific criteria. + /// + [Serializable] + public struct InputActionRulePoseAxis : IInputActionRule + { + /// + /// Constructor. + /// + /// The Base Action that the rule will listen to. + /// The Action to raise if the criteria is met. + /// The criteria to check against for determining if the action should be raised. + public InputActionRulePoseAxis(MixedRealityInputAction baseAction, MixedRealityInputAction ruleAction, MixedRealityPose criteria) + { + this.baseAction = baseAction; + this.ruleAction = ruleAction; + this.criteria = criteria; + } + + [SerializeField] + [Tooltip("The Base Action that the rule will listen to.")] + private MixedRealityInputAction baseAction; + + /// + public MixedRealityInputAction BaseAction => baseAction; + + [SerializeField] + [Tooltip("The Action to raise if the criteria is met.")] + private MixedRealityInputAction ruleAction; + + /// + public MixedRealityInputAction RuleAction => ruleAction; + + [SerializeField] + [Tooltip("The criteria to check against for determining if the action should be raised.")] + private MixedRealityPose criteria; + + /// + public MixedRealityPose Criteria => criteria; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionRulePoseAxis.cs.meta b/Definitions/InputSystem/InputActionRulePoseAxis.cs.meta new file mode 100644 index 000000000..3bc419164 --- /dev/null +++ b/Definitions/InputSystem/InputActionRulePoseAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: abe27c2f5cdd49cf8f6e8f578a3bfbb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionRuleQuaternionAxis.cs b/Definitions/InputSystem/InputActionRuleQuaternionAxis.cs new file mode 100644 index 000000000..d8045cf74 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleQuaternionAxis.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Generic Input Action Rule for raising actions based on specific criteria. + /// + [Serializable] + public struct InputActionRuleQuaternionAxis : IInputActionRule + { + /// + /// Constructor. + /// + /// The Base Action that the rule will listen to. + /// The Action to raise if the criteria is met. + /// The criteria to check against for determining if the action should be raised. + public InputActionRuleQuaternionAxis(MixedRealityInputAction baseAction, MixedRealityInputAction ruleAction, Quaternion criteria) + { + this.baseAction = baseAction; + this.ruleAction = ruleAction; + this.criteria = criteria; + } + + [SerializeField] + [Tooltip("The Base Action that the rule will listen to.")] + private MixedRealityInputAction baseAction; + + /// + public MixedRealityInputAction BaseAction => baseAction; + + [SerializeField] + [Tooltip("The Action to raise if the criteria is met.")] + private MixedRealityInputAction ruleAction; + + /// + public MixedRealityInputAction RuleAction => ruleAction; + + [SerializeField] + [Tooltip("The criteria to check against for determining if the action should be raised.")] + private Quaternion criteria; + + /// + public Quaternion Criteria => criteria; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionRuleQuaternionAxis.cs.meta b/Definitions/InputSystem/InputActionRuleQuaternionAxis.cs.meta new file mode 100644 index 000000000..c34b076e2 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleQuaternionAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 85cc7c85e6a6410a8441bc9c28eb6040 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionRuleSingleAxis.cs b/Definitions/InputSystem/InputActionRuleSingleAxis.cs new file mode 100644 index 000000000..e6c19af7c --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleSingleAxis.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Generic Input Action Rule for raising actions based on specific criteria. + /// + [Serializable] + public struct InputActionRuleSingleAxis : IInputActionRule + { + /// + /// Constructor. + /// + /// The Base Action that the rule will listen to. + /// The Action to raise if the criteria is met. + /// The criteria to check against for determining if the action should be raised. + public InputActionRuleSingleAxis(MixedRealityInputAction baseAction, MixedRealityInputAction ruleAction, float criteria) + { + this.baseAction = baseAction; + this.ruleAction = ruleAction; + this.criteria = criteria; + } + + [SerializeField] + [Tooltip("The Base Action that the rule will listen to.")] + private MixedRealityInputAction baseAction; + + /// + public MixedRealityInputAction BaseAction => baseAction; + + [SerializeField] + [Tooltip("The Action to raise if the criteria is met.")] + private MixedRealityInputAction ruleAction; + + /// + public MixedRealityInputAction RuleAction => ruleAction; + + [SerializeField] + [Tooltip("The criteria to check against for determining if the action should be raised.")] + private float criteria; + + /// + public float Criteria => criteria; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionRuleSingleAxis.cs.meta b/Definitions/InputSystem/InputActionRuleSingleAxis.cs.meta new file mode 100644 index 000000000..daea740f3 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleSingleAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57457eec06a44d1abd7bc09a41d7a033 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/InputActionRuleVectorAxis.cs b/Definitions/InputSystem/InputActionRuleVectorAxis.cs new file mode 100644 index 000000000..708fe0fb1 --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleVectorAxis.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Generic Input Action Rule for raising actions based on specific criteria. + /// + [Serializable] + public struct InputActionRuleVectorAxis : IInputActionRule + { + /// + /// Constructor. + /// + /// The Base Action that the rule will listen to. + /// The Action to raise if the criteria is met. + /// The criteria to check against for determining if the action should be raised. + public InputActionRuleVectorAxis(MixedRealityInputAction baseAction, MixedRealityInputAction ruleAction, Vector3 criteria) + { + this.baseAction = baseAction; + this.ruleAction = ruleAction; + this.criteria = criteria; + } + + [SerializeField] + [Tooltip("The Base Action that the rule will listen to.")] + private MixedRealityInputAction baseAction; + + /// + public MixedRealityInputAction BaseAction => baseAction; + + [SerializeField] + [Tooltip("The Action to raise if the criteria is met.")] + private MixedRealityInputAction ruleAction; + + /// + public MixedRealityInputAction RuleAction => ruleAction; + + [SerializeField] + [Tooltip("The criteria to check against for determining if the action should be raised.")] + private Vector3 criteria; + + /// + public Vector3 Criteria => criteria; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/InputActionRuleVectorAxis.cs.meta b/Definitions/InputSystem/InputActionRuleVectorAxis.cs.meta new file mode 100644 index 000000000..9b559ee8a --- /dev/null +++ b/Definitions/InputSystem/InputActionRuleVectorAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac08ec80d098471b864ea23d2c456d20 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/KeywordAndResponse.cs b/Definitions/InputSystem/KeywordAndResponse.cs new file mode 100644 index 000000000..2bfb3bfbd --- /dev/null +++ b/Definitions/InputSystem/KeywordAndResponse.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using UnityEngine.Events; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Keyword/UnityEvent pair that ties voice input to UnityEvents wired up in the inspector. + /// + [Serializable] + public struct KeywordAndResponse + { + /// + /// Constructor. + /// + /// The keyword to listen for. + /// The handler to be invoked when the keyword is recognized. + public KeywordAndResponse(string keyword, UnityEvent response) + { + this.keyword = keyword; + this.response = response; + } + + [SerializeField] + [Tooltip("The keyword to listen for.")] + private string keyword; + + /// + /// The keyword to listen for. + /// + public string Keyword => keyword; + + [SerializeField] + [Tooltip("The handler to be invoked when the keyword is recognized.")] + private UnityEvent response; + + /// + /// The handler to be invoked when the keyword is recognized. + /// + public UnityEvent Response => response; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/KeywordAndResponse.cs.meta b/Definitions/InputSystem/KeywordAndResponse.cs.meta new file mode 100644 index 000000000..4398bd2d4 --- /dev/null +++ b/Definitions/InputSystem/KeywordAndResponse.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f0f01206e8664576aae1b3e87b084dce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityGestureMapping.cs b/Definitions/InputSystem/MixedRealityGestureMapping.cs new file mode 100644 index 000000000..45a2f4e3e --- /dev/null +++ b/Definitions/InputSystem/MixedRealityGestureMapping.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.Devices; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Data structure for mapping gestures to s that can be raised by the Input System. + /// + [Serializable] + public struct MixedRealityGestureMapping + { + /// + /// Constructor. + /// + /// + /// + /// + public MixedRealityGestureMapping(string description, GestureInputType gestureType, MixedRealityInputAction action) + { + this.description = description; + this.gestureType = gestureType; + this.action = action; + } + + [SerializeField] + private string description; + + /// + /// Simple, human readable description of the gesture. + /// + public string Description => description; + + [SerializeField] + private GestureInputType gestureType; + + /// + /// Type of Gesture. + /// + public GestureInputType GestureType => gestureType; + + [SerializeField] + private MixedRealityInputAction action; + + /// + /// Action for the associated gesture. + /// + public MixedRealityInputAction Action => action; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/MixedRealityGestureMapping.cs.meta b/Definitions/InputSystem/MixedRealityGestureMapping.cs.meta new file mode 100644 index 000000000..2b2e507cc --- /dev/null +++ b/Definitions/InputSystem/MixedRealityGestureMapping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad5dd1d4a97e4e55bd67d1e83bd9aff8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityGesturesProfile.cs b/Definitions/InputSystem/MixedRealityGesturesProfile.cs new file mode 100644 index 000000000..92fe14c9a --- /dev/null +++ b/Definitions/InputSystem/MixedRealityGesturesProfile.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Configuration profile settings for setting up and consuming gesture based input actions. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Gestures Profile", fileName = "MixedRealityGesturesProfile", order = (int)CreateProfileMenuItemIndices.Gestures)] + public class MixedRealityGesturesProfile : BaseMixedRealityProfile + { + [SerializeField] + private MixedRealityGestureMapping[] gestures = + { + new MixedRealityGestureMapping("Hold", GestureInputType.Hold, MixedRealityInputAction.None), + new MixedRealityGestureMapping("Navigation", GestureInputType.Navigation, MixedRealityInputAction.None), + new MixedRealityGestureMapping("Manipulation", GestureInputType.Manipulation, MixedRealityInputAction.None), + }; + + /// + /// The currently configured gestures for the application. + /// + public MixedRealityGestureMapping[] Gestures => gestures; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/MixedRealityGesturesProfile.cs.meta b/Definitions/InputSystem/MixedRealityGesturesProfile.cs.meta new file mode 100644 index 000000000..788238335 --- /dev/null +++ b/Definitions/InputSystem/MixedRealityGesturesProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc4e210e45f74f1c8729d17634bc5dfd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityInputAction.cs b/Definitions/InputSystem/MixedRealityInputAction.cs new file mode 100644 index 000000000..896b3d708 --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputAction.cs @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// An Input Action for mapping an action to an Input Sources Button, Joystick, Sensor, etc. + /// + [Serializable] + public struct MixedRealityInputAction : IEqualityComparer + { + /// + /// Constructor. + /// + /// + /// + /// + public MixedRealityInputAction(uint id, string description, AxisType axisConstraint = AxisType.None) + { + this.id = id; + this.description = description; + this.axisConstraint = axisConstraint; + } + + public static MixedRealityInputAction None { get; } = new MixedRealityInputAction(0, "None"); + + /// + /// The Unique Id of this Input Action. + /// + public uint Id => id; + + [SerializeField] + private uint id; + + /// + /// A short description of the Input Action. + /// + public string Description => description; + + [SerializeField] + private string description; + + /// + /// The Axis constraint for the Input Action + /// + public AxisType AxisConstraint => axisConstraint; + + [SerializeField] + private AxisType axisConstraint; + + public static bool operator ==(MixedRealityInputAction left, MixedRealityInputAction right) + { + return left.Equals(right); + } + + public static bool operator !=(MixedRealityInputAction left, MixedRealityInputAction right) + { + return !left.Equals(right); + } + + #region IEqualityComparer Implementation + + bool IEqualityComparer.Equals(object left, object right) + { + if (ReferenceEquals(null, left) || ReferenceEquals(null, right)) { return false; } + if (!(left is MixedRealityInputAction) || !(right is MixedRealityInputAction)) { return false; } + return ((MixedRealityInputAction)left).Equals((MixedRealityInputAction)right); + } + + public bool Equals(MixedRealityInputAction other) + { + return Id == other.Id && + AxisConstraint == other.AxisConstraint; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { return false; } + return obj is MixedRealityInputAction && Equals((MixedRealityInputAction)obj); + } + + int IEqualityComparer.GetHashCode(object obj) + { + return obj is MixedRealityInputAction ? ((MixedRealityInputAction)obj).GetHashCode() : 0; + } + + public override int GetHashCode() + { + return $"{Id}.{AxisConstraint}".GetHashCode(); + } + + #endregion IEqualityComparer Implementation + } +} diff --git a/Definitions/InputSystem/MixedRealityInputAction.cs.meta b/Definitions/InputSystem/MixedRealityInputAction.cs.meta new file mode 100644 index 000000000..5f151f8be --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputAction.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 45e07572359b4765aa517badc4245256 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs b/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs new file mode 100644 index 000000000..62cdc069a --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.InputSystem +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Input Action Rules Profile", fileName = "MixedRealityInputActionRulesProfile", order = (int)CreateProfileMenuItemIndices.InputActionRules)] + public class MixedRealityInputActionRulesProfile : BaseMixedRealityProfile + { + [SerializeField] + private InputActionRuleDigital[] inputActionRulesDigital = null; + + /// + /// All the Input Action Rules for based s + /// + public InputActionRuleDigital[] InputActionRulesDigital => inputActionRulesDigital; + + [SerializeField] + private InputActionRuleSingleAxis[] inputActionRulesSingleAxis = null; + + /// + /// All the Input Action Rules for based s + /// + public InputActionRuleSingleAxis[] InputActionRulesSingleAxis => inputActionRulesSingleAxis; + + [SerializeField] + private InputActionRuleDualAxis[] inputActionRulesDualAxis = null; + + /// + /// All the Input Action Rules for based s + /// + public InputActionRuleDualAxis[] InputActionRulesDualAxis => inputActionRulesDualAxis; + + [SerializeField] + private InputActionRuleVectorAxis[] inputActionRulesVectorAxis = null; + + /// + /// All the Input Action Rules for based s + /// + public InputActionRuleVectorAxis[] InputActionRulesVectorAxis => inputActionRulesVectorAxis; + + [SerializeField] + private InputActionRuleQuaternionAxis[] inputActionRulesQuaternionAxis = null; + + /// + /// All the Input Action Rules for based s + /// + public InputActionRuleQuaternionAxis[] InputActionRulesQuaternionAxis => inputActionRulesQuaternionAxis; + + [SerializeField] + private InputActionRulePoseAxis[] inputActionRulesPoseAxis = null; + + /// + /// All the Input Action Rules for based s + /// + public InputActionRulePoseAxis[] InputActionRulesPoseAxis => inputActionRulesPoseAxis; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs.meta b/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs.meta new file mode 100644 index 000000000..095e877ed --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputActionRulesProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08ea25856c6c4f5c80992c2c14a81027 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityInputActionsProfile.cs b/Definitions/InputSystem/MixedRealityInputActionsProfile.cs new file mode 100644 index 000000000..f4c45e376 --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputActionsProfile.cs @@ -0,0 +1,93 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Configuration profile settings for setting up and consuming Input Actions. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Input Actions Profile", fileName = "MixedRealityInputActionsProfile", order = (int)CreateProfileMenuItemIndices.InputActions)] + public class MixedRealityInputActionsProfile : BaseMixedRealityProfile + { + private readonly string[] defaultInputActions = + { + "Select", + "Menu", + "Grip", + "Pointer", + "Walk", + "Look", + "Interact", + "Pickup", + "Inventory", + "ConversationSelect" + }; // Examples only, to be refined later. + + private readonly AxisType[] defaultInputActionsAxis = + { + AxisType.Digital, + AxisType.Digital, + AxisType.SixDof, + AxisType.SixDof, + AxisType.DualAxis, + AxisType.DualAxis, + AxisType.DualAxis, + AxisType.Digital, + AxisType.DualAxis, + AxisType.DualAxis + }; // Examples only, to be refined later + + [SerializeField] + [Tooltip("The list of actions users can do in your application.")] + private MixedRealityInputAction[] inputActions = + { + // 0 is reserved for "None" + new MixedRealityInputAction(1, "Select"), + new MixedRealityInputAction(2, "Menu"), + new MixedRealityInputAction(3, "Grip") + }; // Examples only, to be refined later + + /// + /// The list of actions users can do in your application. + /// + /// Input Actions are device agnostic and can be paired with any number of device inputs across all platforms. + public MixedRealityInputAction[] InputActions => inputActions; + + /// + /// Reset the current InputActions definitions to the Mixed Reality Toolkit defaults + /// If existing mappings exist, they will be preserved and pushed to the end of the array + /// + /// Default XRTK Actions plus any custom actions (if already configured) + public MixedRealityInputAction[] LoadMixedRealityToolKitDefaults() + { + var defaultActions = new List(); + bool exists = false; + + for (uint i = 0; i < defaultInputActions.Length; i++) + { + defaultActions.Add(new MixedRealityInputAction(i, defaultInputActions[i], defaultInputActionsAxis[i])); + } + + for (int i = 0; i < inputActions.Length; i++) + { + if (defaultActions.Contains(inputActions[i])) + { + exists = true; + } + + if (!exists) + { + defaultActions.Add(inputActions[i]); + } + + exists = false; + } + + return inputActions = defaultActions.ToArray(); + } + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/MixedRealityInputActionsProfile.cs.meta b/Definitions/InputSystem/MixedRealityInputActionsProfile.cs.meta new file mode 100644 index 000000000..29ebe9c1b --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputActionsProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e7586d5ce1704458aad54224cfafad39 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityInputSystemProfile.cs b/Definitions/InputSystem/MixedRealityInputSystemProfile.cs new file mode 100644 index 000000000..9c0636b8f --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputSystemProfile.cs @@ -0,0 +1,168 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Providers.Controllers; +using XRTK.Services; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Configuration profile settings for setting up controller pointers. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System Profile", fileName = "MixedRealityInputSystemProfile", order = (int)CreateProfileMenuItemIndices.Input)] + public class MixedRealityInputSystemProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("The focus provider service concrete type to use when raycasting.")] + [Implements(typeof(IMixedRealityFocusProvider), TypeGrouping.ByNamespaceFlat)] + private SystemType focusProviderType; + + /// + /// The focus provider service concrete type to use when raycasting. + /// + public SystemType FocusProviderType + { + get => focusProviderType; + internal set => focusProviderType = value; + } + + [SerializeField] + [Tooltip("Input System Action Mapping profile for wiring up Controller input to Actions.")] + private MixedRealityInputActionsProfile inputActionsProfile; + + /// + /// Input System Action Mapping profile for wiring up Controller input to Actions. + /// + public MixedRealityInputActionsProfile InputActionsProfile + { + get => inputActionsProfile; + internal set => inputActionsProfile = value; + } + + [SerializeField] + [Tooltip("Input Action Rules Profile for raising actions based on specific criteria.")] + private MixedRealityInputActionRulesProfile inputActionRulesProfile; + + /// + /// Input Action Rules Profile for raising actions based on specific criteria. + /// + public MixedRealityInputActionRulesProfile InputActionRulesProfile + { + get => inputActionRulesProfile; + internal set => inputActionRulesProfile = value; + } + + [SerializeField] + [Tooltip("Pointer Configuration options")] + private MixedRealityPointerProfile pointerProfile; + + /// + /// Pointer configuration options + /// + public MixedRealityPointerProfile PointerProfile + { + get => pointerProfile; + internal set => pointerProfile = value; + } + + [SerializeField] + [Tooltip("Gesture Mapping Profile for recognizing gestures across all platforms.")] + private MixedRealityGesturesProfile gesturesProfile; + + /// + /// Gesture Mapping Profile for recognizing gestures across all platforms. + /// + public MixedRealityGesturesProfile GesturesProfile + { + get => gesturesProfile; + internal set => gesturesProfile = value; + } + + /// + /// Is the speech Commands Enabled? + /// + public bool IsSpeechCommandsEnabled => speechCommandsProfile != null && SpeechDataProvider != null && MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled; + + [SerializeField] + [Tooltip("Speech Command profile for wiring up Voice Input to Actions.")] + private MixedRealitySpeechCommandsProfile speechCommandsProfile; + + /// + /// Speech commands profile for configured speech commands, for use by the speech recognition system + /// + public MixedRealitySpeechCommandsProfile SpeechCommandsProfile + { + get => speechCommandsProfile; + internal set => speechCommandsProfile = value; + } + + /// + /// Is Dictation Enabled? + /// + public bool IsDictationEnabled => MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && DictationDataProvider != null; + + [SerializeField] + [Tooltip("Device profile for registering platform specific input data sources.")] + private MixedRealityControllerDataProvidersProfile controllerDataProvidersProfile; + + /// + /// Active profile for controller mapping configuration + /// + public MixedRealityControllerDataProvidersProfile ControllerDataProvidersProfile + { + get => controllerDataProvidersProfile; + internal set => controllerDataProvidersProfile = value; + } + + [SerializeField] + private MixedRealityControllerMappingProfiles controllerMappingProfiles; + + /// + /// The profile for setting up registered data provider controller mappings. + /// + public MixedRealityControllerMappingProfiles ControllerMappingProfiles + { + get => controllerMappingProfiles; + internal set => controllerMappingProfiles = value; + } + + [SerializeField] + [Tooltip("Device profile for rendering spatial controllers.")] + private MixedRealityControllerVisualizationProfile controllerVisualizationProfile; + + /// + /// Device profile for rendering spatial controllers. + /// + public MixedRealityControllerVisualizationProfile ControllerVisualizationProfile + { + get => controllerVisualizationProfile; + internal set => controllerVisualizationProfile = value; + } + + private IMixedRealityFocusProvider focusProvider; + + /// + /// Current Registered . + /// + public IMixedRealityFocusProvider FocusProvider => focusProvider ?? (focusProvider = MixedRealityToolkit.GetService()); + + private IMixedRealitySpeechDataProvider speechDataProvider; + + /// + /// Current Registered + /// + public IMixedRealitySpeechDataProvider SpeechDataProvider => speechDataProvider ?? (speechDataProvider = MixedRealityToolkit.GetService()); + + private IMixedRealityDictationDataProvider dictationDataProvider; + + /// + /// Current Registered . + /// + public IMixedRealityDictationDataProvider DictationDataProvider => dictationDataProvider ?? (dictationDataProvider = MixedRealityToolkit.GetService()); + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/MixedRealityInputSystemProfile.cs.meta b/Definitions/InputSystem/MixedRealityInputSystemProfile.cs.meta new file mode 100644 index 000000000..d57d47290 --- /dev/null +++ b/Definitions/InputSystem/MixedRealityInputSystemProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 96a16673d92d4e8fa24750357b3cf906 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealityPointerProfile.cs b/Definitions/InputSystem/MixedRealityPointerProfile.cs new file mode 100644 index 000000000..2d7bcfbe2 --- /dev/null +++ b/Definitions/InputSystem/MixedRealityPointerProfile.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Configuration profile settings for setting up controller pointers. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Pointer Profile", fileName = "MixedRealityInputPointerProfile", order = (int)CreateProfileMenuItemIndices.Pointer)] + public class MixedRealityPointerProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("Maximum distance at which all pointers can collide with a GameObject, unless it has an override extent.")] + private float pointingExtent = 10f; + + /// + /// Maximum distance at which all pointers can collide with a GameObject, unless it has an override extent. + /// + public float PointingExtent => pointingExtent; + + [SerializeField] + [Tooltip("The LayerMasks, in prioritized order, that are used to determine the GazeTarget when raycasting.")] + private LayerMask[] pointingRaycastLayerMasks = { UnityEngine.Physics.DefaultRaycastLayers }; + + /// + /// The LayerMasks, in prioritized order, that are used to determine the GazeTarget when raycasting. + /// + public LayerMask[] PointingRaycastLayerMasks => pointingRaycastLayerMasks; + + [SerializeField] + private bool debugDrawPointingRays = false; + + /// + /// Toggle to enable or disable debug pointing rays. + /// + public bool DebugDrawPointingRays => debugDrawPointingRays; + + [SerializeField] + private Color[] debugDrawPointingRayColors = null; + + /// + /// The colors to use when debugging pointer rays. + /// + public Color[] DebugDrawPointingRayColors => debugDrawPointingRayColors; + + [Prefab] + [SerializeField] + [Tooltip("The gaze cursor prefab to use on the Gaze pointer.")] + private GameObject gazeCursorPrefab = null; + + /// + /// The gaze cursor prefab to use on the Gaze pointer. + /// + public GameObject GazeCursorPrefab => gazeCursorPrefab; + + [SerializeField] + [Tooltip("The concrete type of IMixedRealityGazeProvider to use.")] + [Implements(typeof(IMixedRealityGazeProvider), TypeGrouping.ByNamespaceFlat)] + private SystemType gazeProviderType; + + /// + /// The concrete type of to use. + /// + public SystemType GazeProviderType + { + get => gazeProviderType; + internal set => gazeProviderType = value; + } + + [SerializeField] + private PointerOption[] pointerOptions = new PointerOption[0]; + + /// + /// The Pointer options for this profile. + /// + public PointerOption[] PointerOptions => pointerOptions; + } +} diff --git a/Definitions/InputSystem/MixedRealityPointerProfile.cs.meta b/Definitions/InputSystem/MixedRealityPointerProfile.cs.meta new file mode 100644 index 000000000..09d874c55 --- /dev/null +++ b/Definitions/InputSystem/MixedRealityPointerProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c156ea3e1a7a493dac236ed84c4a819a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs b/Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs new file mode 100644 index 000000000..fb9ffed98 --- /dev/null +++ b/Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Configuration profile settings for setting up and consuming Speech Commands. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Input System/Speech Commands Profile", fileName = "MixedRealitySpeechCommandsProfile", order = (int)CreateProfileMenuItemIndices.SpeechCommands)] + public class MixedRealitySpeechCommandsProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("Whether the recognizer should be activated on start.")] + private AutoStartBehavior startBehavior = AutoStartBehavior.AutoStart; + + /// + /// The list of Speech Commands users use in your application. + /// + public AutoStartBehavior SpeechRecognizerStartBehavior => startBehavior; + + [SerializeField] + [Tooltip("Select the minimum confidence level for recognized words")] + private RecognitionConfidenceLevel recognitionConfidenceLevel = RecognitionConfidenceLevel.Medium; + + /// + /// The speech recognizer's minimum confidence level setting that will raise the action. + /// + public RecognitionConfidenceLevel SpeechRecognitionConfidenceLevel => recognitionConfidenceLevel; + + [SerializeField] + [Tooltip("The list of Speech Commands users use in your application.")] + private SpeechCommands[] speechCommands = new SpeechCommands[0]; + + /// + /// The list of Speech Commands users use in your application. + /// + public SpeechCommands[] SpeechCommands => speechCommands; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs.meta b/Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs.meta new file mode 100644 index 000000000..0e85b3d32 --- /dev/null +++ b/Definitions/InputSystem/MixedRealitySpeechCommandsProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7108692c36a84dfaaa0984f6c5d6d3a3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/PointerOption.cs b/Definitions/InputSystem/PointerOption.cs new file mode 100644 index 000000000..0af88b81f --- /dev/null +++ b/Definitions/InputSystem/PointerOption.cs @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Defines a pointer option to assign to a controller. + /// + [Serializable] + public struct PointerOption + { + /// + /// Constructor. + /// + /// + /// + /// + public PointerOption(IMixedRealityController controllerType, Handedness handedness, GameObject pointerPrefab) + { + this.controllerType = new SystemType(controllerType.GetType()); + this.handedness = handedness; + this.pointerPrefab = pointerPrefab; + } + + [SerializeField] + [Tooltip("The type of Controller this pointer will attach itself to at runtime.\nNote: If None is selected, then it will attach to any controller type.")] + [Implements(typeof(IMixedRealityController), TypeGrouping.ByNamespaceFlat)] + private SystemType controllerType; + + /// + /// The type of Controller this pointer will attach itself to at runtime. + /// + /// If is selected, then it will attach to any controller type + public SystemType ControllerType => controllerType; + + [SerializeField] + [Tooltip("Defines which hand to create the pointer prefab on")] + private Handedness handedness; + + /// + /// Defines which hand to create the pointer prefab on. + /// + public Handedness Handedness => handedness; + + [SerializeField] + private GameObject pointerPrefab; + + public GameObject PointerPrefab => pointerPrefab; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/PointerOption.cs.meta b/Definitions/InputSystem/PointerOption.cs.meta new file mode 100644 index 000000000..73da64bd6 --- /dev/null +++ b/Definitions/InputSystem/PointerOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8787938f7b3a4cb7b1d8750ec12cc56f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/SpeechCommands.cs b/Definitions/InputSystem/SpeechCommands.cs new file mode 100644 index 000000000..67997c6fb --- /dev/null +++ b/Definitions/InputSystem/SpeechCommands.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Data structure for mapping Voice and Keyboard input to s that can be raised by the Input System. + /// + [Serializable] + public struct SpeechCommands + { + /// + /// Constructor. + /// + /// The Keyword. + /// The KeyCode. + /// The Action to perform when Keyword or KeyCode is recognized. + public SpeechCommands(string keyword, KeyCode keyCode, MixedRealityInputAction action) + { + this.keyword = keyword; + this.keyCode = keyCode; + this.action = action; + } + + [SerializeField] + [Tooltip("The Keyword to listen for.")] + private string keyword; + + /// + /// The Keyword to listen for. + /// + public string Keyword => keyword; + + [SerializeField] + [Tooltip("The corresponding KeyCode that also raises the same action as the Keyword.")] + private KeyCode keyCode; + + /// + /// The corresponding KeyCode that also raises the same action as the Keyword. + /// + public KeyCode KeyCode => keyCode; + + [SerializeField] + [Tooltip("The Action that is raised by either the Keyword or KeyCode.")] + private MixedRealityInputAction action; + + /// + /// The that is raised by either the Keyword or KeyCode. + /// + public MixedRealityInputAction Action => action; + } +} \ No newline at end of file diff --git a/Definitions/InputSystem/SpeechCommands.cs.meta b/Definitions/InputSystem/SpeechCommands.cs.meta new file mode 100644 index 000000000..2bf261abe --- /dev/null +++ b/Definitions/InputSystem/SpeechCommands.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6a1a853cdd56483f91057176bd6585b7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/InputSystem/WindowsGestureSettings.cs b/Definitions/InputSystem/WindowsGestureSettings.cs new file mode 100644 index 000000000..5305ff74a --- /dev/null +++ b/Definitions/InputSystem/WindowsGestureSettings.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Definitions.InputSystem +{ + /// + /// Copy of Unity's + /// + [Flags] + public enum WindowsGestureSettings + { + /// + /// Enable support for the tap gesture. + /// + Tap = 1 << 0, // HEX: 0x00000001 | Decimal: 1 + + /// + /// Enable support for the double-tap gesture. + /// + DoubleTap = 1 << 1, // HEX: 0x00000002 | Decimal: 2 + + /// + /// Enable support for the hold gesture. + /// + Hold = 1 << 2, // HEX: 0x00000004 | Decimal: 4 + + /// + /// Enable support for the manipulation gesture which tracks changes to the hand's position. This gesture is relative to the start position of the gesture and measures an absolute movement through the world. + /// + ManipulationTranslate = 1 << 3, // HEX: 0x00000008 | Decimal: 8 + + /// + /// Enable support for the navigation gesture, in the horizontal axis. + /// + NavigationX = 1 << 4, // HEX: 0x00000010 | Decimal: 16 + + /// + /// Enable support for the navigation gesture, in the vertical axis. + /// + NavigationY = 1 << 5, // HEX: 0x00000020 | Decimal: 32 + + /// + /// Enable support for the navigation gesture, in the depth axis. + /// + NavigationZ = 1 << 6, // HEX: 0x00000040 | Decimal: 64 + + /// + /// Enable support for the navigation gesture, in the horizontal axis using rails (guides). + /// + NavigationRailsX = 1 << 7, // HEX: 0x00000080 | Decimal: 128 + + /// + /// Enable support for the navigation gesture, in the vertical axis using rails (guides). + /// + NavigationRailsY = 1 << 8, // HEX: 0x00000100 | Decimal: 256 + + /// + /// Enable support for the navigation gesture, in the depth axis using rails (guides). + /// + NavigationRailsZ = 1 << 9, // HEX: 0x00000200 | Decimal: 512 + } +} diff --git a/Definitions/InputSystem/WindowsGestureSettings.cs.meta b/Definitions/InputSystem/WindowsGestureSettings.cs.meta new file mode 100644 index 000000000..fc1d58f07 --- /dev/null +++ b/Definitions/InputSystem/WindowsGestureSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 652c125e359c4c4eb7f5455e567629d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines.meta b/Definitions/Lines.meta new file mode 100644 index 000000000..2793ac1d7 --- /dev/null +++ b/Definitions/Lines.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f1c5566cc7074fc0a9ca5355f4797e1c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/DistortionMode.cs b/Definitions/Lines/DistortionMode.cs new file mode 100644 index 000000000..146773adb --- /dev/null +++ b/Definitions/Lines/DistortionMode.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// How to apply the distortion along the line. + /// + public enum DistortionMode + { + /// + /// Use the normalized length of the line plus its distortion strength curve to determine distortion strength + /// + NormalizedLength = 0, + /// + /// Use a single value to determine distortion strength + /// + Uniform, + } +} \ No newline at end of file diff --git a/Definitions/Lines/DistortionMode.cs.meta b/Definitions/Lines/DistortionMode.cs.meta new file mode 100644 index 000000000..95ab7745a --- /dev/null +++ b/Definitions/Lines/DistortionMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e5512ea327ab489bac5d5237426dbb83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/InterpolationMode.cs b/Definitions/Lines/InterpolationMode.cs new file mode 100644 index 000000000..e2b44886e --- /dev/null +++ b/Definitions/Lines/InterpolationMode.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// Default options for how to distribute interpolated points in a line renderer + /// + public enum InterpolationMode + { + /// + /// Specify the number of interpolation steps manually + /// + FromSteps = 0, + /// + /// Create steps based on total length of line + manually specified length + /// + FromLength, + /// + /// Create steps based on total length of line + animation curve + /// + FromCurve + } +} \ No newline at end of file diff --git a/Definitions/Lines/InterpolationMode.cs.meta b/Definitions/Lines/InterpolationMode.cs.meta new file mode 100644 index 000000000..1cb5c4f10 --- /dev/null +++ b/Definitions/Lines/InterpolationMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55cf753ecefd40918aa817f4cdff4158 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/InterpolationType.cs b/Definitions/Lines/InterpolationType.cs new file mode 100644 index 000000000..f814ad3ea --- /dev/null +++ b/Definitions/Lines/InterpolationType.cs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// Defines the type of interpolation to use when calculating a spline. + /// + public enum InterpolationType + { + Bezier = 0, + CatmullRom, + Hermite, + } +} \ No newline at end of file diff --git a/Definitions/Lines/InterpolationType.cs.meta b/Definitions/Lines/InterpolationType.cs.meta new file mode 100644 index 000000000..757077448 --- /dev/null +++ b/Definitions/Lines/InterpolationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5220f47eeee04dd88d7c17ffac5c1a6f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/LinePointTransformMode.cs b/Definitions/Lines/LinePointTransformMode.cs new file mode 100644 index 000000000..ce28ba478 --- /dev/null +++ b/Definitions/Lines/LinePointTransformMode.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// Defines how a base line data provider will transform its points + /// + public enum LinePointTransformMode + { + /// + /// Use the local line transform. More reliable but with a performance cost. + /// + UseTransform, + /// + /// Use a matrix. Lines that are not active and enabled will not update point positions. + /// + UseMatrix, + } +} \ No newline at end of file diff --git a/Definitions/Lines/LinePointTransformMode.cs.meta b/Definitions/Lines/LinePointTransformMode.cs.meta new file mode 100644 index 000000000..6f0099fec --- /dev/null +++ b/Definitions/Lines/LinePointTransformMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f1ca824a68e4e04a0cd0561870cff4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/LineRotationMode.cs b/Definitions/Lines/LineRotationMode.cs new file mode 100644 index 000000000..811651683 --- /dev/null +++ b/Definitions/Lines/LineRotationMode.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// Defines how to calculate the line's rotation at any given point. + /// + public enum LineRotationMode + { + /// + /// Don't rotate + /// + None = 0, + /// + /// Use velocity to calculate the line's rotation + /// + Velocity, + /// + /// Rotate relative to direction from origin point + /// + RelativeToOrigin, + } +} \ No newline at end of file diff --git a/Definitions/Lines/LineRotationMode.cs.meta b/Definitions/Lines/LineRotationMode.cs.meta new file mode 100644 index 000000000..9088d852b --- /dev/null +++ b/Definitions/Lines/LineRotationMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acee965d37b147b2a38883b4bc221cd5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/PointDistributionMode.cs b/Definitions/Lines/PointDistributionMode.cs new file mode 100644 index 000000000..5acbb3c53 --- /dev/null +++ b/Definitions/Lines/PointDistributionMode.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// Defines how to get an interpolated point along a line + /// + public enum PointDistributionMode + { + /// + /// Don't adjust placement + /// + None = 0, + /// + /// Adjust placement automatically (default) + /// + Auto, + /// + /// Place based on distance + /// + DistanceSingleValue, + /// + /// Place based on curve + /// + DistanceCurveValue, + } +} \ No newline at end of file diff --git a/Definitions/Lines/PointDistributionMode.cs.meta b/Definitions/Lines/PointDistributionMode.cs.meta new file mode 100644 index 000000000..5fc613f56 --- /dev/null +++ b/Definitions/Lines/PointDistributionMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 867280352ab7441f8c35a345891b118c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Lines/StepMode.cs b/Definitions/Lines/StepMode.cs new file mode 100644 index 000000000..4765c7ee3 --- /dev/null +++ b/Definitions/Lines/StepMode.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Lines +{ + /// + /// Defines how to generate points in a line renderer + /// + public enum StepMode + { + /// + /// Draw points based on LineStepCount + /// + Interpolated = 0, + /// + /// Draw only the points available in the source - use this for hard edges + /// + FromSource, + } +} \ No newline at end of file diff --git a/Definitions/Lines/StepMode.cs.meta b/Definitions/Lines/StepMode.cs.meta new file mode 100644 index 000000000..acd9d5753 --- /dev/null +++ b/Definitions/Lines/StepMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 300739a964ce4035bf060e6951f10577 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/MixedRealityCameraProfile.cs b/Definitions/MixedRealityCameraProfile.cs new file mode 100644 index 000000000..78e4464dd --- /dev/null +++ b/Definitions/MixedRealityCameraProfile.cs @@ -0,0 +1,102 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions +{ + /// + /// This tells you if your head mounted display (HMD) + /// is a transparent device or an occluded device. + /// Based on those values, you can customize your camera and quality settings. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Camera Profile", fileName = "MixedRealityCameraProfile", order = (int)CreateProfileMenuItemIndices.Camera)] + public class MixedRealityCameraProfile : BaseMixedRealityProfile + { + [SerializeField] + private bool isCameraPersistent = false; + + /// + /// Should the camera be reused in each scene? + /// If so, then the camera's root will be flagged so it is not destroyed when the scene is unloaded. + /// + public bool IsCameraPersistent => isCameraPersistent; + + [SerializeField] + [Tooltip("The near clipping plane distance for an opaque display.")] + private float nearClipPlaneOpaqueDisplay = 0.1f; + + /// + /// The near clipping plane distance for an opaque display. + /// + public float NearClipPlaneOpaqueDisplay + { + get => nearClipPlaneOpaqueDisplay; + internal set => nearClipPlaneOpaqueDisplay = value; + } + + [SerializeField] + [Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")] + private CameraClearFlags cameraClearFlagsOpaqueDisplay = CameraClearFlags.Skybox; + + /// + /// Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display. + /// + public CameraClearFlags CameraClearFlagsOpaqueDisplay => cameraClearFlagsOpaqueDisplay; + + [SerializeField] + [Tooltip("Background color for a transparent display.")] + private Color backgroundColorOpaqueDisplay = Color.black; + + /// + /// Background color for a transparent display. + /// + public Color BackgroundColorOpaqueDisplay => backgroundColorOpaqueDisplay; + + [SerializeField] + [Tooltip("Set the desired quality for your application for opaque display.")] + private int opaqueQualityLevel = 0; + + /// + /// Set the desired quality for your application for opaque display. + /// + public int OpaqueQualityLevel => opaqueQualityLevel; + + [SerializeField] + [Tooltip("The near clipping plane distance for a transparent display.")] + private float nearClipPlaneTransparentDisplay = 0.85f; + + /// + /// The near clipping plane distance for a transparent display. + /// + public float NearClipPlaneTransparentDisplay => nearClipPlaneTransparentDisplay; + + [SerializeField] + [Tooltip("Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display.")] + private CameraClearFlags cameraClearFlagsTransparentDisplay = CameraClearFlags.SolidColor; + + /// + /// Values for Camera.clearFlags, determining what to clear when rendering a Camera for an opaque display. + /// + public CameraClearFlags CameraClearFlagsTransparentDisplay => cameraClearFlagsTransparentDisplay; + + [SerializeField] + [Tooltip("Background color for a transparent display.")] + private Color backgroundColorTransparentDisplay = Color.clear; + + /// + /// Background color for a transparent display. + /// + public Color BackgroundColorTransparentDisplay => backgroundColorTransparentDisplay; + + [SerializeField] + [Tooltip("Set the desired quality for your application for transparent display.")] + private int transparentQualityLevel = 0; + + /// + /// Set the desired quality for your application for transparent display. + /// + public int TransparentQualityLevel => transparentQualityLevel; + } +} diff --git a/Definitions/MixedRealityCameraProfile.cs.meta b/Definitions/MixedRealityCameraProfile.cs.meta new file mode 100644 index 000000000..215587c96 --- /dev/null +++ b/Definitions/MixedRealityCameraProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50519740e1dd4b5f97f104c7dc8d6ae6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/MixedRealityRegisteredServiceProvidersProfile.cs b/Definitions/MixedRealityRegisteredServiceProvidersProfile.cs new file mode 100644 index 000000000..3db6af778 --- /dev/null +++ b/Definitions/MixedRealityRegisteredServiceProvidersProfile.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions +{ + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Registered Service Providers Profile", fileName = "MixedRealityRegisteredServiceProvidersProfile", order = (int)CreateProfileMenuItemIndices.RegisteredServiceProviders)] + public class MixedRealityRegisteredServiceProvidersProfile : BaseMixedRealityProfile + { + [SerializeField] + private MixedRealityServiceConfiguration[] configurations = new MixedRealityServiceConfiguration[0]; + + /// + /// Currently registered system and manager configurations. + /// + public MixedRealityServiceConfiguration[] Configurations + { + get => configurations; + internal set => configurations = value; + } + } +} \ No newline at end of file diff --git a/Definitions/MixedRealityRegisteredServiceProvidersProfile.cs.meta b/Definitions/MixedRealityRegisteredServiceProvidersProfile.cs.meta new file mode 100644 index 000000000..8d1a931ab --- /dev/null +++ b/Definitions/MixedRealityRegisteredServiceProvidersProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48c48e65a9914a9ab61b891d9b405064 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/MixedRealityServiceConfiguration.cs b/Definitions/MixedRealityServiceConfiguration.cs new file mode 100644 index 000000000..ca46b1b10 --- /dev/null +++ b/Definitions/MixedRealityServiceConfiguration.cs @@ -0,0 +1,77 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces; + +namespace XRTK.Definitions +{ + /// + /// Defines a system, feature, or manager to be registered with as a on startup. + /// + [Serializable] + public struct MixedRealityServiceConfiguration + { + /// + /// Constructor. + /// + /// The concrete type for the system, feature or manager. + /// The simple, human readable name for the system, feature, or manager. + /// The priority this system, feature, or manager will be initialized in. + /// The runtime platform(s) to run this system, feature, or manager on. + /// The configuration profile for the system, feature, or manager. + public MixedRealityServiceConfiguration(SystemType componentType, string componentName, uint priority, SupportedPlatforms runtimePlatform, BaseMixedRealityExtensionServiceProfile configurationProfile) + { + this.componentType = componentType; + this.componentName = componentName; + this.priority = priority; + this.runtimePlatform = runtimePlatform; + this.configurationProfile = configurationProfile; + } + + [SerializeField] + [Implements(typeof(IMixedRealityExtensionService), TypeGrouping.ByNamespaceFlat)] + private SystemType componentType; + + /// + /// The concrete type for the system, feature or manager. + /// + public SystemType ComponentType => componentType; + + [SerializeField] + private string componentName; + + /// + /// The simple, human readable name for the system, feature, or manager. + /// + public string ComponentName => componentName; + + [SerializeField] + private uint priority; + + /// + /// The priority this system, feature, or manager will be initialized in. + /// + public uint Priority => priority; + + [EnumFlags] + [SerializeField] + private SupportedPlatforms runtimePlatform; + + /// + /// The runtime platform(s) to run this system, feature, or manager on. + /// + public SupportedPlatforms RuntimePlatform => runtimePlatform; + + [SerializeField] + private BaseMixedRealityExtensionServiceProfile configurationProfile; + + /// + /// The configuration profile for the system, feature, or manager. + /// + public BaseMixedRealityExtensionServiceProfile ConfigurationProfile => configurationProfile; + } +} \ No newline at end of file diff --git a/Definitions/MixedRealityServiceConfiguration.cs.meta b/Definitions/MixedRealityServiceConfiguration.cs.meta new file mode 100644 index 000000000..f4fef1561 --- /dev/null +++ b/Definitions/MixedRealityServiceConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff189580163e4673a3793176b5b0551a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/MixedRealityToolkitConfigurationProfile.cs b/Definitions/MixedRealityToolkitConfigurationProfile.cs new file mode 100644 index 000000000..b03b08e78 --- /dev/null +++ b/Definitions/MixedRealityToolkitConfigurationProfile.cs @@ -0,0 +1,310 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.BoundarySystem; +using XRTK.Definitions.Diagnostics; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.NetworkingSystem; +using XRTK.Definitions.SpatialAwarenessSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.BoundarySystem; +using XRTK.Interfaces.CameraSystem; +using XRTK.Interfaces.Diagnostics; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.NetworkingSystem; +using XRTK.Interfaces.SpatialAwarenessSystem; +using XRTK.Interfaces.TeleportSystem; + +namespace XRTK.Definitions +{ + /// + /// Configuration profile settings for the Mixed Reality Toolkit. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Mixed Reality Toolkit Configuration Profile", fileName = "MixedRealityToolkitConfigurationProfile", order = (int)CreateProfileMenuItemIndices.Configuration)] + public class MixedRealityToolkitConfigurationProfile : BaseMixedRealityProfile + { + #region Mixed Reality Toolkit configurable properties + + [SerializeField] + [Tooltip("Enable the Camera System on Startup.")] + private bool enableCameraSystem = false; + + /// + /// Enable and configure the Camera Profile for the Mixed Reality Toolkit + /// + public bool IsCameraSystemEnabled + { + get => CameraProfile != null && cameraSystemType != null && cameraSystemType.Type != null && enableCameraSystem; + internal set => enableCameraSystem = value; + } + + [SerializeField] + [Tooltip("Camera System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealityCameraSystem), TypeGrouping.ByNamespaceFlat)] + private SystemType cameraSystemType; + + /// + /// Camera System class to instantiate at runtime. + /// + public SystemType CameraSystemType + { + get => cameraSystemType; + internal set => cameraSystemType = value; + } + + + [SerializeField] + [Tooltip("Camera profile.")] + private MixedRealityCameraProfile cameraProfile; + + /// + /// Profile for customizing your camera and quality settings based on if your + /// head mounted display (HMD) is a transparent device or an occluded device. + /// + public MixedRealityCameraProfile CameraProfile + { + get => cameraProfile; + internal set => cameraProfile = value; + } + + [SerializeField] + [Tooltip("Enable the Input System on Startup.")] + private bool enableInputSystem = false; + + /// + /// Enable and configure the Input System component for the Mixed Reality Toolkit + /// + public bool IsInputSystemEnabled + { + get => inputSystemProfile != null && inputSystemType != null && inputSystemType.Type != null && enableInputSystem; + internal set => enableInputSystem = value; + } + + [SerializeField] + [Tooltip("Input System profile for setting wiring up events and actions to input devices.")] + private MixedRealityInputSystemProfile inputSystemProfile; + + /// + /// Input System profile for setting wiring up events and actions to input devices. + /// + public MixedRealityInputSystemProfile InputSystemProfile + { + get => inputSystemProfile; + internal set => inputSystemProfile = value; + } + + [SerializeField] + [Tooltip("Input System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealityInputSystem), TypeGrouping.ByNamespaceFlat)] + private SystemType inputSystemType; + + /// + /// Input System Script File to instantiate at runtime. + /// + public SystemType InputSystemType + { + get => inputSystemType; + internal set => inputSystemType = value; + } + + [SerializeField] + [Tooltip("Enable the Boundary on Startup")] + private bool enableBoundarySystem = false; + + /// + /// Enable and configure the boundary system. + /// + public bool IsBoundarySystemEnabled + { + get => boundarySystemType != null && boundarySystemType.Type != null && enableBoundarySystem && boundaryVisualizationProfile != null; + internal set => enableBoundarySystem = value; + } + + [SerializeField] + [Tooltip("Boundary System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealityBoundarySystem), TypeGrouping.ByNamespaceFlat)] + private SystemType boundarySystemType; + + /// + /// Boundary System Script File to instantiate at runtime. + /// + public SystemType BoundarySystemSystemType + { + get => boundarySystemType; + internal set => boundarySystemType = value; + } + + [SerializeField] + [Tooltip("Profile for wiring up boundary visualization assets.")] + private MixedRealityBoundaryVisualizationProfile boundaryVisualizationProfile; + + /// + /// Active profile for controller mapping configuration + /// + public MixedRealityBoundaryVisualizationProfile BoundaryVisualizationProfile + { + get => boundaryVisualizationProfile; + internal set => boundaryVisualizationProfile = value; + } + + [SerializeField] + [Tooltip("Enable the Teleport System on Startup")] + private bool enableTeleportSystem = false; + + /// + /// Enable and configure the boundary system. + /// + public bool IsTeleportSystemEnabled + { + get => teleportSystemType != null && teleportSystemType.Type != null && enableTeleportSystem; + internal set => enableTeleportSystem = value; + } + + [SerializeField] + [Tooltip("Boundary System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealityTeleportSystem), TypeGrouping.ByNamespaceFlat)] + private SystemType teleportSystemType; + + /// + /// Teleport System Script File to instantiate at runtime. + /// + public SystemType TeleportSystemSystemType + { + get => teleportSystemType; + internal set => teleportSystemType = value; + } + + [SerializeField] + [Tooltip("Enable the Spatial Awareness system on Startup")] + private bool enableSpatialAwarenessSystem = false; + + /// + /// Enable and configure the spatial awareness system. + /// + public bool IsSpatialAwarenessSystemEnabled + { + get => spatialAwarenessSystemType != null && spatialAwarenessSystemType.Type != null && enableSpatialAwarenessSystem && spatialAwarenessProfile != null; + internal set => enableSpatialAwarenessSystem = value; + } + + [SerializeField] + [Tooltip("Spatial Awareness System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealitySpatialAwarenessSystem), TypeGrouping.ByNamespaceFlat)] + private SystemType spatialAwarenessSystemType; + + /// + /// Boundary System Script File to instantiate at runtime. + /// + public SystemType SpatialAwarenessSystemSystemType + { + get => spatialAwarenessSystemType; + internal set => spatialAwarenessSystemType = value; + } + + [SerializeField] + [Tooltip("Profile for configuring the Spatial Awareness system.")] + private MixedRealitySpatialAwarenessSystemProfile spatialAwarenessProfile; + + /// + /// Active profile for spatial awareness configuration + /// + public MixedRealitySpatialAwarenessSystemProfile SpatialAwarenessProfile + { + get => spatialAwarenessProfile; + internal set => spatialAwarenessProfile = value; + } + + [SerializeField] + [Tooltip("Profile for wiring up networking assets.")] + private MixedRealityNetworkSystemProfile networkingSystemProfile; + + /// + /// Active profile for diagnostic configuration + /// + public MixedRealityNetworkSystemProfile NetworkingSystemProfile + { + get => networkingSystemProfile; + internal set => networkingSystemProfile = value; + } + + [SerializeField] + [Tooltip("Enable networking system")] + private bool enableNetworkingSystem = false; + + /// + /// Is the networking system properly configured and enabled? + /// + public bool IsNetworkingSystemEnabled + { + get => enableNetworkingSystem && NetworkingSystemSystemType?.Type != null && networkingSystemProfile != null; + internal set => enableNetworkingSystem = value; + } + + [SerializeField] + [Tooltip("Networking System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealityNetworkingSystem), TypeGrouping.ByNamespaceFlat)] + private SystemType networkingSystemType; + + /// + /// Diagnostics System Script File to instantiate at runtime + /// + public SystemType NetworkingSystemSystemType + { + get => networkingSystemType; + internal set => networkingSystemType = value; + } + + [SerializeField] + [Tooltip("Profile for wiring up diagnostic assets.")] + private MixedRealityDiagnosticsProfile diagnosticsSystemProfile; + + /// + /// Active profile for diagnostic configuration + /// + public MixedRealityDiagnosticsProfile DiagnosticsSystemProfile + { + get => diagnosticsSystemProfile; + internal set => diagnosticsSystemProfile = value; + } + + [SerializeField] + [Tooltip("Enable diagnostic system")] + private bool enableDiagnosticsSystem = false; + + /// + /// Is the diagnostics system properly configured and enabled? + /// + public bool IsDiagnosticsSystemEnabled + { + get => enableDiagnosticsSystem && DiagnosticsSystemSystemType?.Type != null && diagnosticsSystemProfile != null; + internal set => enableDiagnosticsSystem = value; + } + + [SerializeField] + [Tooltip("Diagnostics System Class to instantiate at runtime.")] + [Implements(typeof(IMixedRealityDiagnosticsSystem), TypeGrouping.ByNamespaceFlat)] + private SystemType diagnosticsSystemType; + + /// + /// Diagnostics System Script File to instantiate at runtime + /// + public SystemType DiagnosticsSystemSystemType + { + get => diagnosticsSystemType; + internal set => diagnosticsSystemType = value; + } + + [SerializeField] + [Tooltip("All the additional non-required services registered with the Mixed Reality Toolkit.")] + private MixedRealityRegisteredServiceProvidersProfile registeredServiceProvidersProfile = null; + + /// + /// All the additional non-required systems, features, and managers registered with the Mixed Reality Toolkit. + /// + public MixedRealityRegisteredServiceProvidersProfile RegisteredServiceProvidersProfile => registeredServiceProvidersProfile; + + #endregion Mixed Reality Toolkit configurable properties + } +} diff --git a/Definitions/MixedRealityToolkitConfigurationProfile.cs.meta b/Definitions/MixedRealityToolkitConfigurationProfile.cs.meta new file mode 100644 index 000000000..fbe4b5129 --- /dev/null +++ b/Definitions/MixedRealityToolkitConfigurationProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8053d706eb6545b99330d640fbe7e7d2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/NetworkingSystem.meta b/Definitions/NetworkingSystem.meta new file mode 100644 index 000000000..37bf8d4ce --- /dev/null +++ b/Definitions/NetworkingSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68791955e49a48deb17450850a23f7e9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs b/Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs new file mode 100644 index 000000000..a95203813 --- /dev/null +++ b/Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions; +using XRTK.Interfaces.NetworkingSystem; + +namespace XRTK.Providers.Networking.Profiles +{ + /// + /// The base profile for s + /// + public abstract class BaseMixedRealityNetworkProviderProfile : BaseMixedRealityProfile + { + // TODO Fill out with the configuration options that ALL network data providers must satisfy. + } +} \ No newline at end of file diff --git a/Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs.meta b/Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs.meta new file mode 100644 index 000000000..49261ff55 --- /dev/null +++ b/Definitions/NetworkingSystem/BaseMixedRealityNetworkProviderProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b035e248e3234d2682701092aced6148 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs b/Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs new file mode 100644 index 000000000..ebb1e8dce --- /dev/null +++ b/Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Definitions.NetworkingSystem +{ + /// + /// Configuration profile settings for setting up networking. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Network System Profile", fileName = "MixedRealityNetworkSystemProfile", order = (int)CreateProfileMenuItemIndices.Networking)] + public class MixedRealityNetworkSystemProfile : BaseMixedRealityProfile + { + [SerializeField] + private NetworkDataProviderConfiguration[] registeredNetworkDataProviders = null; + + /// + /// The list of registered network data providers. + /// + public NetworkDataProviderConfiguration[] RegisteredNetworkDataProviders => registeredNetworkDataProviders; + } +} \ No newline at end of file diff --git a/Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs.meta b/Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs.meta new file mode 100644 index 000000000..505d32646 --- /dev/null +++ b/Definitions/NetworkingSystem/MixedRealityNetworkSystemProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 47c0c9c4be8544379a5571fad761efd8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs b/Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs new file mode 100644 index 000000000..3c8caa293 --- /dev/null +++ b/Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Providers.Networking.Profiles; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.Networking.WebRTC +{ + /// + /// The Web RTC Network provider profile configuration. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Networking System/WebRTC Profile", fileName = "MixedRealityWebRtcNetworkProviderProfile", order = (int)CreateProfileMenuItemIndices.NetworkingDataProviders)] + + public class MixedRealityWebRtcNetworkProviderProfile : BaseMixedRealityNetworkProviderProfile + { + // TODO Fill out with the configuration options that a web rtc network data provider must satisfy. + } +} \ No newline at end of file diff --git a/Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs.meta b/Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs.meta new file mode 100644 index 000000000..905f052e5 --- /dev/null +++ b/Definitions/NetworkingSystem/MixedRealityWebRtcNetworkProviderProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b7b32ac7ae544be5b412c3ea6864df75 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs b/Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs new file mode 100644 index 000000000..e46c44204 --- /dev/null +++ b/Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Providers.Networking.Profiles; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces; +using XRTK.Interfaces.NetworkingSystem; + +namespace XRTK.Definitions.NetworkingSystem +{ + /// + /// Configuration settings for a registered . + /// + [Serializable] + public struct NetworkDataProviderConfiguration + { + /// + /// Constructor. + /// + /// The concrete type for the system, feature or manager. + /// The simple, human readable name for the system, feature, or manager. + /// The priority this system, feature, or manager will be initialized in. + /// The runtime platform(s) to run this system, feature, or manager on. + /// The configuration profile for the system, feature, or manager. + public NetworkDataProviderConfiguration(SystemType dataProviderType, string dataProviderName, uint priority, SupportedPlatforms runtimePlatform, BaseMixedRealityNetworkProviderProfile profile) + { + this.dataProviderType = dataProviderType; + this.dataProviderName = dataProviderName; + this.priority = priority; + this.runtimePlatform = runtimePlatform; + this.profile = profile; + } + + [SerializeField] + [Implements(typeof(IMixedRealityNetworkDataProvider), TypeGrouping.ByNamespaceFlat)] + private SystemType dataProviderType; + + /// + /// The concrete type for the system, feature or manager. + /// + public SystemType DataProviderType => dataProviderType; + + [SerializeField] + private string dataProviderName; + + /// + /// The simple, human readable name for the system, feature, or manager. + /// + public string DataProviderName => dataProviderName; + + [SerializeField] + private uint priority; + + /// + /// The priority this system, feature, or manager will be initialized in. + /// + public uint Priority => priority; + + [EnumFlags] + [SerializeField] + private SupportedPlatforms runtimePlatform; + + /// + /// The runtime platform(s) to run this system, feature, or manager on. + /// + public SupportedPlatforms RuntimePlatform => runtimePlatform; + + [SerializeField] + private BaseMixedRealityNetworkProviderProfile profile; + + /// + /// The configuration profile for the system, feature, or manager. + /// + public BaseMixedRealityNetworkProviderProfile Profile => profile; + } +} \ No newline at end of file diff --git a/Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs.meta b/Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs.meta new file mode 100644 index 000000000..25e9da3ce --- /dev/null +++ b/Definitions/NetworkingSystem/NetworkDataProviderConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: df14c27313e44a658f0587d8453f407a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Physics.meta b/Definitions/Physics.meta new file mode 100644 index 000000000..29f37a7d4 --- /dev/null +++ b/Definitions/Physics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 819cdad2921b4530a9ec29428f387df7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Physics/ComparableRaycastResult.cs b/Definitions/Physics/ComparableRaycastResult.cs new file mode 100644 index 000000000..93b8d83ad --- /dev/null +++ b/Definitions/Physics/ComparableRaycastResult.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace XRTK.Definitions.Physics +{ + public struct ComparableRaycastResult + { + public readonly int LayerMaskIndex; + public readonly RaycastResult RaycastResult; + + public ComparableRaycastResult(RaycastResult raycastResult, int layerMaskIndex = 0) + { + RaycastResult = raycastResult; + LayerMaskIndex = layerMaskIndex; + } + } +} \ No newline at end of file diff --git a/Definitions/Physics/ComparableRaycastResult.cs.meta b/Definitions/Physics/ComparableRaycastResult.cs.meta new file mode 100644 index 000000000..7076c3ba9 --- /dev/null +++ b/Definitions/Physics/ComparableRaycastResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 61edf9b27ab44b95b426c23deff6608a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Physics/FocusDetails.cs b/Definitions/Physics/FocusDetails.cs new file mode 100644 index 000000000..c2bf8323c --- /dev/null +++ b/Definitions/Physics/FocusDetails.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Definitions.Physics +{ + /// + /// Contains information about which game object has the focus currently. + /// Also contains information about the normal of that point. + /// + public struct FocusDetails + { + /// + /// The hit point of the raycast. + /// + public Vector3 Point { get; set; } + + /// + /// The normal of the raycast. + /// + public Vector3 Normal { get; set; } + + /// + /// The object hit by the last raycast. + /// + public GameObject Object { get; set; } + + /// + /// The last raycast hit info. + /// + public RaycastHit LastRaycastHit { get; set; } + } +} diff --git a/Definitions/Physics/FocusDetails.cs.meta b/Definitions/Physics/FocusDetails.cs.meta new file mode 100644 index 000000000..d23c3c9c0 --- /dev/null +++ b/Definitions/Physics/FocusDetails.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6ed6e009ac9d4916a05554210ed4d211 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Physics/RayStep.cs b/Definitions/Physics/RayStep.cs new file mode 100644 index 000000000..61cf1a3ba --- /dev/null +++ b/Definitions/Physics/RayStep.cs @@ -0,0 +1,208 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Definitions.Physics +{ + [Serializable] + public struct RayStep + { + /// + /// Constructor. + /// + /// + /// + public RayStep(Vector3 origin, Vector3 terminus) : this() + { + epsilon = 0.01f; + Origin = origin; + Terminus = terminus; + + dist.x = Terminus.x - Origin.x; + dist.y = Terminus.y - Origin.y; + dist.z = Terminus.z - Origin.z; + Length = Mathf.Sqrt((dist.x * dist.x) + (dist.y * dist.y) + (dist.z * dist.z)); + + if (Length > 0) + { + dir.x = dist.x / Length; + dir.y = dist.y / Length; + dir.z = dist.z / Length; + } + else + { + dir = dist; + } + + Direction = dir; + } + + private readonly float epsilon; + + private static Vector3 dist; + private static Vector3 dir; + private static Vector3 pos; + + public Vector3 Origin { get; private set; } + + public Vector3 Terminus { get; private set; } + + public Vector3 Direction { get; private set; } + + public float Length { get; private set; } + + public Vector3 GetPoint(float distance) + { + if (Length <= distance || Length.Equals(0f)) + { + return Origin; + } + + pos.x = Origin.x + Direction.x * distance; + pos.y = Origin.y + Direction.y * distance; + pos.z = Origin.z + Direction.z * distance; + + return pos; + } + + /// + /// Update current ray step with new origin and terminus points. + /// Pass by ref to avoid unnecessary struct copy into function since values will be copied anyways locally + /// + /// beginning of ray step origin + /// end of ray step + public void UpdateRayStep(ref Vector3 origin, ref Vector3 terminus) + { + Origin = origin; + Terminus = terminus; + + dist.x = Terminus.x - Origin.x; + dist.y = Terminus.y - Origin.y; + dist.z = Terminus.z - Origin.z; + Length = Mathf.Sqrt((dist.x * dist.x) + (dist.y * dist.y) + (dist.z * dist.z)); + + if (Length > 0) + { + dir.x = dist.x / Length; + dir.y = dist.y / Length; + dir.z = dist.z / Length; + } + else + { + dir = dist; + } + + Direction = dir; + } + + public void CopyRay(Ray ray, float rayLength) + { + Length = rayLength; + Origin = ray.origin; + Direction = ray.direction; + + pos.x = Origin.x + Direction.x * Length; + pos.y = Origin.y + Direction.y * Length; + pos.z = Origin.z + Direction.z * Length; + + Terminus = pos; + } + + /// + /// Does this ray step contain the point provided? + /// + /// The point to find in the ray step. + /// True if this ray step contains the point provided. + public bool Contains(Vector3 point) + { + dist.x = Origin.x - point.x; + dist.y = Origin.y - point.y; + dist.z = Origin.z - point.z; + float sqrMagOriginPoint = (dist.x * dist.x) + (dist.y * dist.y) + (dist.z * dist.z); + + dist.x = point.x - Terminus.x; + dist.y = point.y - Terminus.y; + dist.z = point.z - Terminus.z; + float sqrMagPointTerminus = (dist.x * dist.x) + (dist.y * dist.y) + (dist.z * dist.z); + + float sqrLength = Length * Length; + float sqrEpsilon = epsilon * epsilon; + + return (sqrMagOriginPoint + sqrMagPointTerminus) - sqrLength > sqrEpsilon; + } + + public static implicit operator Ray(RayStep step) + { + return new Ray(step.Origin, step.Direction); + } + + #region Static utility functions + + /// + /// Returns a point along an array of RaySteps by distance + /// + /// + /// + /// + public static Vector3 GetPointByDistance(RayStep[] steps, float distance) + { + Debug.Assert(steps != null); + Debug.Assert(steps.Length > 0); + + var (rayStep, remainingDistance) = GetStepByDistance(steps, distance); + if (remainingDistance > 0) + { + return Vector3.Lerp(rayStep.Origin, rayStep.Terminus, remainingDistance / rayStep.Length); + } + + return rayStep.Terminus; + } + + /// + /// Returns a RayStep along an array of RaySteps by distance + /// + /// + /// + /// + public static (RayStep rayStep, float traveledDistance) GetStepByDistance(RayStep[] steps, float distance) + { + Debug.Assert(steps != null && steps.Length > 0); + + var traveledDistance = 0f; + + foreach (var step in steps) + { + var stepLength = step.Length; + + if (distance > traveledDistance + stepLength) + { + traveledDistance += stepLength; + } + else + { + return (step, Mathf.Clamp(distance - traveledDistance, 0f, stepLength)); + } + } + + return (steps[steps.Length - 1], 0f); + } + + /// + /// Returns a direction along an array of RaySteps by distance + /// + /// + /// + /// + public static Vector3 GetDirectionByDistance(RayStep[] steps, float distance) + { + Debug.Assert(steps != null); + Debug.Assert(steps.Length > 0); + + return GetStepByDistance(steps, distance).rayStep.Direction; + } + + #endregion Static utility functions + } +} \ No newline at end of file diff --git a/Definitions/Physics/RayStep.cs.meta b/Definitions/Physics/RayStep.cs.meta new file mode 100644 index 000000000..fa6c9ec77 --- /dev/null +++ b/Definitions/Physics/RayStep.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f3acae864dc04ed88a5f043aa32519e9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Physics/RaycastMode.cs b/Definitions/Physics/RaycastMode.cs new file mode 100644 index 000000000..3dc0b61ae --- /dev/null +++ b/Definitions/Physics/RaycastMode.cs @@ -0,0 +1,24 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Physics +{ + /// + /// Defines the different ways raycasting can be done. + /// + public enum RaycastMode + { + /// + /// Use a simple raycast from a single point in a given direction. + /// + Simple, + /// + /// Complex raycast from multiple points using a box collider. + /// + Box, + /// + /// Use Sphere cast. + /// + Sphere + } +} diff --git a/Definitions/Physics/RaycastMode.cs.meta b/Definitions/Physics/RaycastMode.cs.meta new file mode 100644 index 000000000..112200a1a --- /dev/null +++ b/Definitions/Physics/RaycastMode.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34634401a98440c8a4f1a92e0a4f9d0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Physics/TeleportSurfaceResult.cs b/Definitions/Physics/TeleportSurfaceResult.cs new file mode 100644 index 000000000..b5c12bf66 --- /dev/null +++ b/Definitions/Physics/TeleportSurfaceResult.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Definitions.Physics +{ + [Serializable] + public enum TeleportSurfaceResult + { + None = 0, + Valid, + Invalid, + HotSpot, + } +} diff --git a/Definitions/Physics/TeleportSurfaceResult.cs.meta b/Definitions/Physics/TeleportSurfaceResult.cs.meta new file mode 100644 index 000000000..7ab3cc342 --- /dev/null +++ b/Definitions/Physics/TeleportSurfaceResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: afc76ba7d691455b990076ea9168eff4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/README.md b/Definitions/README.md new file mode 100644 index 000000000..e3a0e7e3e --- /dev/null +++ b/Definitions/README.md @@ -0,0 +1,84 @@ +# Mixed Reality Toolkit - Internal - Definitions + +This folder contains all the MRTK Internal description definitions and enums. + +## Struct / Enum Definitions + +The list of definitions for Internal MRTK structures and enums are listed below. + +### BaseManager + +The BaseManager is the base class for all Mixed Reality Toolkit manager classes. +This minimises the use of MonoBehaviour's and provides a faster framework. + +### ButtonAction + +The ButtonAction defines the set of actions exposed by a controller. +Denoting the available buttons / interactions that a controller supports. + +### ButtonDefinition + +A Button Definition maps the capabilities of a selected controllers buttons, one definition should exist for each button profile. + +### Controller + +The Controller definition defines the Controller as defined by the SDK / Unity. + +### ControllerInputType + +The ControllerInputType identifies the type of button or input being sent to the framework from a controller. +This is mainly information only or for advanced users to understand the input coming directly from the controller. + +### ControllerState + +The Controller State defines whether a controller or headset is currently being tracker or not. +This enables developers to be able to handle non-tracked situations and react accordingly + +### Handedness + +The Handedness defines which hand a controller is currently operating in. +It is up to the developer to determine whether this affects the use of a controller or not. + +### Headset + +The headset definition defines the headset as defined by the SDK / Unity. + +### InputActions + +InputActions defines the set of actions consumed internally within the MRTK. +Denoting the available buttons / interactions that MRTK supports and exposed as events from the InputSystem. + +### MixedRealityConfigurationProfile + +The MixedRealityConfigurationProfile is a Scriptable Object definition for creating profiles for the Mixed Reality Toolkit. +This will instruct the toolkit how to operate and which managers to use within a project, centralizing all the configuration required for the project. + +### SDKType + +The SDKType lists the VR SDK's that are supported by the MRTK +Initially, this lists proposed SDK's, not all may be implemented at this time (please see ReleaseNotes for more details) + +## Relationships + +For specific constructs, the following information details the relationships between each component. + +### Controllers + +The controller definition relationships are defined as shown below: +![](/External/ReadMeImages/MRTK-ControllerDiagram.png) + +### Headsets + +The headset definition relationships are defined as shown below: +![](/External/ReadMeImages/MRTK-HeadsetDefinition.png) + +### Internal MRTK InputActions + +Input Actions are those internal mapped actions available to the MRTK. Each controller button would be dynamically mapped to an MRTK action for use in the SDK or output from the InputSystem. + +These are listed as follows: +![](/External/ReadMeImages/MRTK-InputActions.png) + +## Additional Information + +For additional information, please see the [MRTK vNext architecture outline](/MRTK-vNext.md) and the [vNext SDK Outline](/MRTK-SDK.md) \ No newline at end of file diff --git a/Definitions/README.md.meta b/Definitions/README.md.meta new file mode 100644 index 000000000..0d087cc9a --- /dev/null +++ b/Definitions/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 66f8c39f5fe84c4f890edadc8f34a992 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem.meta b/Definitions/SpatialAwarenessSystem.meta new file mode 100644 index 000000000..d2709c397 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 96252890a9c14129b4f0bb6873d7af9b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs b/Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs new file mode 100644 index 000000000..897dcb556 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.SpatialObservers; + +namespace XRTK.Definitions.SpatialAwarenessSystem +{ + /// + /// Configuration profile settings for setting up the spatial awareness system. + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Spatial Awareness System Profile", fileName = "MixedRealitySpatialAwarenessSystemProfile", order = (int)CreateProfileMenuItemIndices.SpatialAwareness)] + public class MixedRealitySpatialAwarenessSystemProfile : BaseMixedRealityProfile + { + /// + /// The name of the Spatial Awareness Mesh Physics Layer. + /// + public const string SpatialAwarenessMeshesLayerName = "Spatial Awareness Meshes"; + + /// + /// The name of the Spatial Awareness Surfaces Physics Layer. + /// + public const string SpatialAwarenessSurfacesLayerName = "Spatial Awareness Surfaces"; + + [SerializeField] + [Tooltip("The list of registered spatial observer data providers.")] + private SpatialObserverDataProviderConfiguration[] registeredSpatialObserverDataProviders = new SpatialObserverDataProviderConfiguration[0]; + + /// + /// The list of registered s. + /// + public SpatialObserverDataProviderConfiguration[] RegisteredSpatialObserverDataProviders => registeredSpatialObserverDataProviders; + } +} diff --git a/Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs.meta b/Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs.meta new file mode 100644 index 000000000..e78901366 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystemProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 80a1ad34855542cbbd15a6a6dde2e935 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs b/Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs new file mode 100644 index 000000000..a1df823ef --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.SpatialAwarenessSystem +{ + /// + /// Enumeration defining levels of detail for the spatial awareness mesh subsystem. + /// + /// + /// The integral values for these levels of detail generally map to triangle density, in triangles per cubic meter. + /// + public enum SpatialAwarenessMeshLevelOfDetail + { + /// + /// The custom level of detail allows specifying a custom value for + /// MeshTrianglesPerCubicMeter. + /// + Custom = -1, + + /// + /// The coarse level of detail is well suited for identifying large + /// environmental features, such as floors and walls. + /// + Coarse = 0, + + /// + /// The fine level of detail is well suited for using as an occlusion + /// mesh. + /// + Fine = 2000 + } +} diff --git a/Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs.meta b/Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs.meta new file mode 100644 index 000000000..18c7a5c1d --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialAwarenessMeshLevelOfDetail.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 070fd5bf1b0f45769f1c7b5d6adddafd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs b/Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs new file mode 100644 index 000000000..852e96822 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.SpatialAwarenessSystem +{ + /// + /// Enumeration defining the types of planar surfaces that are supported by the spatial awareness surface finding subsystem. + /// + [System.Flags] + public enum SpatialAwarenessSurfaceTypes + { + /// + /// An unknown / unsupported type of surface. + /// + Unknown = 1 << 0, + + /// + /// The environment’s floor. + /// + Floor = 1 << 1, + + /// + /// The environment’s ceiling. + /// + Ceiling = 1 << 2, + + /// + /// A wall within the user’s space. + /// + Wall = 1 << 3, + + /// + /// A raised, horizontal surface such as a shelf. + /// + /// + /// Platforms, like floors, that can be used for placing objects + /// requiring a horizontal surface. + /// + Platform = 1 << 4 + } +} diff --git a/Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs.meta b/Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs.meta new file mode 100644 index 000000000..43d9bf5f1 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialAwarenessSurfaceTypes.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d88eef87bbe24202858d14941aa66c33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs b/Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs new file mode 100644 index 000000000..13e9e12b0 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.SpatialAwarenessSystem +{ + /// + /// Options for how the spatial mesh is to be displayed by the spatial awareness system. + /// + public enum SpatialMeshDisplayOptions + { + /// + /// Do not display the spatial mesh + /// + None = 0, + + /// + /// Display the spatial mesh using the configured material + /// + Visible, + + /// + /// Display the spatial mesh using the configured occlusion material + /// + Occlusion + } +} \ No newline at end of file diff --git a/Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs.meta b/Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs.meta new file mode 100644 index 000000000..0f5dac202 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialMeshDisplayOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f836f941d69342bdac7acaba39587ecd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs b/Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs new file mode 100644 index 000000000..4ff731ff2 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Extensions; +using UnityEngine; + +namespace XRTK.Definitions.SpatialAwarenessSystem +{ + /// + /// A Spatial Mesh Object is the Spatial Awareness System's representation of a spatial object with mesh information. + /// + public struct SpatialMeshObject + { + /// + /// Constructor. + /// + /// + /// + public SpatialMeshObject(int id, GameObject gameObject) : this() + { + Id = id; + GameObject = gameObject; + } + + /// + /// The id of the spatial mesh object. + /// + public int Id { get; internal set; } + + private GameObject gameObject; + + /// + /// The reference of the Spatial Mesh Object. + /// + public GameObject GameObject + { + get => gameObject; + internal set + { + gameObject = value; + + Renderer = gameObject.GetComponent(); + Filter = gameObject.GetComponent(); + Collider = gameObject.GetComponent(); + } + } + + public Mesh Mesh + { + get => Filter.sharedMesh; + internal set + { + // Reset the surface mesh collider to fit the updated mesh. + // Unity tribal knowledge indicates that to change the mesh assigned to a + // mesh collider and mesh filter, the mesh must first be set to null. Presumably there + // is a side effect in the setter when setting the shared mesh to null. + Filter.sharedMesh = null; + Filter.sharedMesh = value; + Collider.sharedMesh = null; + Collider.sharedMesh = Filter.sharedMesh; + } + } + + /// + /// The reference for the Spatial Mesh Object. + /// + public MeshRenderer Renderer { get; private set; } + + /// + /// The reference for the Spatial Mesh Object. + /// + public MeshFilter Filter { get; private set; } + + /// + /// The reference for the Spatial Mesh Object. + /// + public MeshCollider Collider { get; private set; } + } +} \ No newline at end of file diff --git a/Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs.meta b/Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs.meta new file mode 100644 index 000000000..19b6cef37 --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialMeshObject.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1d5b5d326f2f4248844d855ef4d8beda +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs b/Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs new file mode 100644 index 000000000..c262ebb4e --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Providers.SpatialObservers; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.SpatialObservers; + +namespace XRTK.Definitions.SpatialAwarenessSystem +{ + /// + /// The configuration setting for a + /// + [Serializable] + public struct SpatialObserverDataProviderConfiguration + { + /// + /// Constructor. + /// + /// + /// + /// + /// + /// + public SpatialObserverDataProviderConfiguration(SystemType spatialObserverType, string spatialObserverName, uint priority, SupportedPlatforms runtimePlatform, BaseMixedRealitySpatialObserverProfile profile) + { + this.spatialObserverType = spatialObserverType; + this.spatialObserverName = spatialObserverName; + this.priority = priority; + this.runtimePlatform = runtimePlatform; + this.profile = profile; + } + + [SerializeField] + [Tooltip("The concrete type of spatial observer to register.")] + [Implements(typeof(IMixedRealitySpatialObserverDataProvider), TypeGrouping.ByNamespaceFlat)] + private SystemType spatialObserverType; + + /// + /// The concrete type to use for this spatial observer. + /// + public SystemType SpatialObserverType => spatialObserverType; + + [SerializeField] + private string spatialObserverName; + + /// + /// The simple, human readable name for the system, feature, or manager. + /// + public string SpatialObserverName => spatialObserverName; + + [SerializeField] + private uint priority; + + /// + /// The priority this system, feature, or manager will be initialized in. + /// + public uint Priority => priority; + + [EnumFlags] + [SerializeField] + private SupportedPlatforms runtimePlatform; + + /// + /// The runtime platform(s) to run this system, feature, or manager on. + /// + public SupportedPlatforms RuntimePlatform => runtimePlatform; + + [SerializeField] + private BaseMixedRealitySpatialObserverProfile profile; + + /// + /// The profile to use for this spatial observer. + /// + public BaseMixedRealitySpatialObserverProfile Profile => profile; + } +} \ No newline at end of file diff --git a/Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs.meta b/Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs.meta new file mode 100644 index 000000000..701e53f7d --- /dev/null +++ b/Definitions/SpatialAwarenessSystem/SpatialObserverDataProviderConfiguration.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 563c4c339d2544bcb8a843a44d22a628 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialObservers.meta b/Definitions/SpatialObservers.meta new file mode 100644 index 000000000..cea4f1cef --- /dev/null +++ b/Definitions/SpatialObservers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4481d2e2371442c8a2d9be891960b531 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs b/Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs new file mode 100644 index 000000000..9ad5b9133 --- /dev/null +++ b/Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs @@ -0,0 +1,98 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.SpatialAwarenessSystem; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.SpatialObservers +{ + public abstract class BaseMixedRealitySpatialMeshObserverProfile : BaseMixedRealitySpatialObserverProfile + { + [PhysicsLayer] + [SerializeField] + [Tooltip("The optional mesh Physics layer override of the base PhysicsLayer")] + private int meshPhysicsLayerOverride = -1; + + /// + /// The optional Physics layer override of the base + /// + public int MeshPhysicsLayerOverride => meshPhysicsLayerOverride; + + [SerializeField] + [Tooltip("Level of detail for the mesh")] + private SpatialAwarenessMeshLevelOfDetail meshLevelOfDetail = SpatialAwarenessMeshLevelOfDetail.Coarse; + + /// + /// The desired Unity Physics Layer on which to set the spatial mesh. + /// + public SpatialAwarenessMeshLevelOfDetail MeshLevelOfDetail => meshLevelOfDetail; + + [SerializeField] + [Tooltip("Level of detail, in triangles per cubic meter.\nIgnored unless MeshLevelOfDetail is set to Custom.")] + private uint meshTrianglesPerCubicMeter = 0; + + /// + /// The level of detail, in triangles per cubic meter, for the returned spatial mesh. + /// + /// This value is ignored, unless is set to Coarse. + public uint MeshTrianglesPerCubicMeter => meshTrianglesPerCubicMeter; + + [SerializeField] + [Tooltip("Should normals be recalculated when a mesh is added or updated?")] + private bool meshRecalculateNormals = true; + + /// + /// Indicates if the spatial awareness system to generate normal for the returned meshes + /// as some platforms may not support returning normal along with the spatial mesh. + /// + public bool MeshRecalculateNormals => meshRecalculateNormals; + + [SerializeField] + [Tooltip("How should spatial meshes be displayed?")] + private SpatialMeshDisplayOptions meshDisplayOption = SpatialMeshDisplayOptions.None; + + /// + /// Indicates how the mesh subsystem is to display surface meshes within the application. + /// + public SpatialMeshDisplayOptions MeshDisplayOption => meshDisplayOption; + + [SerializeField] + [Tooltip("Material to use when displaying meshes")] + private Material meshVisibleMaterial = null; + + /// + /// The material to be used when automatically displaying spatial meshes. + /// + public Material MeshVisibleMaterial => meshVisibleMaterial; + + [SerializeField] + [Tooltip("Material to use when spatial meshes should occlude other objects")] + private Material meshOcclusionMaterial = null; + + /// + /// The material to be used when spatial meshes should occlude other objects. + /// + public Material MeshOcclusionMaterial => meshOcclusionMaterial; + + [SerializeField] + [Tooltip("Additional components to add to the generated spatial mesh GameObject")] + [SystemType(typeof(Component), TypeGrouping.ByAddComponentMenu)] + private SystemType[] additionalComponents = new SystemType[0]; + + /// + /// Additional s to add to the generated spatial mesh s + /// + public SystemType[] AdditionalComponents => additionalComponents; + + [SerializeField] + [Tooltip("Prefab to use for Object Pool instead of generated object.")] + private GameObject meshObjectPrefab = null; + + /// + /// Prefab to use for Object Pool instead of generated mesh object. + /// + public GameObject MeshObjectPrefab => meshObjectPrefab; + } +} \ No newline at end of file diff --git a/Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs.meta b/Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs.meta new file mode 100644 index 000000000..c389b91c0 --- /dev/null +++ b/Definitions/SpatialObservers/BaseMixedRealitySpatialMeshObserverProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34e54930903b41a9bdcbe94df832101b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs b/Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs new file mode 100644 index 000000000..01ee2ee29 --- /dev/null +++ b/Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions; +using XRTK.Definitions.Utilities; + +namespace XRTK.Providers.SpatialObservers +{ + // No Scriptable Object Menu constructor attributes here, as this class is meant to be inherited. + + /// + /// Base Mixed Reality Observer Profile. + /// + public abstract class BaseMixedRealitySpatialObserverProfile : BaseMixedRealityProfile + { + [SerializeField] + [Tooltip("How should the spatial awareness observer behave at startup?")] + private AutoStartBehavior startupBehavior = AutoStartBehavior.AutoStart; + + /// + /// Indicates if the developer intends for the spatial awareness observer start immediately or wait for manual startup. + /// + public AutoStartBehavior StartupBehavior => startupBehavior; + + [SerializeField] + [Tooltip("The dimensions of the spatial observer volume, in meters.")] + private Vector3 observationExtents = Vector3.one * 3; + + /// + /// The size of the volume, in meters per axis, from which individual observations will be made. + /// + public Vector3 ObservationExtents => observationExtents; + + [SerializeField] + [Tooltip("Should the spatial observer remain in a fixed location?")] + private bool isStationaryObserver = false; + + /// + /// The size of the volume, in meters per axis, from which individual observations will be made. + /// + public bool IsStationaryObserver => isStationaryObserver; + + [SerializeField] + [Tooltip("How often, in seconds, should the spatial observer update?")] + private float updateInterval = 3.5f; + + /// + /// The frequency, in seconds, at which the spatial observer updates. + /// + public float UpdateInterval => updateInterval; + + [PhysicsLayer] + [SerializeField] + [Tooltip("Which physics layer should this spatial observer use to create it's objects?")] + private int physicsLayer = -1; + + /// + /// The physics layer that the spatial observer will use for it's spatial objects. + /// + public int PhysicsLayer => physicsLayer; + } +} \ No newline at end of file diff --git a/Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs.meta b/Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs.meta new file mode 100644 index 000000000..d700094d7 --- /dev/null +++ b/Definitions/SpatialObservers/BaseMixedRealitySpatialObserverProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 048c415ed81a45218d1dbbd5a034fff7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs b/Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs new file mode 100644 index 000000000..4a16df44f --- /dev/null +++ b/Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs @@ -0,0 +1,107 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Attributes; + +namespace XRTK.Providers.SpatialObservers +{ + // No Scriptable Object Menu constructor attributes here, as this class is meant to be inherited. + + /// + /// The base surface observer profile. + /// + public abstract class BaseMixedRealitySurfaceObserverProfile : BaseMixedRealitySpatialObserverProfile + { + [PhysicsLayer] + [SerializeField] + [Tooltip("Optional physics layer override to specify for generated surface objects.")] + private int surfacePhysicsLayerOverride = -1; + + /// + /// The surface physics layer override to use on generated surface objects. + /// + public int SurfacePhysicsLayerOverride => surfacePhysicsLayerOverride; + + [SerializeField] + [Tooltip("The minimum area, in square meters, of the planar surfaces")] + private float surfaceFindingMinimumArea = 0.025f; + + /// + /// The minimum area, in square meters, of the planar surfaces. + /// + public float SurfaceFindingMinimumArea => surfaceFindingMinimumArea; + + [SerializeField] + [Tooltip("Automatically display floor surfaces?")] + private bool displayFloorSurfaces = false; + + /// + /// Indicates if the surface finding subsystem is to automatically display floor surfaces within the application. + /// + public bool DisplayFloorSurfaces => displayFloorSurfaces; + + [SerializeField] + [Tooltip("Material to use when displaying floor surfaces")] + private Material floorSurfaceMaterial = null; + + /// + /// The material to be used when automatically displaying floor surfaces. + /// + public Material FloorSurfaceMaterial => floorSurfaceMaterial; + + [SerializeField] + [Tooltip("Automatically display ceiling surfaces?")] + private bool displayCeilingSurfaces = false; + + /// + /// Indicates if the surface finding subsystem is to automatically display ceiling surfaces within the application. + /// + public bool DisplayCeilingSurface => displayCeilingSurfaces; + + [SerializeField] + [Tooltip("Material to use when displaying ceiling surfaces")] + private Material ceilingSurfaceMaterial = null; + + /// + /// The material to be used when automatically displaying ceiling surfaces. + /// + public Material CeilingSurfaceMaterial => ceilingSurfaceMaterial; + + [SerializeField] + [Tooltip("Automatically display wall surfaces?")] + private bool displayWallSurfaces = false; + + /// + /// Indicates if the surface finding subsystem is to automatically display wall surfaces within the application. + /// + public bool DisplayWallSurface => displayWallSurfaces; + + [SerializeField] + [Tooltip("Material to use when displaying wall surfaces")] + private Material wallSurfaceMaterial = null; + + /// + /// The material to be used when automatically displaying wall surfaces. + /// + public Material WallSurfaceMaterial => wallSurfaceMaterial; + + [SerializeField] + [Tooltip("Automatically display platform surfaces?")] + private bool displayPlatformSurfaces = false; + + /// + /// Indicates if the surface finding subsystem is to automatically display platform surfaces within the application. + /// + public bool DisplayPlatformSurfaces => displayPlatformSurfaces; + + [SerializeField] + [Tooltip("Material to use when displaying platform surfaces")] + private Material platformSurfaceMaterial = null; + + /// + /// The material to be used when automatically displaying platform surfaces. + /// + public Material PlatformSurfaceMaterial => platformSurfaceMaterial; + } +} \ No newline at end of file diff --git a/Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs.meta b/Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs.meta new file mode 100644 index 000000000..7c0b9232a --- /dev/null +++ b/Definitions/SpatialObservers/BaseMixedRealitySurfaceObserverProfile.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 81654571a71446ab9301d87206d6c0c5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities.meta b/Definitions/Utilities.meta new file mode 100644 index 000000000..e9dd2f57a --- /dev/null +++ b/Definitions/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c45d482ffdda4d83aefb40bcab008e87 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/AnimatorParameter.cs b/Definitions/Utilities/AnimatorParameter.cs new file mode 100644 index 000000000..6c90e1325 --- /dev/null +++ b/Definitions/Utilities/AnimatorParameter.cs @@ -0,0 +1,97 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Definitions.Utilities +{ + /// + /// A copy of the because that class is not Serializable and cannot be modified in the editor. + /// + [Serializable] + public struct AnimatorParameter + { + /// + /// Constructor. + /// + /// Name of the animation parameter to modify. + /// Type of the animation parameter to modify. + /// If the animation parameter type is an int, value to set. Ignored otherwise. + /// If the animation parameter type is a float, value to set. Ignored otherwise. + /// "If the animation parameter type is a bool, value to set. Ignored otherwise. + public AnimatorParameter(string name, AnimatorControllerParameterType parameterType, int defaultInt = 0, float defaultFloat = 0f, bool defaultBool = false) + { + this.parameterType = parameterType; + this.defaultInt = defaultInt; + this.defaultFloat = defaultFloat; + this.defaultBool = defaultBool; + this.name = name; + nameStringHash = null; + } + + [SerializeField] + [Tooltip("Type of the animation parameter to modify.")] + private AnimatorControllerParameterType parameterType; + + /// + /// Type of the animation parameter to modify. + /// + public AnimatorControllerParameterType ParameterType => parameterType; + + [SerializeField] + [Tooltip("If the animation parameter type is an int, value to set. Ignored otherwise.")] + private int defaultInt; + + /// + /// If the animation parameter type is an int, value to set. Ignored otherwise. + /// + public int DefaultInt => defaultInt; + + [SerializeField] + [Tooltip("If the animation parameter type is a float, value to set. Ignored otherwise.")] + private float defaultFloat; + + /// + /// If the animation parameter type is a float, value to set. Ignored otherwise. + /// + public float DefaultFloat => defaultFloat; + + [SerializeField] + [Tooltip("If the animation parameter type is a bool, value to set. Ignored otherwise.")] + private bool defaultBool; + + /// + /// If the animation parameter type is a bool, value to set. Ignored otherwise. + /// + public bool DefaultBool => defaultBool; + + [SerializeField] + [Tooltip("Name of the animation parameter to modify.")] + private string name; + + /// + /// Name of the animation parameter to modify. + /// + public string Name => name; + + private int? nameStringHash; + + /// + /// Animator Name String to Hash. + /// + public int NameHash + { + get + { + if (!nameStringHash.HasValue && !string.IsNullOrEmpty(Name)) + { + nameStringHash = Animator.StringToHash(Name); + } + + Debug.Assert(nameStringHash != null); + return nameStringHash.Value; + } + } + } +} diff --git a/Definitions/Utilities/AnimatorParameter.cs.meta b/Definitions/Utilities/AnimatorParameter.cs.meta new file mode 100644 index 000000000..c1e9ca681 --- /dev/null +++ b/Definitions/Utilities/AnimatorParameter.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a80c6185462b4c728089744f178c941f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/AutoStartBehavior.cs b/Definitions/Utilities/AutoStartBehavior.cs new file mode 100644 index 000000000..66eb0af4e --- /dev/null +++ b/Definitions/Utilities/AutoStartBehavior.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// This enumeration identifies two different ways to handle the startup behavior for a feature. + /// Both will warm up the component, ready for it's use (e.g. connecting backend services or registering for events. + /// The first causes the feature to start immediately. The second allows the feature to be manually started at a later time. + /// + public enum AutoStartBehavior + { + /// + /// Automatically start the feature + /// + AutoStart = 0, + /// + /// Delay the start of the feature until the user requests it to begin + /// + ManualStart + } +} \ No newline at end of file diff --git a/Definitions/Utilities/AutoStartBehavior.cs.meta b/Definitions/Utilities/AutoStartBehavior.cs.meta new file mode 100644 index 000000000..fd6dab790 --- /dev/null +++ b/Definitions/Utilities/AutoStartBehavior.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4a1e042abf6140a8929a44c9f6174346 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/AxisType.cs b/Definitions/Utilities/AxisType.cs new file mode 100644 index 000000000..e0af93d2f --- /dev/null +++ b/Definitions/Utilities/AxisType.cs @@ -0,0 +1,45 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// The AxisType identifies the type of button or input being sent to the framework from a controller. + /// This is mainly information only or for advanced users to understand the input coming directly from the controller. + /// + public enum AxisType + { + /// + /// No Specified type. + /// + None = 0, + /// + /// Raw stream from input (proxy only). + /// + Raw, + /// + /// Digital On/Off input. + /// + Digital, + /// + /// Single Axis analogue input. + /// + SingleAxis, + /// + /// Dual Axis analogue input. + /// + DualAxis, + /// + /// Position only Axis analogue input. + /// + ThreeDofPosition, + /// + /// Rotation only Axis analogue input. + /// + ThreeDofRotation, + /// + /// Position AND Rotation analogue input. + /// + SixDof + } +} \ No newline at end of file diff --git a/Definitions/Utilities/AxisType.cs.meta b/Definitions/Utilities/AxisType.cs.meta new file mode 100644 index 000000000..6f99dfdb8 --- /dev/null +++ b/Definitions/Utilities/AxisType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 062096f020324e21aa0ea2eb041f371a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/CollationOrderType.cs b/Definitions/Utilities/CollationOrderType.cs new file mode 100644 index 000000000..0bec56795 --- /dev/null +++ b/Definitions/Utilities/CollationOrderType.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Collation order type used for sorting + /// + public enum CollationOrderType + { + /// + /// Don't sort, just display in order received + /// + None = 0, + /// + /// Sort by child order of parent + /// + ChildOrder, + /// + /// Sort by transform name + /// + Alphabetical, + /// + /// Sort by child order of parent, reversed + /// + ChildOrderReversed, + /// + /// Sort by transform name, reversed + /// + AlphabeticalReversed + } +} diff --git a/Definitions/Utilities/CollationOrderType.cs.meta b/Definitions/Utilities/CollationOrderType.cs.meta new file mode 100644 index 000000000..291e5b223 --- /dev/null +++ b/Definitions/Utilities/CollationOrderType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c593391b2b67443e8f712e69141d3848 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/Handedness.cs b/Definitions/Utilities/Handedness.cs new file mode 100644 index 000000000..4100d9097 --- /dev/null +++ b/Definitions/Utilities/Handedness.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Definitions.Utilities +{ + /// + /// The Handedness defines which hand a controller is currently operating in. + /// It is up to the developer to determine whether this affects the use of a controller or not. + /// "Other" defines potential controllers that will offer a "third" hand, e.g. a full body tracking suit. + /// + [Flags] + public enum Handedness : byte + { + /// + /// No hand specified by the SDK for the controller + /// + None = 0 << 0, + /// + /// The controller is identified as being provided in a Left hand + /// + Left = 1 << 0, + /// + /// The controller is identified as being provided in a Right hand + /// + Right = 1 << 1, + /// + /// The controller is identified as being either left and/or right handed. + /// + Both = Left | Right, + /// + /// Reserved, for systems that provide alternate hand state. + /// + Other = 1 << 2, + /// + /// Global catchall, used to map actions to any controller (provided the controller supports it) + /// + /// Note, by default the specific hand actions will override settings mapped as both + Any = Other | Left | Right, + } +} \ No newline at end of file diff --git a/Definitions/Utilities/Handedness.cs.meta b/Definitions/Utilities/Handedness.cs.meta new file mode 100644 index 000000000..1d344e70b --- /dev/null +++ b/Definitions/Utilities/Handedness.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 171b010dcfef436fa3b923538bd7a141 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/MixedRealityPose.cs b/Definitions/Utilities/MixedRealityPose.cs new file mode 100644 index 000000000..2750a6292 --- /dev/null +++ b/Definitions/Utilities/MixedRealityPose.cs @@ -0,0 +1,146 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using UnityEngine; + +namespace XRTK.Definitions.Utilities +{ + [Serializable] + public struct MixedRealityPose : IEqualityComparer + { + /// + /// Constructor. + /// + /// + /// + public MixedRealityPose(Vector3 position, Quaternion rotation) + { + this.position = position; + this.rotation = rotation; + } + + /// + /// Constructor. + /// + /// + public MixedRealityPose(Vector3 position) + { + this.position = position; + rotation = Quaternion.identity; + } + + /// + /// Constructor. + /// + /// + public MixedRealityPose(Quaternion rotation) + { + position = Vector3.zero; + this.rotation = rotation; + } + + /// + /// The default value for a Six Dof Transform. + /// + /// + /// and . + /// + public static MixedRealityPose ZeroIdentity { get; } = new MixedRealityPose(Vector3.zero, Quaternion.identity); + + [SerializeField] + [Tooltip("The position of the pose")] + private Vector3 position; + + /// + /// The position of the pose. + /// + public Vector3 Position + { + get => position; + set => position = value; + } + + [SerializeField] + [Tooltip("The rotation of the pose.")] + private Quaternion rotation; + + /// + /// The rotation of the pose. + /// + public Quaternion Rotation + { + get => rotation; + set => rotation = value; + } + + public static MixedRealityPose operator +(MixedRealityPose left, MixedRealityPose right) + { + return new MixedRealityPose(left.Position + right.Position, left.Rotation * right.Rotation); + } + + public static bool operator ==(MixedRealityPose left, MixedRealityPose right) + { + return left.Equals(right); + } + + public static bool operator !=(MixedRealityPose left, MixedRealityPose right) + { + return !left.Equals(right); + } + + public override string ToString() + { + return $"{position} | {rotation}"; + } + + /// + /// The Z axis of the pose in world space + /// + public Vector3 Forward => rotation * Vector3.forward; + + /// + /// The Y axis of the pose in world space + /// + public Vector3 Up => rotation * Vector3.up; + + /// + /// The X axis of the pose in world space + /// + public Vector3 Right => rotation * Vector3.right; + + #region IEqualityComparer Implementation + + bool IEqualityComparer.Equals(object left, object right) + { + if (ReferenceEquals(null, left) || ReferenceEquals(null, right)) { return false; } + if (!(left is MixedRealityPose) || !(right is MixedRealityPose)) { return false; } + return ((MixedRealityPose)left).Equals((MixedRealityPose)right); + } + + public bool Equals(MixedRealityPose other) + { + return Position == other.Position && + Rotation == other.Rotation; + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { return false; } + return obj is MixedRealityPose pose && Equals(pose); + } + + int IEqualityComparer.GetHashCode(object obj) + { + return obj is MixedRealityPose pose ? pose.GetHashCode() : 0; + } + + public override int GetHashCode() + { + return base.GetHashCode(); + } + + #endregion IEqualityComparer Implementation + } +} diff --git a/Definitions/Utilities/MixedRealityPose.cs.meta b/Definitions/Utilities/MixedRealityPose.cs.meta new file mode 100644 index 000000000..04f872052 --- /dev/null +++ b/Definitions/Utilities/MixedRealityPose.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cc4537827ae446c6b180347f7a461031 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/OrientationType.cs b/Definitions/Utilities/OrientationType.cs new file mode 100644 index 000000000..212b7c3e1 --- /dev/null +++ b/Definitions/Utilities/OrientationType.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Orientation type enum + /// + public enum OrientationType + { + /// + /// Don't rotate at all + /// + None = 0, + /// + /// Rotate towards the origin + /// + FaceOrigin, + /// + /// Rotate towards the origin + 180 degrees + /// + FaceOriginReversed, + /// + /// Zero rotation + /// + FaceParentFoward, + /// + /// Zero rotation + 180 degrees + /// + FaceParentForwardReversed, + /// + /// Parent Relative Up + /// + FaceParentUp, + /// + /// Parent Relative Down + /// + FaceParentDown, + /// + /// Lay flat on the surface, facing in + /// + FaceCenterAxis, + /// + /// Lay flat on the surface, facing out + /// + FaceCenterAxisReversed + } +} \ No newline at end of file diff --git a/Definitions/Utilities/OrientationType.cs.meta b/Definitions/Utilities/OrientationType.cs.meta new file mode 100644 index 000000000..bdcf66eb2 --- /dev/null +++ b/Definitions/Utilities/OrientationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a33cf52c37646b2b3cef9cfd3a9345b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/PivotAxis.cs b/Definitions/Utilities/PivotAxis.cs new file mode 100644 index 000000000..75ee9eebf --- /dev/null +++ b/Definitions/Utilities/PivotAxis.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Rotational Pivot axis for orientating an object + /// + public enum PivotAxis + { + // Most common options, preserving current functionality with the same enum order. + XY, + Y, + // Rotate about an individual axis. + X, + Z, + // Rotate about a pair of axes. + XZ, + YZ, + // Rotate about all axes. + Free + } +} \ No newline at end of file diff --git a/Definitions/Utilities/PivotAxis.cs.meta b/Definitions/Utilities/PivotAxis.cs.meta new file mode 100644 index 000000000..38956b25e --- /dev/null +++ b/Definitions/Utilities/PivotAxis.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5fb59d46d33b499b830e2433c72eb488 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/ProcessResult.cs b/Definitions/Utilities/ProcessResult.cs new file mode 100644 index 000000000..e1a2e5960 --- /dev/null +++ b/Definitions/Utilities/ProcessResult.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Result from a completed asynchronous process. + /// + public struct ProcessResult + { + /// + /// Exit code from completed process. + /// + public int ExitCode { get; } + + /// + /// Errors from completed process. + /// + public string[] Errors { get; } + + /// + /// Output from completed process. + /// + public string[] Output { get; } + + /// + /// Constructor for Process Result. + /// + /// Exit code from completed process. + /// Errors from completed process. + /// Output from completed process. + public ProcessResult(int exitCode, string[] errors, string[] output) : this() + { + ExitCode = exitCode; + Errors = errors; + Output = output; + } + } +} \ No newline at end of file diff --git a/Definitions/Utilities/ProcessResult.cs.meta b/Definitions/Utilities/ProcessResult.cs.meta new file mode 100644 index 000000000..435798828 --- /dev/null +++ b/Definitions/Utilities/ProcessResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2370dd5f99174d76abeaa42bfc9f7ee0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/ProfileMenuItemIndices.cs b/Definitions/Utilities/ProfileMenuItemIndices.cs new file mode 100644 index 000000000..d7fa571e3 --- /dev/null +++ b/Definitions/Utilities/ProfileMenuItemIndices.cs @@ -0,0 +1,31 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Defines the display order of the Assets > Create > Mixed Reality Toolkit > Profiles menu items. + /// + public enum CreateProfileMenuItemIndices + { + Configuration = 0, + Camera, + Input, + Pointer, + InputActions, + InputActionRules, + Gestures, + SpeechCommands, + ControllerDataProviders, + ControllerMappings, + ControllerVisualization, + BoundaryVisualization, + SpatialAwareness, + SpatialAwarenessDataProviders, + Networking, + NetworkingDataProviders, + Diagnostics, + RegisteredServiceProviders, + Settings, + } +} diff --git a/Definitions/Utilities/ProfileMenuItemIndices.cs.meta b/Definitions/Utilities/ProfileMenuItemIndices.cs.meta new file mode 100644 index 000000000..bc665fe80 --- /dev/null +++ b/Definitions/Utilities/ProfileMenuItemIndices.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 115bc64b7a0e4d9db0eaf516fe3a730b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/QuaternionSmoothed.cs b/Definitions/Utilities/QuaternionSmoothed.cs new file mode 100644 index 000000000..40c854b37 --- /dev/null +++ b/Definitions/Utilities/QuaternionSmoothed.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Definitions.Utilities +{ + [Serializable] + public struct QuaternionSmoothed + { + public Quaternion Current { get; set; } + public Quaternion Goal { get; set; } + public float SmoothTime { get; set; } + + public QuaternionSmoothed(Quaternion value, float smoothingTime) : this() + { + Current = value; + Goal = value; + SmoothTime = smoothingTime; + } + + public void Update(float deltaTime) + { + Current = Quaternion.Slerp(Current, Goal, (Math.Abs(SmoothTime) < Mathf.Epsilon) ? 1.0f : deltaTime / SmoothTime); + } + + public void SetGoal(Quaternion newGoal) + { + Goal = newGoal; + } + } +} \ No newline at end of file diff --git a/Definitions/Utilities/QuaternionSmoothed.cs.meta b/Definitions/Utilities/QuaternionSmoothed.cs.meta new file mode 100644 index 000000000..cf0d557e0 --- /dev/null +++ b/Definitions/Utilities/QuaternionSmoothed.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c863f825ccd144909f26979b6d089ce9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/RecognitionConfidenceLevel.cs b/Definitions/Utilities/RecognitionConfidenceLevel.cs new file mode 100644 index 000000000..b1039638c --- /dev/null +++ b/Definitions/Utilities/RecognitionConfidenceLevel.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Indicates the confidence level of a recognized event. + /// + public enum RecognitionConfidenceLevel + { + High = 0, + Medium, + Low, + Unknown + } +} diff --git a/Definitions/Utilities/RecognitionConfidenceLevel.cs.meta b/Definitions/Utilities/RecognitionConfidenceLevel.cs.meta new file mode 100644 index 000000000..421a0fc3a --- /dev/null +++ b/Definitions/Utilities/RecognitionConfidenceLevel.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89b02bd20d5f41cd86237edc05136dfe +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/RotationConstraintType.cs b/Definitions/Utilities/RotationConstraintType.cs new file mode 100644 index 000000000..32222da7d --- /dev/null +++ b/Definitions/Utilities/RotationConstraintType.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + public enum RotationConstraintType + { + None, + XAxisOnly, + YAxisOnly, + ZAxisOnly + } +} \ No newline at end of file diff --git a/Definitions/Utilities/RotationConstraintType.cs.meta b/Definitions/Utilities/RotationConstraintType.cs.meta new file mode 100644 index 000000000..8f1563d09 --- /dev/null +++ b/Definitions/Utilities/RotationConstraintType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b3ad4e43b734d36a836533c115392ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/ScaleStateType.cs b/Definitions/Utilities/ScaleStateType.cs new file mode 100644 index 000000000..67c753cbc --- /dev/null +++ b/Definitions/Utilities/ScaleStateType.cs @@ -0,0 +1,12 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + public enum ScaleStateType + { + Static = 0, + Shrinking, + Growing + } +} \ No newline at end of file diff --git a/Definitions/Utilities/ScaleStateType.cs.meta b/Definitions/Utilities/ScaleStateType.cs.meta new file mode 100644 index 000000000..e8c26fa19 --- /dev/null +++ b/Definitions/Utilities/ScaleStateType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bc14b8263252449c93fc1e61ff1127e5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/SolverOrientationType.cs b/Definitions/Utilities/SolverOrientationType.cs new file mode 100644 index 000000000..55f3b074f --- /dev/null +++ b/Definitions/Utilities/SolverOrientationType.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + public enum SolverOrientationType + { + /// + /// Use the tracked object's pitch, yaw, and roll + /// + FollowTrackedObject = 0, + /// + /// Face toward the tracked object + /// + FaceTrackedObject, + /// + /// Orient towards SolverHandler's tracked object or TargetTransform + /// + YawOnly, + /// + /// Leave the object's rotation alone + /// + Unmodified, + /// + /// Orient toward Camera.main instead of SolverHandler's properties. + /// + CameraFacing, + /// + /// Align parallel to the direction the camera is facing + /// + CameraAligned + } +} \ No newline at end of file diff --git a/Definitions/Utilities/SolverOrientationType.cs.meta b/Definitions/Utilities/SolverOrientationType.cs.meta new file mode 100644 index 000000000..ad212d737 --- /dev/null +++ b/Definitions/Utilities/SolverOrientationType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6392f51aa57b48818397fe61b39ef995 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/SupportedPlatforms.cs b/Definitions/Utilities/SupportedPlatforms.cs new file mode 100644 index 000000000..711d84239 --- /dev/null +++ b/Definitions/Utilities/SupportedPlatforms.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Definitions.Utilities +{ + /// + /// The supported platforms for Mixed Reality Toolkit Components and Features. + /// + [Flags] + public enum SupportedPlatforms + { + WindowsStandalone = 1 << 0, + MacStandalone = 1 << 1, + LinuxStandalone = 1 << 2, + WindowsUniversal = 1 << 3, + Lumin = 1 << 4, + } +} \ No newline at end of file diff --git a/Definitions/Utilities/SupportedPlatforms.cs.meta b/Definitions/Utilities/SupportedPlatforms.cs.meta new file mode 100644 index 000000000..87f64c7aa --- /dev/null +++ b/Definitions/Utilities/SupportedPlatforms.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e8bfc155d5fe450e91b0af0d5251d241 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/SystemType.cs b/Definitions/Utilities/SystemType.cs new file mode 100644 index 000000000..547f6d9bd --- /dev/null +++ b/Definitions/Utilities/SystemType.cs @@ -0,0 +1,116 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Definitions.Utilities +{ + /// + /// Reference to a class with support for Unity serialization. + /// + [Serializable] + public sealed class SystemType : ISerializationCallbackReceiver + { + [SerializeField] + private string reference = string.Empty; + + private Type type; + + public static string GetReference(Type type) + { + if (type == null || string.IsNullOrEmpty(type.AssemblyQualifiedName)) + { + return string.Empty; + } + + var qualifiedNameComponents = type.AssemblyQualifiedName.Split(','); + Debug.Assert(qualifiedNameComponents.Length >= 2); + return $"{qualifiedNameComponents[0]}, {qualifiedNameComponents[1].Trim()}"; + } + + /// + /// Initializes a new instance of the class. + /// + /// Assembly qualified class name. + public SystemType(string assemblyQualifiedClassName) + { + if (!string.IsNullOrEmpty(assemblyQualifiedClassName)) + { + Type = Type.GetType(assemblyQualifiedClassName); + + if (Type != null && Type.IsAbstract) + { + Type = null; + } + } + else + { + Type = null; + } + } + + /// + /// Initializes a new instance of the class. + /// + /// Class type. + public SystemType(Type type) + { + Type = type; + } + + #region ISerializationCallbackReceiver Members + + void ISerializationCallbackReceiver.OnAfterDeserialize() + { + type = !string.IsNullOrEmpty(reference) ? Type.GetType(reference) : null; + } + + void ISerializationCallbackReceiver.OnBeforeSerialize() { } + + #endregion ISerializationCallbackReceiver Members + + /// + /// Gets or sets type of class reference. + /// + public Type Type + { + get => type; + set + { + if (value != null) + { + bool isValid = value.IsValueType && !value.IsEnum && !value.IsAbstract || value.IsClass; + + if (!isValid) + { + Debug.LogError($"'{value.FullName}' is not a valid class or struct type."); + } + } + + type = value; + reference = GetReference(value); + } + } + + public static implicit operator string(SystemType type) + { + return type.reference; + } + + public static implicit operator Type(SystemType type) + { + return type.Type; + } + + public static implicit operator SystemType(Type type) + { + return new SystemType(type); + } + + public override string ToString() + { + return Type?.FullName ?? "(None)"; + } + } +} \ No newline at end of file diff --git a/Definitions/Utilities/SystemType.cs.meta b/Definitions/Utilities/SystemType.cs.meta new file mode 100644 index 000000000..fa88b733c --- /dev/null +++ b/Definitions/Utilities/SystemType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d20096859da46928defefd3bba9f1c9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/TrackedObjectType.cs b/Definitions/Utilities/TrackedObjectType.cs new file mode 100644 index 000000000..88e2ffcc7 --- /dev/null +++ b/Definitions/Utilities/TrackedObjectType.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + public enum TrackedObjectType + { + /// + /// Calculates position and orientation from the main camera. + /// + Head = 0, + /// + /// Calculates position and orientation from the left motion-tracked controller. + /// + MotionControllerLeft, + /// + /// Calculates position and orientation from the right motion-tracked controller. + /// + MotionControllerRight + } +} \ No newline at end of file diff --git a/Definitions/Utilities/TrackedObjectType.cs.meta b/Definitions/Utilities/TrackedObjectType.cs.meta new file mode 100644 index 000000000..e700362b1 --- /dev/null +++ b/Definitions/Utilities/TrackedObjectType.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 757b8797feaa45fcbeebf077c01076e0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/TypeGrouping.cs b/Definitions/Utilities/TypeGrouping.cs new file mode 100644 index 000000000..cb43c6f7d --- /dev/null +++ b/Definitions/Utilities/TypeGrouping.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Definitions.Utilities +{ + /// + /// Indicates how selectable classes should be collated in drop-down menu. + /// + public enum TypeGrouping + { + /// + /// No grouping, just show type names in a list; for instance, "Some.Nested.Namespace.SpecialClass". + /// + None, + + /// + /// Group classes by namespace and show foldout menus for nested namespaces; for + /// instance, "Some > Nested > Namespace > SpecialClass". + /// + ByNamespace, + + /// + /// Group classes by namespace; for instance, "Some.Nested.Namespace > SpecialClass". + /// + ByNamespaceFlat, + + /// + /// Group classes in the same way as Unity does for its component menu. This + /// grouping method must only be used for types. + /// + ByAddComponentMenu, + } +} \ No newline at end of file diff --git a/Definitions/Utilities/TypeGrouping.cs.meta b/Definitions/Utilities/TypeGrouping.cs.meta new file mode 100644 index 000000000..3f91f7578 --- /dev/null +++ b/Definitions/Utilities/TypeGrouping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8619cedd211344ba97c5abf3409345ff +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Definitions/Utilities/Vector3Smoothed.cs b/Definitions/Utilities/Vector3Smoothed.cs new file mode 100644 index 000000000..b5bc48762 --- /dev/null +++ b/Definitions/Utilities/Vector3Smoothed.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Definitions.Utilities +{ + [Serializable] + public struct Vector3Smoothed + { + public Vector3 Current { get; set; } + public Vector3 Goal { get; set; } + public float SmoothTime { get; set; } + + public Vector3Smoothed(Vector3 value, float smoothingTime) : this() + { + Current = value; + Goal = value; + SmoothTime = smoothingTime; + } + + public void Update(float deltaTime) + { + Current = Vector3.Lerp(Current, Goal, (Math.Abs(SmoothTime) < Mathf.Epsilon) ? 1.0f : deltaTime / SmoothTime); + } + + public void SetGoal(Vector3 newGoal) + { + Goal = newGoal; + } + } +} \ No newline at end of file diff --git a/Definitions/Utilities/Vector3Smoothed.cs.meta b/Definitions/Utilities/Vector3Smoothed.cs.meta new file mode 100644 index 000000000..ef551ece8 --- /dev/null +++ b/Definitions/Utilities/Vector3Smoothed.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f8d34b94a6b40fd86ea8798242350fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum.meta b/EventDatum.meta new file mode 100644 index 000000000..3c6bfc824 --- /dev/null +++ b/EventDatum.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b3f8a82b72ae4319ba292019cd7e6174 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Boundary.meta b/EventDatum/Boundary.meta new file mode 100644 index 000000000..4c39f8367 --- /dev/null +++ b/EventDatum/Boundary.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11a169014c2b414f97e09b0748e63437 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Boundary/BoundaryEventData.cs b/EventDatum/Boundary/BoundaryEventData.cs new file mode 100644 index 000000000..47cf0e252 --- /dev/null +++ b/EventDatum/Boundary/BoundaryEventData.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Interfaces.BoundarySystem; + +namespace XRTK.EventDatum.Boundary +{ + /// + /// The data describing the boundary system event. + /// + public class BoundaryEventData : GenericBaseEventData + { + /// + /// Is the floor being visualized by the boundary system. + /// + public bool IsFloorVisualized { get; private set; } + + /// + /// Is the play area being visualized by the boundary system. + /// + public bool IsPlayAreaVisualized { get; private set; } + + /// + /// Is the tracked area being visualized by the boundary system. + /// + public bool IsTrackedAreaVisualized { get; private set; } + + /// + /// Are the boundary walls being visualized by the boundary system. + /// + public bool AreBoundaryWallsVisualized { get; private set; } + + /// + /// Is the ceiling being visualized by the boundary system. + /// + /// + /// The boundary system defines the ceiling as a plane set at above the floor. + /// + public bool IsCeilingVisualized { get; private set; } + + /// + /// Constructor. + /// + /// + public BoundaryEventData(EventSystem eventSystem) : base(eventSystem) { } + + public void Initialize( + IMixedRealityBoundarySystem boundarySystem, + bool isFloorVisualized, + bool isPlayAreaVisualized, + bool isTrackedAreaVisualized, + bool areBoundaryWallsVisualized, + bool isCeilingVisualized) + { + base.BaseInitialize(boundarySystem); + IsFloorVisualized = isFloorVisualized; + IsPlayAreaVisualized = isPlayAreaVisualized; + IsTrackedAreaVisualized = isTrackedAreaVisualized; + AreBoundaryWallsVisualized = areBoundaryWallsVisualized; + IsCeilingVisualized = isCeilingVisualized; + } + } +} diff --git a/EventDatum/Boundary/BoundaryEventData.cs.meta b/EventDatum/Boundary/BoundaryEventData.cs.meta new file mode 100644 index 000000000..5c38e07c2 --- /dev/null +++ b/EventDatum/Boundary/BoundaryEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a5b295dec324d82bee9bd51d54b793e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Diagnostics.meta b/EventDatum/Diagnostics.meta new file mode 100644 index 000000000..1be0452eb --- /dev/null +++ b/EventDatum/Diagnostics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 81b79ab630474a00ae08cddbe608985c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Diagnostics/DiagnosticsEventData.cs b/EventDatum/Diagnostics/DiagnosticsEventData.cs new file mode 100644 index 000000000..0d09aac23 --- /dev/null +++ b/EventDatum/Diagnostics/DiagnosticsEventData.cs @@ -0,0 +1,35 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Interfaces.Diagnostics; + +namespace XRTK.EventDatum.Diagnostics +{ + public class DiagnosticsEventData : GenericBaseEventData + { + public bool Visible { get; private set; } + + public bool ShowCpu { get; private set; } + + public bool ShowFps { get; private set; } + + public bool ShowMemory { get; private set; } + + public DiagnosticsEventData(EventSystem eventSystem) : base(eventSystem) { } + + public void Initialize( + IMixedRealityDiagnosticsSystem diagnosticsSystem, + bool visible, + bool showCpu, + bool showFps, + bool showMemory) + { + BaseInitialize(diagnosticsSystem); + Visible = visible; + ShowCpu = showCpu; + ShowFps = showFps; + ShowMemory = showMemory; + } + } +} diff --git a/EventDatum/Diagnostics/DiagnosticsEventData.cs.meta b/EventDatum/Diagnostics/DiagnosticsEventData.cs.meta new file mode 100644 index 000000000..cd6ff6edd --- /dev/null +++ b/EventDatum/Diagnostics/DiagnosticsEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d7e5c806311d468bab4365524da65eef +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/GenericBaseEventData.cs b/EventDatum/GenericBaseEventData.cs new file mode 100644 index 000000000..185f351c8 --- /dev/null +++ b/EventDatum/GenericBaseEventData.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine.EventSystems; +using XRTK.Interfaces.Events; + +namespace XRTK.EventDatum +{ + /// + /// Generic Base Event Data for Sending Events through the Event System. + /// + public class GenericBaseEventData : BaseEventData + { + /// + /// The Event Source that the event originates from. + /// + public IMixedRealityEventSource EventSource { get; private set; } + + /// + /// The time at which the event occurred. + /// + /// + /// The value will be in the device's configured time zone. + /// + public DateTime EventTime { get; private set; } + + /// + /// Constructor. + /// + /// Usually + public GenericBaseEventData(EventSystem eventSystem) : base(eventSystem) + { + if (eventSystem == null) + { + throw new Exception("Event system cannot be null!"); + } + } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// The source of the event. + protected void BaseInitialize(IMixedRealityEventSource eventSource) + { + Reset(); + EventTime = DateTime.UtcNow; + EventSource = eventSource; + } + } +} \ No newline at end of file diff --git a/EventDatum/GenericBaseEventData.cs.meta b/EventDatum/GenericBaseEventData.cs.meta new file mode 100644 index 000000000..d9c79b601 --- /dev/null +++ b/EventDatum/GenericBaseEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3ad07ac1ed194d11a11e6023bd8f6aa9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input.meta b/EventDatum/Input.meta new file mode 100644 index 000000000..4ac0266ad --- /dev/null +++ b/EventDatum/Input.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 0700918a642c4eca94ec762c7ed0b545 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/BaseInputEventData.cs b/EventDatum/Input/BaseInputEventData.cs new file mode 100644 index 000000000..ec99be50a --- /dev/null +++ b/EventDatum/Input/BaseInputEventData.cs @@ -0,0 +1,65 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine.EventSystems; +using XRTK.Definitions.InputSystem; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Base class of all Input Events. + /// + public abstract class BaseInputEventData : BaseEventData + { + /// + /// The time at which the event occurred. + /// + /// + /// The value will be in the device's configured time zone. + /// + public DateTime EventTime { get; private set; } + + /// + /// The source the input event originates from. + /// + public IMixedRealityInputSource InputSource { get; private set; } + + /// + /// The id of the source the event is from, for instance the hand id. + /// + public uint SourceId { get; private set; } + + /// + /// The Input Action for this event. + /// + public MixedRealityInputAction MixedRealityInputAction { get; private set; } + + /// + /// Constructor. + /// + /// Typically will be + protected BaseInputEventData(EventSystem eventSystem) : base(eventSystem) + { + if (eventSystem == null) + { + throw new Exception("Event system cannot be null!"); + } + } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + protected void BaseInitialize(IMixedRealityInputSource inputSource, MixedRealityInputAction inputAction) + { + Reset(); + EventTime = DateTime.UtcNow; + InputSource = inputSource; + MixedRealityInputAction = inputAction; + SourceId = InputSource.SourceId; + } + } +} diff --git a/EventDatum/Input/BaseInputEventData.cs.meta b/EventDatum/Input/BaseInputEventData.cs.meta new file mode 100644 index 000000000..2f157ac5c --- /dev/null +++ b/EventDatum/Input/BaseInputEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16cfacee15fa49c28e2b8051c69c251d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/DictationEventData.cs b/EventDatum/Input/DictationEventData.cs new file mode 100644 index 000000000..f4bddd5aa --- /dev/null +++ b/EventDatum/Input/DictationEventData.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions.InputSystem; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes an Input Event with voice dictation. + /// + public class DictationEventData : BaseInputEventData + { + /// + /// String result of the current dictation. + /// + public string DictationResult { get; private set; } + + /// + /// Audio Clip of the last Dictation recording Session. + /// + public AudioClip DictationAudioClip { get; private set; } + + /// + public DictationEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + /// + public void Initialize(IMixedRealityInputSource inputSource, string dictationResult, AudioClip dictationAudioClip = null) + { + BaseInitialize(inputSource, MixedRealityInputAction.None); + DictationResult = dictationResult; + DictationAudioClip = dictationAudioClip; + } + } +} diff --git a/EventDatum/Input/DictationEventData.cs.meta b/EventDatum/Input/DictationEventData.cs.meta new file mode 100644 index 000000000..902319758 --- /dev/null +++ b/EventDatum/Input/DictationEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f57e3a5783b34dd88ea5fd040b4d36a8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/FocusEventData.cs b/EventDatum/Input/FocusEventData.cs new file mode 100644 index 000000000..bc174c6a9 --- /dev/null +++ b/EventDatum/Input/FocusEventData.cs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes an Input Event associated with a specific pointer's focus state change. + /// + public class FocusEventData : BaseEventData + { + /// + /// The pointer associated with this event. + /// + public IMixedRealityPointer Pointer { get; private set; } + + /// + /// The old focused object. + /// + public GameObject OldFocusedObject { get; private set; } + + /// + /// The new focused object. + /// + public GameObject NewFocusedObject { get; private set; } + + /// + public FocusEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + public void Initialize(IMixedRealityPointer pointer) + { + Reset(); + Pointer = pointer; + } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + /// + public void Initialize(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject) + { + Reset(); + Pointer = pointer; + OldFocusedObject = oldFocusedObject; + NewFocusedObject = newFocusedObject; + } + } +} + diff --git a/EventDatum/Input/FocusEventData.cs.meta b/EventDatum/Input/FocusEventData.cs.meta new file mode 100644 index 000000000..3bd86c0b1 --- /dev/null +++ b/EventDatum/Input/FocusEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f281bf61eaa4b4c91ae6ed7359501b6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/GraphicInputEventData.cs b/EventDatum/Input/GraphicInputEventData.cs new file mode 100644 index 000000000..d14ca6a6a --- /dev/null +++ b/EventDatum/Input/GraphicInputEventData.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes a uGUI event that was generated by a specific pointer. + /// + public class GraphicInputEventData : PointerEventData + { + /// + public GraphicInputEventData(EventSystem eventSystem) : base(eventSystem) + { + if (eventSystem == null) + { + throw new Exception("Event system cannot be null!"); + } + } + + /// + /// Clears the pointer data and calls the base 's Reset method. + /// + public void Clear() + { + Reset(); + button = InputButton.Left; + clickCount = 0; + clickTime = 0; + delta = Vector2.zero; + dragging = false; + eligibleForClick = false; + pointerCurrentRaycast = default; + pointerDrag = null; + pointerEnter = null; + pointerId = 0; + pointerPress = null; + pointerPressRaycast = default; + position = Vector2.zero; + pressPosition = Vector2.zero; + rawPointerPress = null; + scrollDelta = Vector2.zero; + selectedObject = null; + useDragThreshold = false; + } + } +} \ No newline at end of file diff --git a/EventDatum/Input/GraphicInputEventData.cs.meta b/EventDatum/Input/GraphicInputEventData.cs.meta new file mode 100644 index 000000000..2d5ee0fd1 --- /dev/null +++ b/EventDatum/Input/GraphicInputEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f31980dc262140159569b6f39ada7630 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/InputEventData.cs b/EventDatum/Input/InputEventData.cs new file mode 100644 index 000000000..a2cd41690 --- /dev/null +++ b/EventDatum/Input/InputEventData.cs @@ -0,0 +1,64 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes an Input Event that has a source id. + /// + public class InputEventData : BaseInputEventData + { + /// + /// Handedness of the . + /// + public Handedness Handedness { get; private set; } = Handedness.None; + + /// + public InputEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + /// + public void Initialize(IMixedRealityInputSource inputSource, Handedness handedness, MixedRealityInputAction inputAction) + { + BaseInitialize(inputSource, inputAction); + Handedness = handedness; + } + } + + /// + /// Describes and input event with a specific type. + /// + /// + public class InputEventData : InputEventData + { + /// + /// The input data of the event. + /// + public T InputData { get; private set; } + + /// + public InputEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + /// + /// + public void Initialize(IMixedRealityInputSource inputSource, Handedness handedness, MixedRealityInputAction inputAction, T data) + { + Initialize(inputSource, handedness, inputAction); + InputData = data; + } + } +} diff --git a/EventDatum/Input/InputEventData.cs.meta b/EventDatum/Input/InputEventData.cs.meta new file mode 100644 index 000000000..3b89bf276 --- /dev/null +++ b/EventDatum/Input/InputEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3c53dcd4b514489fb10d8d828a4ce9f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/MixedRealityPointerEventData.cs b/EventDatum/Input/MixedRealityPointerEventData.cs new file mode 100644 index 000000000..b266e04c0 --- /dev/null +++ b/EventDatum/Input/MixedRealityPointerEventData.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Definitions.InputSystem; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes an Input Event that involves a tap, click, or touch. + /// + public class MixedRealityPointerEventData : BaseInputEventData + { + /// + /// Pointer for the Input Event + /// + public IMixedRealityPointer Pointer { get; private set; } + + /// + /// Number of Clicks, Taps, or Presses that triggered the event. + /// + public int Count { get; private set; } + + /// + public MixedRealityPointerEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + /// + /// + public void Initialize(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, IMixedRealityInputSource inputSource = null, int count = 0) + { + BaseInitialize(inputSource ?? pointer.InputSourceParent, inputAction); + Pointer = pointer; + Count = count; + } + } +} diff --git a/EventDatum/Input/MixedRealityPointerEventData.cs.meta b/EventDatum/Input/MixedRealityPointerEventData.cs.meta new file mode 100644 index 000000000..075baa555 --- /dev/null +++ b/EventDatum/Input/MixedRealityPointerEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1eea5c1090af49249ff92e8fbe425242 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/SourcePoseEventData.cs b/EventDatum/Input/SourcePoseEventData.cs new file mode 100644 index 000000000..1c1e0fec1 --- /dev/null +++ b/EventDatum/Input/SourcePoseEventData.cs @@ -0,0 +1,36 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes a source change event. + /// + /// Source State events do not have an associated . + public class SourcePoseEventData : SourceStateEventData + { + /// + /// The new position of the input source. + /// + public T SourceData { get; private set; } + + /// + public SourcePoseEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Populates the event with data. + /// + /// + /// + /// + public void Initialize(IMixedRealityInputSource inputSource, IMixedRealityController controller, T data) + { + Initialize(inputSource, controller); + SourceData = data; + } + } +} \ No newline at end of file diff --git a/EventDatum/Input/SourcePoseEventData.cs.meta b/EventDatum/Input/SourcePoseEventData.cs.meta new file mode 100644 index 000000000..77acfb4dc --- /dev/null +++ b/EventDatum/Input/SourcePoseEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ed49c3a1baca4c29b1a819acd0e4fcb6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/SourceStateEventData.cs b/EventDatum/Input/SourceStateEventData.cs new file mode 100644 index 000000000..a93f50671 --- /dev/null +++ b/EventDatum/Input/SourceStateEventData.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes an source state event that has a source id. + /// + /// Source State events do not have an associated . + public class SourceStateEventData : BaseInputEventData + { + public IMixedRealityController Controller { get; private set; } + + /// + public SourceStateEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Populates the event with data. + /// + /// + /// + public void Initialize(IMixedRealityInputSource inputSource, IMixedRealityController controller) + { + // NOTE: Source State events do not have an associated Input Action. + BaseInitialize(inputSource, Definitions.InputSystem.MixedRealityInputAction.None); + Controller = controller; + } + } +} diff --git a/EventDatum/Input/SourceStateEventData.cs.meta b/EventDatum/Input/SourceStateEventData.cs.meta new file mode 100644 index 000000000..6037ffa72 --- /dev/null +++ b/EventDatum/Input/SourceStateEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 72c48266e95948dc8fe4e38c52727542 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Input/SpeechEventData.cs b/EventDatum/Input/SpeechEventData.cs new file mode 100644 index 000000000..b1c0328be --- /dev/null +++ b/EventDatum/Input/SpeechEventData.cs @@ -0,0 +1,59 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine.EventSystems; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.EventDatum.Input +{ + /// + /// Describes an input event that involves keyword recognition. + /// + public class SpeechEventData : BaseInputEventData + { + /// + /// The time it took for the phrase to be uttered. + /// + public TimeSpan PhraseDuration { get; private set; } + + /// + /// The moment in time when uttering of the phrase began. + /// + public DateTime PhraseStartTime { get; private set; } + + /// + /// The text that was recognized. + /// + public string RecognizedText { get; private set; } + + /// + /// A measure of correct recognition certainty. + /// + public RecognitionConfidenceLevel Confidence { get; private set; } + + /// + public SpeechEventData(EventSystem eventSystem) : base(eventSystem) { } + + + /// + /// Populates the event with data. + /// + /// + /// + /// + /// + /// + /// + public void Initialize(IMixedRealityInputSource inputSource, MixedRealityInputAction inputAction, RecognitionConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, string recognizedText) + { + BaseInitialize(inputSource, inputAction); + Confidence = confidence; + PhraseDuration = phraseDuration; + PhraseStartTime = phraseStartTime; + RecognizedText = recognizedText; + } + } +} \ No newline at end of file diff --git a/EventDatum/Input/SpeechEventData.cs.meta b/EventDatum/Input/SpeechEventData.cs.meta new file mode 100644 index 000000000..815ed1cfa --- /dev/null +++ b/EventDatum/Input/SpeechEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0bfb71518cde49e589dc8ecbd2243662 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Networking.meta b/EventDatum/Networking.meta new file mode 100644 index 000000000..1e2b72504 --- /dev/null +++ b/EventDatum/Networking.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: de290159793c4c2ca088da2134c00b33 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Networking/BaseNetworkingEventData.cs b/EventDatum/Networking/BaseNetworkingEventData.cs new file mode 100644 index 000000000..13a249a34 --- /dev/null +++ b/EventDatum/Networking/BaseNetworkingEventData.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; + +namespace XRTK.EventDatum.Networking +{ + /// + /// The base networking event data for networked messages and events. + /// + /// + public class BaseNetworkingEventData : GenericBaseEventData + { + /// + /// The data of the network event. + /// + public T Data { get; private set; } + + /// + /// Constructor. + /// + /// + public BaseNetworkingEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + public void Initialize(T data) + { + BaseInitialize(null); + Data = data; + } + } +} diff --git a/EventDatum/Networking/BaseNetworkingEventData.cs.meta b/EventDatum/Networking/BaseNetworkingEventData.cs.meta new file mode 100644 index 000000000..cce233020 --- /dev/null +++ b/EventDatum/Networking/BaseNetworkingEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7ffd2346535b4bc4baab3e0de19a0900 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/PlacementEventData.cs b/EventDatum/PlacementEventData.cs new file mode 100644 index 000000000..7179b4e3f --- /dev/null +++ b/EventDatum/PlacementEventData.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Interfaces.Events; + +namespace XRTK.EventDatum +{ + /// + /// Describes placement of objects events. + /// + public class PlacementEventData : GenericBaseEventData + { + /// + /// The game object that is being placed. + /// + public GameObject ObjectBeingPlaced { get; private set; } + + /// + public PlacementEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Populates the event with data. + /// + /// + /// + public void Initialize(IMixedRealityEventSource eventSource, GameObject objectBeingPlaced) + { + BaseInitialize(eventSource); + ObjectBeingPlaced = objectBeingPlaced; + } + } +} diff --git a/EventDatum/PlacementEventData.cs.meta b/EventDatum/PlacementEventData.cs.meta new file mode 100644 index 000000000..cc30bfed7 --- /dev/null +++ b/EventDatum/PlacementEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78e2ae3c13f3439f9a3caaa8df6aaa4e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/README.md b/EventDatum/README.md new file mode 100644 index 000000000..9ff6a2d13 --- /dev/null +++ b/EventDatum/README.md @@ -0,0 +1,5 @@ +# Mixed Reality Toolkit - EventDatum + +Data model classes for the inner workings of the Mixed Reality Toolkit and it's supported Core systems. + +All data models required for system use within the MRTK should be recorded here. \ No newline at end of file diff --git a/EventDatum/README.md.meta b/EventDatum/README.md.meta new file mode 100644 index 000000000..51cd8f8cd --- /dev/null +++ b/EventDatum/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 1b14141a40ca455b8e4ab6a6f4e3a9cc +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/SpatialAwareness.meta b/EventDatum/SpatialAwareness.meta new file mode 100644 index 000000000..c818c842e --- /dev/null +++ b/EventDatum/SpatialAwareness.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ef17776afc204551a871c5b593184a42 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs b/EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs new file mode 100644 index 000000000..15b81f08c --- /dev/null +++ b/EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Interfaces.Providers.SpatialObservers; + +namespace XRTK.EventDatum.SpatialAwarenessSystem +{ + /// + /// Data for spatial awareness events. + /// + public class MixedRealitySpatialAwarenessEventData : GenericBaseEventData + { + /// + /// Identifier of the object associated with this event. + /// + public int Id { get; private set; } + + /// + /// The spatial object managed by the spatial awareness system, representing the data in this event. + /// + public T SpatialObject { get; private set; } + + /// + /// Constructor. + /// + /// + public MixedRealitySpatialAwarenessEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + /// + public void Initialize(IMixedRealitySpatialObserverDataProvider spatialAwarenessObserver, int id, T spatialObject) + { + BaseInitialize(spatialAwarenessObserver); + Id = id; + SpatialObject = spatialObject; + } + } +} diff --git a/EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs.meta b/EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs.meta new file mode 100644 index 000000000..58d6a1652 --- /dev/null +++ b/EventDatum/SpatialAwareness/MixedRealitySpatialAwarenessEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57f0192ad8324cc2b4a6a7d8569b48da +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Teleport.meta b/EventDatum/Teleport.meta new file mode 100644 index 000000000..af7b7d704 --- /dev/null +++ b/EventDatum/Teleport.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 159a10d077bc49889d5c46af2d5cb2ff +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/EventDatum/Teleport/TeleportEventData.cs b/EventDatum/Teleport/TeleportEventData.cs new file mode 100644 index 000000000..daedb55a5 --- /dev/null +++ b/EventDatum/Teleport/TeleportEventData.cs @@ -0,0 +1,43 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.TeleportSystem; + +namespace XRTK.EventDatum.Teleport +{ + /// + /// Describes a Teleportation Event. + /// + public class TeleportEventData : GenericBaseEventData + { + /// + /// The pointer that raised the event. + /// + public IMixedRealityPointer Pointer { get; private set; } + + /// + /// The teleport hot spot. + /// + public IMixedRealityTeleportHotSpot HotSpot { get; private set; } + + /// + /// Constructor. + /// + /// Typically will be + public TeleportEventData(EventSystem eventSystem) : base(eventSystem) { } + + /// + /// Used to initialize/reset the event and populate the data. + /// + /// + /// + public void Initialize(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot target) + { + BaseInitialize(pointer.InputSourceParent); + Pointer = pointer; + HotSpot = target; + } + } +} diff --git a/EventDatum/Teleport/TeleportEventData.cs.meta b/EventDatum/Teleport/TeleportEventData.cs.meta new file mode 100644 index 000000000..ccb401412 --- /dev/null +++ b/EventDatum/Teleport/TeleportEventData.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb06ed1a7acc42bcb2403036afba35f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions.meta b/Extensions.meta new file mode 100644 index 000000000..275c3dbb8 --- /dev/null +++ b/Extensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7e6f1026d2044b55aa7d375dc9188cbd +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/AnimationCurveExtensions.cs b/Extensions/AnimationCurveExtensions.cs new file mode 100644 index 000000000..aa91e7ec8 --- /dev/null +++ b/Extensions/AnimationCurveExtensions.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's AnimationCurve class + /// + public static class AnimationCurveExtensions + { + /// + /// Returns the absolute duration of the curve from first to last key frame + /// + /// The animation curve to check duration of. + /// Returns 0 if the curve is null or has less than 1 frame, otherwise returns time difference between first and last frame. + public static float Duration(this AnimationCurve curve) + { + if (curve == null || curve.length <= 1) + { + return 0.0f; + } + + return Mathf.Abs(curve[curve.length - 1].time - curve[0].time); + } + } +} diff --git a/Extensions/AnimationCurveExtensions.cs.meta b/Extensions/AnimationCurveExtensions.cs.meta new file mode 100644 index 000000000..3a1d90b9b --- /dev/null +++ b/Extensions/AnimationCurveExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74a392b1f9de4239a23181585417b309 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/ArrayExtensions.cs b/Extensions/ArrayExtensions.cs new file mode 100644 index 000000000..371b81211 --- /dev/null +++ b/Extensions/ArrayExtensions.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Extensions +{ + /// + /// type method extensions. + /// + public static class ArrayExtensions + { + /// + /// Wraps the index around to the beginning of the array if the provided index is longer than the array. + /// + /// The array to wrap the index around. + /// The index to look for. + public static int WrapIndex(this Array array, int index) + { + int length = array.Length; + return ((index % length) + length) % length; + } + + /// + /// Checks whether the given array is not null and has at least one entry + /// + /// + public static bool IsValidArray(this Array array) + { + return array != null && array.Length > 0; + } + } +} \ No newline at end of file diff --git a/Extensions/ArrayExtensions.cs.meta b/Extensions/ArrayExtensions.cs.meta new file mode 100644 index 000000000..25450ad01 --- /dev/null +++ b/Extensions/ArrayExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 266a82df85ae476fb5653035500d82d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/BoundsExtensions.cs b/Extensions/BoundsExtensions.cs new file mode 100644 index 000000000..f54276240 --- /dev/null +++ b/Extensions/BoundsExtensions.cs @@ -0,0 +1,588 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Bounds struct + /// + public static class BoundsExtensions + { + // Corners + public const int LBF = 0; + public const int LBB = 1; + public const int LTF = 2; + public const int LTB = 3; + public const int RBF = 4; + public const int RBB = 5; + public const int RTF = 6; + public const int RTB = 7; + + // X axis + public const int LTF_RTF = 8; + public const int LBF_RBF = 9; + public const int RTB_LTB = 10; + public const int RBB_LBB = 11; + + // Y axis + public const int LTF_LBF = 12; + public const int RTB_RBB = 13; + public const int LTB_LBB = 14; + public const int RTF_RBF = 15; + + // Z axis + public const int RBF_RBB = 16; + public const int RTF_RTB = 17; + public const int LBF_LBB = 18; + public const int LTF_LTB = 19; + + // 2D corners + public const int LT = 0; + public const int LB = 1; + public const int RT = 2; + public const int RB = 3; + + // 2D midpoints + public const int LT_RT = 4; + public const int RT_RB = 5; + public const int RB_LB = 6; + public const int LB_LT = 7; + + // Face points + public const int TOP = 0; + public const int BOT = 1; + public const int LFT = 2; + public const int RHT = 3; + public const int FWD = 4; + public const int BCK = 5; + + public enum Axis + { + X, + Y, + Z + } + + private static Vector3[] corners = null; + + private static Vector3[] rectTransformCorners = new Vector3[4]; + + #region Public Static Functions + /// + /// Returns an instance of the 'Bounds' class which is invalid. An invalid 'Bounds' instance + /// is one which has its size vector set to 'float.MaxValue' for all 3 components. The center + /// of an invalid bounds instance is the zero vector. + /// + public static Bounds GetInvalidBoundsInstance() + { + return new Bounds(Vector3.zero, GetInvalidBoundsSize()); + } + + /// + /// Checks if the specified bounds instance is valid. A valid 'Bounds' instance is + /// one whose size vector does not have all 3 components set to 'float.MaxValue'. + /// + public static bool IsValid(this Bounds bounds) + { + return bounds.size != GetInvalidBoundsSize(); + } + + /// + /// Gets all the corner points of the bounds in world space + /// + /// + /// + /// + /// + /// Use BoxColliderExtensions.{Left|Right}{Bottom|Top}{Front|Back} constants to index into the output + /// corners array. + /// + public static void GetCornerPositions(this Bounds bounds, Transform transform, ref Vector3[] positions) + { + // Calculate the local points to transform. + Vector3 center = bounds.center; + Vector3 extents = bounds.extents; + float leftEdge = center.x - extents.x; + float rightEdge = center.x + extents.x; + float bottomEdge = center.y - extents.y; + float topEdge = center.y + extents.y; + float frontEdge = center.z - extents.z; + float backEdge = center.z + extents.z; + + // Allocate the array if needed. + const int numPoints = 8; + if (positions == null || positions.Length != numPoints) + { + positions = new Vector3[numPoints]; + } + + // Transform all the local points to world space. + positions[LBF] = transform.TransformPoint(leftEdge, bottomEdge, frontEdge); + positions[LBB] = transform.TransformPoint(leftEdge, bottomEdge, backEdge); + positions[LTF] = transform.TransformPoint(leftEdge, topEdge, frontEdge); + positions[LTB] = transform.TransformPoint(leftEdge, topEdge, backEdge); + positions[RBF] = transform.TransformPoint(rightEdge, bottomEdge, frontEdge); + positions[RBB] = transform.TransformPoint(rightEdge, bottomEdge, backEdge); + positions[RTF] = transform.TransformPoint(rightEdge, topEdge, frontEdge); + positions[RTB] = transform.TransformPoint(rightEdge, topEdge, backEdge); + } + + /// + /// Gets all the corner points from Renderer's Bounds + /// + /// + /// + public static void GetCornerPositionsFromRendererBounds(this Bounds bounds, ref Vector3[] positions) + { + Vector3 center = bounds.center; + Vector3 extents = bounds.extents; + float leftEdge = center.x - extents.x; + float rightEdge = center.x + extents.x; + float bottomEdge = center.y - extents.y; + float topEdge = center.y + extents.y; + float frontEdge = center.z - extents.z; + float backEdge = center.z + extents.z; + + const int numPoints = 8; + if (positions == null || positions.Length != numPoints) + { + positions = new Vector3[numPoints]; + } + + positions[LBF] = new Vector3(leftEdge, bottomEdge, frontEdge); + positions[LBB] = new Vector3(leftEdge, bottomEdge, backEdge); + positions[LTF] = new Vector3(leftEdge, topEdge, frontEdge); + positions[LTB] = new Vector3(leftEdge, topEdge, backEdge); + positions[RBF] = new Vector3(rightEdge, bottomEdge, frontEdge); + positions[RBB] = new Vector3(rightEdge, bottomEdge, backEdge); + positions[RTF] = new Vector3(rightEdge, topEdge, frontEdge); + positions[RTB] = new Vector3(rightEdge, topEdge, backEdge); + } + + public static void GetFacePositions(this Bounds bounds, Transform transform, ref Vector3[] positions) + { + Vector3 center = bounds.center; + Vector3 extents = bounds.extents; + + const int numPoints = 6; + if (positions == null || positions.Length != numPoints) + { + positions = new Vector3[numPoints]; + } + + positions[TOP] = transform.TransformPoint(center + Vector3.up * extents.y); + positions[BOT] = transform.TransformPoint(center + Vector3.down * extents.y); + positions[LFT] = transform.TransformPoint(center + Vector3.left * extents.x); + positions[RHT] = transform.TransformPoint(center + Vector3.right * extents.x); + positions[FWD] = transform.TransformPoint(center + Vector3.forward * extents.z); + positions[BCK] = transform.TransformPoint(center + Vector3.back * extents.z); + } + + /// + /// Gets all the corner points and mid points from Renderer's Bounds + /// + /// + /// + /// + public static void GetCornerAndMidPointPositions(this Bounds bounds, Transform transform, ref Vector3[] positions) + { + // Calculate the local points to transform. + Vector3 center = bounds.center; + Vector3 extents = bounds.extents; + float leftEdge = center.x - extents.x; + float rightEdge = center.x + extents.x; + float bottomEdge = center.y - extents.y; + float topEdge = center.y + extents.y; + float frontEdge = center.z - extents.z; + float backEdge = center.z + extents.z; + + // Allocate the array if needed. + const int numPoints = LTF_LTB + 1; + if (positions == null || positions.Length != numPoints) + { + positions = new Vector3[numPoints]; + } + + // Transform all the local points to world space. + positions[LBF] = transform.TransformPoint(leftEdge, bottomEdge, frontEdge); + positions[LBB] = transform.TransformPoint(leftEdge, bottomEdge, backEdge); + positions[LTF] = transform.TransformPoint(leftEdge, topEdge, frontEdge); + positions[LTB] = transform.TransformPoint(leftEdge, topEdge, backEdge); + positions[RBF] = transform.TransformPoint(rightEdge, bottomEdge, frontEdge); + positions[RBB] = transform.TransformPoint(rightEdge, bottomEdge, backEdge); + positions[RTF] = transform.TransformPoint(rightEdge, topEdge, frontEdge); + positions[RTB] = transform.TransformPoint(rightEdge, topEdge, backEdge); + + positions[LTF_RTF] = Vector3.Lerp(positions[LTF], positions[RTF], 0.5f); + positions[LBF_RBF] = Vector3.Lerp(positions[LBF], positions[RBF], 0.5f); + positions[RTB_LTB] = Vector3.Lerp(positions[RTB], positions[LTB], 0.5f); + positions[RBB_LBB] = Vector3.Lerp(positions[RBB], positions[LBB], 0.5f); + + positions[LTF_LBF] = Vector3.Lerp(positions[LTF], positions[LBF], 0.5f); + positions[RTB_RBB] = Vector3.Lerp(positions[RTB], positions[RBB], 0.5f); + positions[LTB_LBB] = Vector3.Lerp(positions[LTB], positions[LBB], 0.5f); + positions[RTF_RBF] = Vector3.Lerp(positions[RTF], positions[RBF], 0.5f); + + positions[RBF_RBB] = Vector3.Lerp(positions[RBF], positions[RBB], 0.5f); + positions[RTF_RTB] = Vector3.Lerp(positions[RTF], positions[RTB], 0.5f); + positions[LBF_LBB] = Vector3.Lerp(positions[LBF], positions[LBB], 0.5f); + positions[LTF_LTB] = Vector3.Lerp(positions[LTF], positions[LTB], 0.5f); + } + + /// + /// Gets all the corner points and mid points from Renderer's Bounds, ignoring the z axis + /// + /// + /// + /// + /// + public static void GetCornerAndMidPointPositions2D(this Bounds bounds, Transform transform, ref Vector3[] positions, Axis flattenAxis) + { + // Calculate the local points to transform. + Vector3 center = bounds.center; + Vector3 extents = bounds.extents; + + float leftEdge = 0; + float rightEdge = 0; + float bottomEdge = 0; + float topEdge = 0; + + // Allocate the array if needed. + const int numPoints = LB_LT + 1; + if (positions == null || positions.Length != numPoints) + { + positions = new Vector3[numPoints]; + } + + switch (flattenAxis) + { + case Axis.X: + default: + leftEdge = center.z - extents.z; + rightEdge = center.z + extents.z; + bottomEdge = center.y - extents.y; + topEdge = center.y + extents.y; + // Transform all the local points to world space. + positions[LT] = transform.TransformPoint(0, topEdge, leftEdge); + positions[LB] = transform.TransformPoint(0, bottomEdge, leftEdge); + positions[RT] = transform.TransformPoint(0, topEdge, rightEdge); + positions[RB] = transform.TransformPoint(0, bottomEdge, rightEdge); + break; + + case Axis.Y: + leftEdge = center.z - extents.z; + rightEdge = center.z + extents.z; + bottomEdge = center.x - extents.x; + topEdge = center.x + extents.x; + // Transform all the local points to world space. + positions[LT] = transform.TransformPoint(topEdge, 0, leftEdge); + positions[LB] = transform.TransformPoint(bottomEdge, 0, leftEdge); + positions[RT] = transform.TransformPoint(topEdge, 0, rightEdge); + positions[RB] = transform.TransformPoint(bottomEdge, 0, rightEdge); + break; + + case Axis.Z: + leftEdge = center.x - extents.x; + rightEdge = center.x + extents.x; + bottomEdge = center.y - extents.y; + topEdge = center.y + extents.y; + // Transform all the local points to world space. + positions[LT] = transform.TransformPoint(leftEdge, topEdge, 0); + positions[LB] = transform.TransformPoint(leftEdge, bottomEdge, 0); + positions[RT] = transform.TransformPoint(rightEdge, topEdge, 0); + positions[RB] = transform.TransformPoint(rightEdge, bottomEdge, 0); + break; + } + + positions[LT_RT] = Vector3.Lerp(positions[LT], positions[RT], 0.5f); + positions[RT_RB] = Vector3.Lerp(positions[RT], positions[RB], 0.5f); + positions[RB_LB] = Vector3.Lerp(positions[RB], positions[LB], 0.5f); + positions[LB_LT] = Vector3.Lerp(positions[LB], positions[LT], 0.5f); + } + + /// + /// Method to get bounding box points using Collider method. + /// + /// gameObject that boundingBox bounds. + /// array reference that gets filled with points + /// layerMask to simplify search + public static void GetColliderBoundsPoints(GameObject target, List boundsPoints, LayerMask ignoreLayers) + { + Collider[] colliders = target.GetComponentsInChildren(); + for (int i = 0; i < colliders.Length; i++) + { + if (ignoreLayers == (1 << colliders[i].gameObject.layer | ignoreLayers)) + { + continue; + } + + if (colliders[i] is SphereCollider) + { + SphereCollider sc = colliders[i] as SphereCollider; + Bounds sphereBounds = new Bounds(sc.center, Vector3.one * sc.radius * 2); + sphereBounds.GetFacePositions(sc.transform, ref corners); + boundsPoints.AddRange(corners); + } + else if (colliders[i] is BoxCollider) + { + BoxCollider bc = colliders[i] as BoxCollider; + Bounds boxBounds = new Bounds(bc.center, bc.size); + boxBounds.GetCornerPositions(bc.transform, ref corners); + boundsPoints.AddRange(corners); + + } + else if (colliders[i] is MeshCollider) + { + MeshCollider mc = colliders[i] as MeshCollider; + Bounds meshBounds = mc.sharedMesh.bounds; + meshBounds.GetCornerPositions(mc.transform, ref corners); + boundsPoints.AddRange(corners); + } + else if (colliders[i] is CapsuleCollider) + { + CapsuleCollider cc = colliders[i] as CapsuleCollider; + Bounds capsuleBounds = new Bounds(cc.center, Vector3.zero); + switch (cc.direction) + { + case 0: + capsuleBounds.size = new Vector3(cc.height, cc.radius * 2, cc.radius * 2); + break; + + case 1: + capsuleBounds.size = new Vector3(cc.radius * 2, cc.height, cc.radius * 2); + break; + + case 2: + capsuleBounds.size = new Vector3(cc.radius * 2, cc.radius * 2, cc.height); + break; + } + capsuleBounds.GetFacePositions(cc.transform, ref corners); + boundsPoints.AddRange(corners); + } + } + } + + /// + /// GetRenderBoundsPoints gets bounding box points using Render method. + /// + /// gameObject that bounding box bounds + /// array reference that gets filled with points + /// layerMask to simplify search + public static void GetRenderBoundsPoints(GameObject target, List boundsPoints, LayerMask ignoreLayers) + { + Renderer[] renderers = target.GetComponentsInChildren(); + for (int i = 0; i < renderers.Length; ++i) + { + Renderer rendererObj = renderers[i]; + if (ignoreLayers == (1 << rendererObj.gameObject.layer | ignoreLayers)) + { + continue; + } + + rendererObj.bounds.GetCornerPositionsFromRendererBounds(ref corners); + boundsPoints.AddRange(corners); + } + } + + /// + /// GetMeshFilterBoundsPoints - gets bounding box points using MeshFilter method. + /// + /// gameObject that boundingbox bounds + /// array reference that gets filled with points + /// layerMask to simplify search + public static void GetMeshFilterBoundsPoints(GameObject target, List boundsPoints, LayerMask ignoreLayers) + { + MeshFilter[] meshFilters = target.GetComponentsInChildren(); + for (int i = 0; i < meshFilters.Length; i++) + { + MeshFilter meshFilterObj = meshFilters[i]; + if (ignoreLayers == (1 << meshFilterObj.gameObject.layer | ignoreLayers)) + { + continue; + } + + Bounds meshBounds = meshFilterObj.sharedMesh.bounds; + meshBounds.GetCornerPositions(meshFilterObj.transform, ref corners); + boundsPoints.AddRange(corners); + } + RectTransform[] rectTransforms = target.GetComponentsInChildren(); + for (int i = 0; i < rectTransforms.Length; i++) + { + rectTransforms[i].GetWorldCorners(rectTransformCorners); + boundsPoints.AddRange(rectTransformCorners); + } + } + + /// + /// Transforms 'bounds' using the specified transform matrix. + /// + /// + /// Transforming a 'Bounds' instance means that the function will construct a new 'Bounds' + /// instance which has its center translated using the translation information stored in + /// the specified matrix and its size adjusted to account for rotation and scale. The size + /// of the new 'Bounds' instance will be calculated in such a way that it will contain the + /// old 'Bounds'. + /// + /// + /// The 'Bounds' instance which must be transformed. + /// + /// + /// The specified 'Bounds' instance will be transformed using this transform matrix. The function + /// assumes that the matrix doesn't contain any projection or skew transformation. + /// + /// + /// The transformed 'Bounds' instance. + /// + public static Bounds Transform(this Bounds bounds, Matrix4x4 transformMatrix) + { + // We will need access to the right, up and look vector which are encoded inside the transform matrix + Vector3 rightAxis = transformMatrix.GetColumn(0); + Vector3 upAxis = transformMatrix.GetColumn(1); + Vector3 lookAxis = transformMatrix.GetColumn(2); + + // We will 'imagine' that we want to rotate the bounds' extents vector using the rotation information + // stored inside the specified transform matrix. We will need these when calculating the new size if + // the transformed bounds. + Vector3 rotatedExtentsRight = rightAxis * bounds.extents.x; + Vector3 rotatedExtentsUp = upAxis * bounds.extents.y; + Vector3 rotatedExtentsLook = lookAxis * bounds.extents.z; + + // Calculate the new bounds size along each axis. The size on each axis is calculated by summing up the + // corresponding vector component values of the rotated extents vectors. We multiply by 2 because we want + // to get a size and currently we are working with extents which represent half the size. + float newSizeX = (Mathf.Abs(rotatedExtentsRight.x) + Mathf.Abs(rotatedExtentsUp.x) + Mathf.Abs(rotatedExtentsLook.x)) * 2.0f; + float newSizeY = (Mathf.Abs(rotatedExtentsRight.y) + Mathf.Abs(rotatedExtentsUp.y) + Mathf.Abs(rotatedExtentsLook.y)) * 2.0f; + float newSizeZ = (Mathf.Abs(rotatedExtentsRight.z) + Mathf.Abs(rotatedExtentsUp.z) + Mathf.Abs(rotatedExtentsLook.z)) * 2.0f; + + // Construct the transformed 'Bounds' instance + var transformedBounds = new Bounds(); + transformedBounds.center = transformMatrix.MultiplyPoint(bounds.center); + transformedBounds.size = new Vector3(newSizeX, newSizeY, newSizeZ); + + // Return the instance to the caller + return transformedBounds; + } + + /// + /// Returns the screen space corner points of the specified 'Bounds' instance. + /// + /// + /// + /// The camera used for rendering to the screen. This is needed to perform the + /// transformation to screen space. + /// + public static Vector2[] GetScreenSpaceCornerPoints(this Bounds bounds, Camera camera) + { + Vector3 aabbCenter = bounds.center; + Vector3 aabbExtents = bounds.extents; + + // Return the screen space point array + return new Vector2[] + { + camera.WorldToScreenPoint(new Vector3(aabbCenter.x - aabbExtents.x, aabbCenter.y - aabbExtents.y, aabbCenter.z - aabbExtents.z)), + camera.WorldToScreenPoint(new Vector3(aabbCenter.x + aabbExtents.x, aabbCenter.y - aabbExtents.y, aabbCenter.z - aabbExtents.z)), + camera.WorldToScreenPoint(new Vector3(aabbCenter.x + aabbExtents.x, aabbCenter.y + aabbExtents.y, aabbCenter.z - aabbExtents.z)), + camera.WorldToScreenPoint(new Vector3(aabbCenter.x - aabbExtents.x, aabbCenter.y + aabbExtents.y, aabbCenter.z - aabbExtents.z)), + + camera.WorldToScreenPoint(new Vector3(aabbCenter.x - aabbExtents.x, aabbCenter.y - aabbExtents.y, aabbCenter.z + aabbExtents.z)), + camera.WorldToScreenPoint(new Vector3(aabbCenter.x + aabbExtents.x, aabbCenter.y - aabbExtents.y, aabbCenter.z + aabbExtents.z)), + camera.WorldToScreenPoint(new Vector3(aabbCenter.x + aabbExtents.x, aabbCenter.y + aabbExtents.y, aabbCenter.z + aabbExtents.z)), + camera.WorldToScreenPoint(new Vector3(aabbCenter.x - aabbExtents.x, aabbCenter.y + aabbExtents.y, aabbCenter.z + aabbExtents.z)) + }; + } + + /// + /// Returns the rectangle which encloses the specifies 'Bounds' instance in screen space. + /// + public static Rect GetScreenRectangle(this Bounds bounds, Camera camera) + { + // Retrieve the bounds' corner points in screen space + Vector2[] screenSpaceCornerPoints = bounds.GetScreenSpaceCornerPoints(camera); + + // Identify the minimum and maximum points in the array + Vector3 minScreenPoint = screenSpaceCornerPoints[0], maxScreenPoint = screenSpaceCornerPoints[0]; + for (int screenPointIndex = 1; screenPointIndex < screenSpaceCornerPoints.Length; ++screenPointIndex) + { + minScreenPoint = Vector3.Min(minScreenPoint, screenSpaceCornerPoints[screenPointIndex]); + maxScreenPoint = Vector3.Max(maxScreenPoint, screenSpaceCornerPoints[screenPointIndex]); + } + + // Return the screen space rectangle + return new Rect(minScreenPoint.x, minScreenPoint.y, maxScreenPoint.x - minScreenPoint.x, maxScreenPoint.y - minScreenPoint.y); + } + + /// + /// Returns the volume of the bounds. + /// + /// + /// + public static float Volume(this Bounds bounds) + { + return bounds.size.x * bounds.size.y * bounds.size.z; + } + + /// + /// Returns bounds that contain both this bounds and the bounds passed in. + /// + /// + /// + /// + public static Bounds ExpandToContain(this Bounds originalBounds, Bounds otherBounds) + { + Bounds tmpBounds = originalBounds; + + tmpBounds.Encapsulate(otherBounds); + + return tmpBounds; + } + + /// + /// Checks to see if bounds contains the other bounds completely. + /// + /// + /// + /// + public static bool ContainsBounds(this Bounds bounds, Bounds otherBounds) + { + return bounds.Contains(otherBounds.min) && bounds.Contains(otherBounds.max); + } + + /// + /// Checks to see whether point is closer to bounds or otherBounds + /// + /// + /// + /// + /// + public static bool CloserToPoint(this Bounds bounds, Vector3 point, Bounds otherBounds) + { + Vector3 distToClosestPoint1 = bounds.ClosestPoint(point) - point; + Vector3 distToClosestPoint2 = otherBounds.ClosestPoint(point) - point; + + if (distToClosestPoint1.magnitude == distToClosestPoint2.magnitude) + { + Vector3 toCenter1 = point - bounds.center; + Vector3 toCenter2 = point - otherBounds.center; + return (toCenter1.magnitude <= toCenter2.magnitude); + + } + + return (distToClosestPoint1.magnitude <= distToClosestPoint2.magnitude); + } + + #endregion + + #region Private Static Functions + /// + /// Returns the vector which is used to represent and invalid bounds size. + /// + private static Vector3 GetInvalidBoundsSize() + { + return new Vector3(float.MaxValue, float.MaxValue, float.MaxValue); + } + #endregion + } +} \ No newline at end of file diff --git a/Extensions/BoundsExtensions.cs.meta b/Extensions/BoundsExtensions.cs.meta new file mode 100644 index 000000000..2a44aa2f0 --- /dev/null +++ b/Extensions/BoundsExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a23f82ec2d034c0da22a8deb81907e45 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/CameraExtensions.cs b/Extensions/CameraExtensions.cs new file mode 100644 index 000000000..f55350981 --- /dev/null +++ b/Extensions/CameraExtensions.cs @@ -0,0 +1,67 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Utilities; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for the Unity's Camera class + /// + public static class CameraExtensions + { + /// + /// Get the horizontal FOV from the stereo camera + /// + public static float GetHorizontalFieldOfViewRadians(this Camera camera) + { + return 2f * Mathf.Atan(Mathf.Tan(camera.fieldOfView * Mathf.Deg2Rad * 0.5f) * camera.aspect); + } + + /// + /// Returns if a point will be rendered on the screen in either eye + /// + /// The camera to check the point against + /// + /// True if the position is within the Camera's FOV. + public static bool IsInFOV(this Camera camera, Vector3 position) + { + float verticalFovHalf = camera.fieldOfView * 0.5f; + float horizontalFovHalf = camera.GetHorizontalFieldOfViewRadians() * Mathf.Rad2Deg * 0.5f; + + var cameraTransform = camera.transform; + Vector3 deltaPos = position - cameraTransform.position; + Vector3 headDeltaPos = MathUtilities.TransformDirectionFromTo(null, cameraTransform, deltaPos).normalized; + + float yaw = Mathf.Asin(headDeltaPos.x) * Mathf.Rad2Deg; + float pitch = Mathf.Asin(headDeltaPos.y) * Mathf.Rad2Deg; + + return (Mathf.Abs(yaw) < horizontalFovHalf && Mathf.Abs(pitch) < verticalFovHalf); + } + + + /// + /// Gets the frustum size at a given distance from the camera. + /// + /// The camera to get the frustum size for + /// The distance from the camera to get the frustum size at + public static Vector2 GetFrustumSizeForDistance(this Camera camera, float distanceFromCamera) + { + var frustumSize = Vector2.zero; + frustumSize.y = 2.0f * distanceFromCamera * Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad); + frustumSize.x = frustumSize.y * camera.aspect; + return frustumSize; + } + + /// + /// Gets the distance to the camera that a specific frustum height would be at. + /// + /// The camera to get the distance from + /// The frustum height + public static float GetDistanceForFrustumHeight(this Camera camera, float frustumHeight) + { + return frustumHeight * 0.5f / Mathf.Max(0.00001f, Mathf.Tan(camera.fieldOfView * 0.5f * Mathf.Deg2Rad)); + } + } +} \ No newline at end of file diff --git a/Extensions/CameraExtensions.cs.meta b/Extensions/CameraExtensions.cs.meta new file mode 100644 index 000000000..c83b493e5 --- /dev/null +++ b/Extensions/CameraExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1db7c5ccf69e4f0bb7c8feddce6210fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/CanvasExtensions.cs b/Extensions/CanvasExtensions.cs new file mode 100644 index 000000000..2c1c6834e --- /dev/null +++ b/Extensions/CanvasExtensions.cs @@ -0,0 +1,211 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.UI; + +namespace XRTK.Extensions +{ + /// + /// Extensions for the Canvas class. + /// + public static class CanvasExtensions + { + /// + /// Convenience method for getting a plane for this canvas in world coordinates. + /// + /// The canvas to get the plane from. + /// A Plane for this canvas. + public static Plane GetPlane(this Canvas canvas) + { + Vector3[] corners = canvas.GetWorldCorners(); + + // Now set a plane from any of the 3 corners (clockwise) so that we can compute our gaze intersection + Plane plane = new Plane(corners[0], corners[1], corners[2]); + + return plane; + } + + /// + /// Convenience method for getting the corners of the canvas in world coordinates. Ordered clockwise from bottom-left. + /// + /// The canvas to get the world corners from. + /// An array of Vector3s that represent the corners of the canvas in world coordinates. + public static Vector3[] GetWorldCorners(this Canvas canvas) + { + Vector3[] worldCorners = new Vector3[4]; + RectTransform rect = canvas.GetComponent(); + rect.GetWorldCorners(worldCorners); + return worldCorners; + } + + /// + /// Convenience method for getting the corners of the canvas in local coordinates. Ordered clockwise from bottom-left. + /// + /// The canvas to get the local corners from. + /// An array of Vector3s that represent the corners of the canvas in local coordinates. + public static Vector3[] GetLocalCorners(this Canvas canvas) + { + Vector3[] localCorners = new Vector3[4]; + RectTransform rect = canvas.GetComponent(); + rect.GetLocalCorners(localCorners); + return localCorners; + } + + /// + /// Convenience method for getting the corners of the canvas in viewport coordinates. Note + /// that the points have the same ordering as the array returned in GetWorldCorners() + /// + /// The canvas to get the viewport corners from + /// An array of Vector3s that represent the corners of the canvas in viewport coordinates + public static Vector3[] GetViewportCorners(this Canvas canvas) + { + Vector3[] viewportCorners = new Vector3[4]; + + Vector3[] worldCorners = canvas.GetWorldCorners(); + + for (int i = 0; i < 4; i++) + { + viewportCorners[i] = Camera.main.WorldToViewportPoint(worldCorners[i]); + } + + return viewportCorners; + } + + /// + /// Gets the position of the corners for a canvas in screen space. + /// 1 -- 2 + /// | | + /// 0 -- 3 + /// + /// The canvas to get the screen corners for. + /// + public static Vector3[] GetScreenCorners(this Canvas canvas) + { + Vector3[] screenCorners = new Vector3[4]; + Vector3[] worldCorners = canvas.GetWorldCorners(); + + for (int i = 0; i < 4; i++) + { + screenCorners[i] = Camera.main.WorldToScreenPoint(worldCorners[i]); + } + + return screenCorners; + } + + /// + /// Returns a rectangle in screen coordinates that encompasses the bounds of the target canvas. + /// + /// The canvas the get the screen rect for + /// + public static Rect GetScreenRect(this Canvas canvas) + { + Vector3[] screenCorners = canvas.GetScreenCorners(); + float x = Mathf.Min(screenCorners[0].x, screenCorners[1].x); + float y = Mathf.Min(screenCorners[0].y, screenCorners[3].y); + float xMax = Mathf.Max(screenCorners[2].x, screenCorners[3].x); + float yMax = Mathf.Max(screenCorners[1].y, screenCorners[2].y); + return new Rect(x, y, xMax - x, yMax - y); + } + + /// + /// Raycast against a canvas using a ray. + /// + /// The canvas to raycast against + /// The origin of the ray + /// The direction of the ray + /// The distance of the ray + /// The hitpoint of the ray + /// The child object that was hit or the canvas itself if it has no active children that were within the hit range. + /// + public static bool Raycast(this Canvas canvas, Vector3 rayOrigin, Vector3 rayDirection, out float distance, out Vector3 hitPoint, out GameObject hitChildObject) + { + hitChildObject = null; + Plane plane = canvas.GetPlane(); + Ray ray = new Ray(rayOrigin, rayDirection); + + if (plane.Raycast(ray, out distance)) + { + // See if the point lies within the local canvas rect of the plane + Vector3[] corners = canvas.GetLocalCorners(); + hitPoint = rayOrigin + (rayDirection.normalized * distance); + Vector3 localHitPoint = canvas.transform.InverseTransformPoint(hitPoint); + if (localHitPoint.x >= corners[0].x + && localHitPoint.x <= corners[3].x + && localHitPoint.y <= corners[2].y + && localHitPoint.y >= corners[3].y) + { + hitChildObject = canvas.gameObject; + + // look for the child object that was hit + RectTransform rectTransform = GetChildRectTransformAtPoint(canvas.GetComponent(), hitPoint, true, true, true); + if (rectTransform != null) + { + hitChildObject = rectTransform.gameObject; + } + else + { + hitChildObject = canvas.gameObject; + } + + return true; + } + } + + hitPoint = Vector3.zero; + + return false; + } + + /// + /// Gets a child rect transform for the given point and parameters. + /// + /// The rect transform to look for children that may contain the projected (orthogonal to the child's normal) world point + /// The world point + /// Indicates if the check should be done recursively + /// If true, will only check children that are active, otherwise it will check all children. + /// If true, will only check children that if they have a graphic and have it's member raycastTarget set to true, otherwise will ignore the raycastTarget value. Will still allow children to be checked that do not have a graphic component. + /// + public static RectTransform GetChildRectTransformAtPoint(this RectTransform rectTransformParent, Vector3 worldPoint, bool recursive, bool shouldReturnActive, bool shouldReturnRaycastable) + { + Vector3[] localCorners = new Vector3[4]; + Vector3 childLocalPoint; + RectTransform rectTransform; + bool shouldRaycast = false; + + for (int i = rectTransformParent.childCount - 1; i >= 0; i--) + { + rectTransform = rectTransformParent.GetChild(i).GetComponent(); + Graphic graphic = rectTransform.GetComponent(); + shouldRaycast = ((shouldReturnRaycastable && graphic != null && graphic.raycastTarget) || graphic == null || !shouldReturnRaycastable); + + if (((shouldReturnActive && rectTransform.gameObject.activeSelf) || !shouldReturnActive)) + { + rectTransform.GetLocalCorners(localCorners); + childLocalPoint = rectTransform.InverseTransformPoint(worldPoint); + + if (recursive) + { + RectTransform childRect = GetChildRectTransformAtPoint(rectTransform, worldPoint, recursive, shouldReturnActive, shouldReturnRaycastable); + + if (childRect != null) + { + return childRect; + } + } + + if (shouldRaycast + && childLocalPoint.x >= localCorners[0].x + && childLocalPoint.x <= localCorners[3].x + && childLocalPoint.y <= localCorners[2].y + && childLocalPoint.y >= localCorners[3].y) + { + return rectTransform; + } + } + } + + return null; + } + } +} \ No newline at end of file diff --git a/Extensions/CanvasExtensions.cs.meta b/Extensions/CanvasExtensions.cs.meta new file mode 100644 index 000000000..e9fe250a9 --- /dev/null +++ b/Extensions/CanvasExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cc79d6829414ef459ce5f6ae7cd3319 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/CollectionsExtensions.cs b/Extensions/CollectionsExtensions.cs new file mode 100644 index 000000000..34c2b7f48 --- /dev/null +++ b/Extensions/CollectionsExtensions.cs @@ -0,0 +1,166 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using UnityEngine; +using XRTK.Definitions.Devices; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for .Net Collection objects, e.g. Lists, Dictionaries, Arrays + /// + public static class CollectionsExtensions + { + /// + /// Creates a read-only wrapper around an existing collection. + /// + /// The type of element in the collection. + /// The collection to be wrapped. + /// The new, read-only wrapper around . + public static ReadOnlyCollection AsReadOnly(this IList elements) + { + return new ReadOnlyCollection(elements); + } + + /// + /// Creates a read-only copy of an existing collection. + /// + /// The type of element in the collection. + /// The collection to be copied. + /// The new, read-only copy of . + public static ReadOnlyCollection ToReadOnlyCollection(this IEnumerable elements) + { + return elements.ToArray().AsReadOnly(); + } + + /// + /// Inserts an item in its sorted position into an already sorted collection. This is useful if you need to consume the + /// collection in between insertions and need it to stay correctly sorted the whole time. If you just need to insert a + /// bunch of items and then consume the sorted collection at the end, it's faster to add all the elements and then use + /// at the end. + /// + /// The type of element in the collection. + /// The collection of sorted elements to be inserted into. + /// The element to insert. + /// The comparer to use when sorting or null to use . + /// + public static int SortedInsert(this List elements, TElement toInsert, IComparer comparer = null) + { + var effectiveComparer = comparer ?? Comparer.Default; + + if (Application.isEditor) + { + for (int iElement = 0; iElement < elements.Count - 1; iElement++) + { + var element = elements[iElement]; + var nextElement = elements[iElement + 1]; + + if (effectiveComparer.Compare(element, nextElement) > 0) + { + Debug.LogWarning("Elements must already be sorted to call this method."); + break; + } + } + } + + int searchResult = elements.BinarySearch(toInsert, effectiveComparer); + + int insertionIndex = searchResult >= 0 + ? searchResult + : ~searchResult; + + elements.Insert(insertionIndex, toInsert); + + return insertionIndex; + } + + /// + /// Disposes of all non-null elements in a collection. + /// + /// The type of element in the collection. + /// The collection of elements to be disposed. + public static void DisposeElements(this IEnumerable elements) + where TElement : IDisposable + { + foreach (var element in elements) + { + if (element != null) + { + element.Dispose(); + } + } + } + + /// + /// Disposes of all non-null elements in a collection. + /// + /// The type of element in the collection. + /// The collection of elements to be disposed. + public static void DisposeElements(this IList elements) + where TElement : IDisposable + { + for (int iElement = 0; iElement < elements.Count; iElement++) + { + var element = elements[iElement]; + + if (element != null) + { + element.Dispose(); + } + } + } + + /// + /// Exports the values of a uint indexed Dictionary as an Array + /// + /// Type of data stored in the values of the Dictionary + /// Dictionary to be exported + /// array in the type of data stored in the Dictionary + public static T[] ExportDictionaryValuesAsArray(this Dictionary input) + { + T[] output = new T[input.Count]; + input.Values.CopyTo(output, 0); + return output; + } + + /// + /// Overload extension to enable getting of an InteractionDefinition of a specific type + /// + /// The InteractionDefinition array reference + /// The specific DeviceInputType value to query + public static MixedRealityInteractionMapping GetInteractionByType(this MixedRealityInteractionMapping[] input, DeviceInputType key) + { + for (int i = 0; i < input?.Length; i++) + { + if (input[i].InputType == key) + { + return input[i]; + } + } + + return default; + } + + /// + /// Overload extension to enable getting of an InteractionDefinition of a specific type + /// + /// The InteractionDefinition array reference + /// The specific DeviceInputType value to query + public static bool SupportsInputType(this MixedRealityInteractionMapping[] input, DeviceInputType key) + { + for (int i = 0; i < input.Length; i++) + { + if (input[i].InputType == key) + { + return true; + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/Extensions/CollectionsExtensions.cs.meta b/Extensions/CollectionsExtensions.cs.meta new file mode 100644 index 000000000..c84099104 --- /dev/null +++ b/Extensions/CollectionsExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 149a74d5a9444f82bcc3641e166d0a33 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/Color32Extensions.cs b/Extensions/Color32Extensions.cs new file mode 100644 index 000000000..53dff2543 --- /dev/null +++ b/Extensions/Color32Extensions.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Globalization; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Color32 struct + /// + public static class Color32Extensions + { + public static Color PremultiplyAlpha(Color col) + { + col.r *= col.a; + col.g *= col.a; + col.b *= col.a; + + return col; + } + + public static Color32 PremultiplyAlpha(Color32 col) + { + Color floatCol = col; + return (Color32)PremultiplyAlpha(floatCol); + } + + /// + /// Creates a Color from a hexcode string + /// + /// + /// + public static Color ParseHexcode(string hexString) + { + if (hexString.StartsWith("#")) + { + hexString = hexString.Substring(1); + } + + if (hexString.StartsWith("0x")) + { + hexString = hexString.Substring(2); + } + + if (hexString.Length == 6) + { + hexString += "FF"; + } + + if (hexString.Length != 8) + { + throw new ArgumentException($"{hexString} is not a valid color string."); + } + + byte r = byte.Parse(hexString.Substring(0, 2), NumberStyles.HexNumber); + byte g = byte.Parse(hexString.Substring(2, 2), NumberStyles.HexNumber); + byte b = byte.Parse(hexString.Substring(4, 2), NumberStyles.HexNumber); + byte a = byte.Parse(hexString.Substring(6, 2), NumberStyles.HexNumber); + + const float maxRgbValue = 255; + return new Color(r / maxRgbValue, g / maxRgbValue, b / maxRgbValue, a / maxRgbValue); + } + } +} \ No newline at end of file diff --git a/Extensions/Color32Extensions.cs.meta b/Extensions/Color32Extensions.cs.meta new file mode 100644 index 000000000..ebde7c83f --- /dev/null +++ b/Extensions/Color32Extensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: eb3bd4317d174ebf8ac5459f98f767a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/ComparerExtensions.cs b/Extensions/ComparerExtensions.cs new file mode 100644 index 000000000..9e27114b3 --- /dev/null +++ b/Extensions/ComparerExtensions.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for .Net Comparer's + /// + public static class ComparerExtensions + { + /// + /// Gets a comparer that sorts elements in the opposite order of the original comparer. + /// + /// The type of element the comparer compares. + /// The comparer whose order should be reversed. + /// A comparer that sorts elements in the opposite order of . + public static IComparer GetReversed(this IComparer originalComparer) + { + return new ReverseComparer(originalComparer); + } + + private class ReverseComparer : IComparer + { + private readonly IComparer originalComparer; + + public ReverseComparer(IComparer originalComparer) + { + Debug.Assert(originalComparer != null, "originalComparer cannot be null."); + + this.originalComparer = originalComparer; + } + + public int Compare(TElement left, TElement right) + { + return originalComparer.Compare(right, left); + } + } + } +} diff --git a/Extensions/ComparerExtensions.cs.meta b/Extensions/ComparerExtensions.cs.meta new file mode 100644 index 000000000..cdbe94b31 --- /dev/null +++ b/Extensions/ComparerExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e5ed7ade7d74aa98c361ba8c25ecf3f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/ComponentExtensions.cs b/Extensions/ComponentExtensions.cs new file mode 100644 index 000000000..d3acff1ad --- /dev/null +++ b/Extensions/ComponentExtensions.cs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extensions methods for the Unity Component class. + /// This also includes some component-related extensions for the GameObject class. + /// + public static class ComponentExtensions + { + /// + /// Ensure that a component of type exists on the game object. + /// If it doesn't exist, creates it. + /// + /// Type of the component. + /// A component on the game object for which a component of type should exist. + /// The component that was retrieved or created. + public static T EnsureComponent(this Component component) where T : Component + { + return EnsureComponent(component.gameObject); + } + + /// + /// Find the first component of type in the ancestors of the game object of the specified component. + /// + /// Type of component to find. + /// Component for which its game object's ancestors must be considered. + /// Indicates whether the specified game object should be included. + /// The component of type . Null if it none was found. + public static T FindAncestorComponent(this Component component, bool includeSelf = true) where T : Component + { + return component.transform.FindAncestorComponent(includeSelf); + } + + /// + /// Ensure that a component of type exists on the game object. + /// If it doesn't exist, creates it. + /// + /// Type of the component. + /// Game object on which component should be. + /// The component that was retrieved or created. + /// + /// This extension has to remain in this class as it is required by the method + /// + public static T EnsureComponent(this GameObject gameObject) where T : Component + { + T foundComponent = gameObject.GetComponent(); + return foundComponent == null ? gameObject.AddComponent() : foundComponent; + } + + /// + /// Ensure that a component of type exists on the game object. + /// If it doesn't exist, creates it. + /// + /// + /// A component on the game object for which a component of type should exist. + /// The component that was retrieved or created. + public static Component EnsureComponent(this GameObject gameObject, Type component) + { + var foundComponent = gameObject.GetComponent(component); + return foundComponent == null ? gameObject.AddComponent(component) : foundComponent; + } + } +} \ No newline at end of file diff --git a/Extensions/ComponentExtensions.cs.meta b/Extensions/ComponentExtensions.cs.meta new file mode 100644 index 000000000..5ab4462d6 --- /dev/null +++ b/Extensions/ComponentExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ea7a3d3a0e19410ba881a506bb28b48f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/ConverterExtensions.cs b/Extensions/ConverterExtensions.cs new file mode 100644 index 000000000..ae2782acf --- /dev/null +++ b/Extensions/ConverterExtensions.cs @@ -0,0 +1,103 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Runtime.InteropServices; +using UnityEngine; + +namespace XRTK.Extensions +{ + public static class ConverterExtensions + { + /// + /// Get the bytes of a built in type. + /// + /// + /// + /// The byte array value of a built-in type. + public static byte[] GetBuiltInTypeBytes(this T input) + { + if (!typeof(T).IsPrimitive || + typeof(T) != typeof(string)) + { + Debug.LogError($"{typeof(T).Name} must be a built-in type!"); + return null; + } + + // https://stackoverflow.com/questions/39005931/generic-method-using-bitconverter-getbytes + int size = Marshal.SizeOf(typeof(T)); + var result = new byte[size]; + var gcHandle = GCHandle.Alloc(input, GCHandleType.Pinned); + Marshal.Copy(gcHandle.AddrOfPinnedObject(), result, 0, size); + gcHandle.Free(); + return result; + } + + /// + /// Get the built in type value from bytes. + /// + /// + /// + /// the type parameter is not a built in type. + /// The value + public static T GetBuiltInTypeValueFromBytes(this byte[] input) + { + if (typeof(T) == typeof(bool)) + { + return (T)Convert.ChangeType(BitConverter.ToBoolean(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(char)) + { + return (T)Convert.ChangeType(BitConverter.ToChar(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(string)) + { + return (T)Convert.ChangeType(BitConverter.ToString(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(double)) + { + return (T)Convert.ChangeType(BitConverter.ToDouble(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(short)) + { + return (T)Convert.ChangeType(BitConverter.ToInt16(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(int)) + { + return (T)Convert.ChangeType(BitConverter.ToInt32(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(long)) + { + return (T)Convert.ChangeType(BitConverter.ToInt64(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(float)) + { + return (T)Convert.ChangeType(BitConverter.ToSingle(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(ushort)) + { + return (T)Convert.ChangeType(BitConverter.ToUInt16(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(uint)) + { + return (T)Convert.ChangeType(BitConverter.ToUInt32(input, 0), typeof(T)); + } + + if (typeof(T) == typeof(ulong)) + { + return (T)Convert.ChangeType(BitConverter.ToUInt64(input, 0), typeof(T)); + } + + throw new ArgumentException($"{typeof(T).Name} is not a built in type"); + } + } +} \ No newline at end of file diff --git a/Extensions/ConverterExtensions.cs.meta b/Extensions/ConverterExtensions.cs.meta new file mode 100644 index 000000000..0e9264a4c --- /dev/null +++ b/Extensions/ConverterExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5c8bd8dd938b4fdf8e7eda3f1447d9ad +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/DataModelConfigurationExtensions.cs b/Extensions/DataModelConfigurationExtensions.cs new file mode 100644 index 000000000..6ae076f6a --- /dev/null +++ b/Extensions/DataModelConfigurationExtensions.cs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions; +using XRTK.Interfaces; + +namespace XRTK.Extensions +{ + public static class DataModelConfigurationExtensions + { + public static bool TryGetConfigurationName(this DataModelConfiguration[] configurations, out string name) where T : IMixedRealityDataProvider + { + name = string.Empty; + + for (int i = 0; i < configurations.Length; i++) + { + if (typeof(T).IsAssignableFrom(configurations[i].DataModelType.Type)) + { + name = configurations[i].DataModelName; + return true; + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/Extensions/DataModelConfigurationExtensions.cs.meta b/Extensions/DataModelConfigurationExtensions.cs.meta new file mode 100644 index 000000000..b05196a10 --- /dev/null +++ b/Extensions/DataModelConfigurationExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 18efe51d9281408899c004f33bf79bba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/DoubleExtensions.cs b/Extensions/DoubleExtensions.cs new file mode 100644 index 000000000..63aba5120 --- /dev/null +++ b/Extensions/DoubleExtensions.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for the .Net Double struct + /// + public static class DoubleExtensions + { + /// + /// Checks if two numbers are approximately equal. Similar to , but the tolerance + /// can be specified. + /// + /// One of the numbers to compare. + /// The other number to compare. + /// The amount of tolerance to allow while still considering the numbers approximately equal. + /// True if the difference between the numbers is less than or equal to the tolerance, false otherwise. + public static bool Approximately(this double number, double other, double tolerance) + { + return Math.Abs(number - other) <= tolerance; + } + } +} diff --git a/Extensions/DoubleExtensions.cs.meta b/Extensions/DoubleExtensions.cs.meta new file mode 100644 index 000000000..c8d71715f --- /dev/null +++ b/Extensions/DoubleExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 074e32f76dee4b25bbf26eb103ee2b9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/EditorClassExtensions.meta b/Extensions/EditorClassExtensions.meta new file mode 100644 index 000000000..af4bae312 --- /dev/null +++ b/Extensions/EditorClassExtensions.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f49cd4f96e1241c7aee194a06a87ad3e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs b/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs new file mode 100644 index 000000000..5980a9c64 --- /dev/null +++ b/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace XRTK.Extensions.EditorClassExtensions +{ + /// + /// Extensions for s + /// + public static class ScriptableObjectExtensions + { + /// + /// Creates, saves, and then opens a new asset for the target . + /// + /// you want to create an asset file for. + /// Optional path for the new asset. + /// Optional filename for the new asset. + public static ScriptableObject CreateAsset(this ScriptableObject scriptableObject, string path = null, string fileName = null) + { + var name = string.IsNullOrEmpty(fileName) ? $"{scriptableObject.GetType().Name}" : fileName; + + if (string.IsNullOrEmpty(path)) + { + path = "Assets"; + } + + if (Path.GetExtension(path) != string.Empty) + { + var subtractedPath = path.Substring(path.LastIndexOf("/", StringComparison.Ordinal)); + path = path.Replace(subtractedPath, string.Empty); + } + + if (!Directory.Exists(Path.GetFullPath(path))) + { + Directory.CreateDirectory(Path.GetFullPath(path)); + } + + string assetPathAndName = AssetDatabase.GenerateUniqueAssetPath($"{path}/{name}.asset"); + + AssetDatabase.CreateAsset(scriptableObject, assetPathAndName); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + EditorUtility.FocusProjectWindow(); + Selection.activeObject = scriptableObject; + EditorGUIUtility.PingObject(scriptableObject); + return scriptableObject; + } + + /// + /// Gets all the scriptable object instances in the project. + /// + /// The Type of you're wanting to find instances of. + /// An Array of instances for the type. + public static T[] GetAllInstances() where T : ScriptableObject + { + // FindAssets uses tags check documentation for more info + string[] guids = AssetDatabase.FindAssets($"t:{typeof(T).Name}"); + var instances = new T[guids.Length]; + + for (int i = 0; i < guids.Length; i++) + { + string path = AssetDatabase.GUIDToAssetPath(guids[i]); + instances[i] = AssetDatabase.LoadAssetAtPath(path); + } + + return instances; + } + } +} \ No newline at end of file diff --git a/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs.meta b/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs.meta new file mode 100644 index 000000000..8063022c5 --- /dev/null +++ b/Extensions/EditorClassExtensions/ScriptableObjectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d8423a6da4594b5fa96796ace9f26fce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef b/Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef new file mode 100644 index 000000000..6dd7dc16e --- /dev/null +++ b/Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef @@ -0,0 +1,14 @@ +{ + "name": "XRTK.Extensions.EditorClassExtensions", + "references": [], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef.meta b/Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef.meta new file mode 100644 index 000000000..4885ec296 --- /dev/null +++ b/Extensions/EditorClassExtensions/XRTK.Extensions.EditorClassExtensions.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 300f35dbc13a4068b3430ef1b1492373 +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/EnumerableExtensions.cs b/Extensions/EnumerableExtensions.cs new file mode 100644 index 000000000..5b0164afa --- /dev/null +++ b/Extensions/EnumerableExtensions.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for the .Net IEnumerable class + /// + public static class EnumerableExtensions + { + /// + /// Returns the max element based on the provided comparer or the default value when the list is empty + /// + /// Max or default value of T + public static T MaxOrDefault(this IEnumerable items, IComparer comparer = null) + { + if (items == null) { throw new ArgumentNullException("items"); } + comparer = comparer ?? Comparer.Default; + + using (var enumerator = items.GetEnumerator()) + { + if (!enumerator.MoveNext()) + { + return default; + } + + var max = enumerator.Current; + while (enumerator.MoveNext()) + { + if (comparer.Compare(max, enumerator.Current) < 0) + { + max = enumerator.Current; + } + } + return max; + } + } + } +} diff --git a/Extensions/EnumerableExtensions.cs.meta b/Extensions/EnumerableExtensions.cs.meta new file mode 100644 index 000000000..c97a50a53 --- /dev/null +++ b/Extensions/EnumerableExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ce6851b640bc41b4ba6edfca568485ea +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/EventSystemExtensions.cs b/Extensions/EventSystemExtensions.cs new file mode 100644 index 000000000..3c61c3abf --- /dev/null +++ b/Extensions/EventSystemExtensions.cs @@ -0,0 +1,58 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions.Physics; +using XRTK.Utilities.Physics; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's EventSystem + /// + public static class EventSystemExtensions + { + private static readonly List RaycastResults = new List(); + private static readonly RaycastResultComparer RaycastResultComparer = new RaycastResultComparer(); + + /// + /// Executes a raycast all and returns the closest element. + /// Fixes the current issue with Unity's raycast sorting which does not consider separate canvases. + /// + /// RaycastResult if hit, or an empty RaycastResult if nothing was hit + public static RaycastResult Raycast(this EventSystem eventSystem, PointerEventData pointerEventData, LayerMask[] layerMasks) + { + eventSystem.RaycastAll(pointerEventData, RaycastResults); + return PrioritizeRaycastResult(layerMasks); + } + + /// + /// Sorts the available Raycasts in to a priority order for query. + /// + /// The layer mask priority. + /// + private static RaycastResult PrioritizeRaycastResult(LayerMask[] priority) + { + ComparableRaycastResult maxResult = default; + + for (var i = 0; i < RaycastResults.Count; i++) + { + if (RaycastResults[i].gameObject == null) { continue; } + + var layerMaskIndex = RaycastResults[i].gameObject.layer.FindLayerListIndex(priority); + if (layerMaskIndex == -1) { continue; } + + var result = new ComparableRaycastResult(RaycastResults[i], layerMaskIndex); + + if (maxResult.RaycastResult.module == null || RaycastResultComparer.Compare(maxResult, result) < 0) + { + maxResult = result; + } + } + + return maxResult.RaycastResult; + } + } +} diff --git a/Extensions/EventSystemExtensions.cs.meta b/Extensions/EventSystemExtensions.cs.meta new file mode 100644 index 000000000..ba40d1f43 --- /dev/null +++ b/Extensions/EventSystemExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0cf93dcfa9e842cba0822c7817cfcfb3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/FloatExtensions.cs b/Extensions/FloatExtensions.cs new file mode 100644 index 000000000..4f3b4bc31 --- /dev/null +++ b/Extensions/FloatExtensions.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for the .Net Float struct + /// + public static class FloatExtensions + { + /// + /// Checks if two numbers are approximately equal. Similar to , but the tolerance + /// can be specified. + /// + /// One of the numbers to compare. + /// The other number to compare. + /// The amount of tolerance to allow while still considering the numbers approximately equal. + /// True if the difference between the numbers is less than or equal to the tolerance, false otherwise. + public static bool Approximately(this float number, float other, float tolerance) + { + return Mathf.Abs(number - other) <= tolerance; + } + } +} diff --git a/Extensions/FloatExtensions.cs.meta b/Extensions/FloatExtensions.cs.meta new file mode 100644 index 000000000..20ecf2b8b --- /dev/null +++ b/Extensions/FloatExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 34c832522bed4bfa9b43a9fd5ba952bf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/GameObjectExtensions.cs b/Extensions/GameObjectExtensions.cs new file mode 100644 index 000000000..630d8fc02 --- /dev/null +++ b/Extensions/GameObjectExtensions.cs @@ -0,0 +1,132 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's GameObject class + /// + public static class GameObjectExtensions + { + public static void SetChildrenActive(this GameObject root, bool isActive) + { + for (int i = 0; i < root.transform.childCount; i++) + { + root.transform.GetChild(i).gameObject.SetActive(false); + } + } + + /// + /// Set the layer to the given object and the full hierarchy below it. + /// + /// Start point of the traverse + /// The layer to apply + public static void SetLayerRecursively(this GameObject root, int layer) + { + if (root == null) + { + throw new ArgumentNullException(nameof(root), "Root transform can't be null."); + } + + foreach (var child in root.transform.EnumerateHierarchy()) + { + child.gameObject.layer = layer; + } + } + + /// + /// Set the layer to the given object and the full hierarchy below it and cache the previous layers in the out parameter. + /// + /// Start point of the traverse + /// The layer to apply + /// The previously set layer for each object + public static void SetLayerRecursively(this GameObject root, int layer, out Dictionary cache) + { + if (root == null) { throw new ArgumentNullException(nameof(root)); } + + cache = new Dictionary(); + + foreach (var child in root.transform.EnumerateHierarchy()) + { + cache[child.gameObject] = child.gameObject.layer; + child.gameObject.layer = layer; + } + } + + /// + /// Reapplies previously cached hierarchy layers + /// + /// Start point of the traverse + /// The previously set layer for each object + public static void ApplyLayerCacheRecursively(this GameObject root, Dictionary cache) + { + if (root == null) { throw new ArgumentNullException(nameof(root)); } + if (cache == null) { throw new ArgumentNullException(nameof(cache)); } + + foreach (var child in root.transform.EnumerateHierarchy()) + { + if (!cache.TryGetValue(child.gameObject, out int layer)) { continue; } + child.gameObject.layer = layer; + cache.Remove(child.gameObject); + } + } + + /// + /// Determines whether or not a game object's layer is included in the specified layer mask. + /// + /// The game object whose layer to test. + /// The layer mask to test against. + /// True if 's layer is included in , false otherwise. + public static bool IsInLayerMask(this GameObject gameObject, LayerMask layerMask) + { + LayerMask gameObjectMask = 1 << gameObject.layer; + return (gameObjectMask & layerMask) == gameObjectMask; + } + + /// + /// Apply the specified delegate to all objects in the hierarchy under a specified game object. + /// + /// Root game object of the hierarchy. + /// Delegate to apply. + public static void ApplyToHierarchy(this GameObject root, Action action) + { + action(root); + Transform[] items = root.GetComponentsInChildren(); + + for (var i = 0; i < items.Length; i++) + { + action(items[i].gameObject); + } + } + + /// + /// Find the first component of type in the ancestors of the specified game object. + /// + /// Type of component to find. + /// Game object for which ancestors must be considered. + /// Indicates whether the specified game object should be included. + /// The component of type . Null if it none was found. + public static T FindAncestorComponent(this GameObject gameObject, bool includeSelf = true) where T : Component + { + return gameObject.transform.FindAncestorComponent(includeSelf); + } + + /// + /// Perform an action on every component of type T that is on this GameObject + /// + /// Component Type + /// this gameObject + /// Action to perform. + public static void ForEachComponent(this GameObject gameObject, Action action) + { + foreach (T i in gameObject.GetComponents()) + { + action(i); + } + } + } +} diff --git a/Extensions/GameObjectExtensions.cs.meta b/Extensions/GameObjectExtensions.cs.meta new file mode 100644 index 000000000..f11f4bf73 --- /dev/null +++ b/Extensions/GameObjectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8043d424fa8e4caebaf7ccb528c06da5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/GestureRecognizerExtensions.cs b/Extensions/GestureRecognizerExtensions.cs new file mode 100644 index 000000000..e8ab60871 --- /dev/null +++ b/Extensions/GestureRecognizerExtensions.cs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Extensions +{ +#if UNITY_WSA + public static class GestureRecognizerExtensions + { + public static void UpdateAndResetGestures(this UnityEngine.XR.WSA.Input.GestureRecognizer recognizer, UnityEngine.XR.WSA.Input.GestureSettings gestureSettings) + { + bool reset = recognizer.IsCapturingGestures(); + + if (reset) + { + recognizer.CancelGestures(); + } + + recognizer.SetRecognizableGestures(gestureSettings); + + if (reset) + { + recognizer.StartCapturingGestures(); + } + } + } +#endif +} \ No newline at end of file diff --git a/Extensions/GestureRecognizerExtensions.cs.meta b/Extensions/GestureRecognizerExtensions.cs.meta new file mode 100644 index 000000000..6dfdca8a0 --- /dev/null +++ b/Extensions/GestureRecognizerExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a845e17f36264449aa18e245015389ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/InteractionSourceExtensions.cs b/Extensions/InteractionSourceExtensions.cs new file mode 100644 index 000000000..6f3360914 --- /dev/null +++ b/Extensions/InteractionSourceExtensions.cs @@ -0,0 +1,109 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_WSA +using XRTK.Utilities; +using UnityEngine.XR.WSA.Input; +using Application = UnityEngine.Application; +#if WINDOWS_UWP +using System; +using System.Collections.Generic; +using Windows.Devices.Haptics; +using Windows.Perception; +using Windows.UI.Input.Spatial; +#elif UNITY_EDITOR_WIN +using System.Runtime.InteropServices; +#endif +#endif // UNITY_WSA + +namespace XRTK.Extensions +{ + /// + /// Extensions for the InteractionSource class to add haptics and expose the renderable model. + /// + public static class InteractionSourceExtensions + { +#if UNITY_EDITOR_WIN && UNITY_WSA + [DllImport("EditorMotionController")] + private static extern bool StartHaptics([In] uint controllerId, [In] float intensity, [In] float durationInSeconds); + + [DllImport("EditorMotionController")] + private static extern bool StopHaptics([In] uint controllerId); +#endif // UNITY_EDITOR_WIN && UNITY_WSA + + // This value is standardized according to www.usb.org/developers/hidpage/HUTRR63b_-_Haptics_Page_Redline.pdf + private const ushort ContinuousBuzzWaveform = 0x1004; + +#if UNITY_WSA + public static void StartHaptics(this InteractionSource interactionSource, float intensity) + { + interactionSource.StartHaptics(intensity, float.MaxValue); + } + + public static void StartHaptics(this InteractionSource interactionSource, float intensity, float durationInSeconds) + { + if (!WindowsApiChecker.UniversalApiContractV4_IsAvailable && !Application.isEditor) + { + return; + } + +#if WINDOWS_UWP + UnityEngine.WSA.Application.InvokeOnUIThread(() => + { + IReadOnlyList sources = SpatialInteractionManager.GetForCurrentView().GetDetectedSourcesAtTimestamp(PerceptionTimestampHelper.FromHistoricalTargetTime(DateTimeOffset.Now)); + + foreach (SpatialInteractionSourceState sourceState in sources) + { + if (sourceState.Source.Id.Equals(interactionSource.id)) + { + SimpleHapticsController simpleHapticsController = sourceState.Source.Controller.SimpleHapticsController; + foreach (SimpleHapticsControllerFeedback hapticsFeedback in simpleHapticsController.SupportedFeedback) + { + if (hapticsFeedback.Waveform.Equals(ContinuousBuzzWaveform)) + { + if (durationInSeconds.Equals(float.MaxValue)) + { + simpleHapticsController.SendHapticFeedback(hapticsFeedback, intensity); + } + else + { + simpleHapticsController.SendHapticFeedbackForDuration(hapticsFeedback, intensity, TimeSpan.FromSeconds(durationInSeconds)); + } + return; + } + } + } + } + }, true); +#elif UNITY_EDITOR_WIN + StartHaptics(interactionSource.id, intensity, durationInSeconds); +#endif // WINDOWS_UWP + } + + public static void StopHaptics(this InteractionSource interactionSource) + { + if (!WindowsApiChecker.UniversalApiContractV4_IsAvailable && !Application.isEditor) + { + return; + } + +#if WINDOWS_UWP + UnityEngine.WSA.Application.InvokeOnUIThread(() => + { + IReadOnlyList sources = SpatialInteractionManager.GetForCurrentView().GetDetectedSourcesAtTimestamp(PerceptionTimestampHelper.FromHistoricalTargetTime(DateTimeOffset.Now)); + + foreach (SpatialInteractionSourceState sourceState in sources) + { + if (sourceState.Source.Id.Equals(interactionSource.id)) + { + sourceState.Source.Controller.SimpleHapticsController.StopFeedback(); + } + } + }, true); +#elif UNITY_EDITOR_WIN + StopHaptics(interactionSource.id); +#endif // WINDOWS_UWP + } +#endif //UNITY_WSA + } +} diff --git a/Extensions/InteractionSourceExtensions.cs.meta b/Extensions/InteractionSourceExtensions.cs.meta new file mode 100644 index 000000000..51104345e --- /dev/null +++ b/Extensions/InteractionSourceExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e09e465fad4e4796a4aa71ac19163785 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/LayerExtensions.cs b/Extensions/LayerExtensions.cs new file mode 100644 index 000000000..4fb9e005b --- /dev/null +++ b/Extensions/LayerExtensions.cs @@ -0,0 +1,187 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's LayerMask struct + /// + public static class LayerExtensions + { + /// + /// The Invalid Layer Id. + /// + public const int InvalidLayerId = -1; + + /// + /// Look through the layerMaskList and find the index in that list for which the supplied layer is part of + /// + /// Layer to search for + /// List of LayerMasks to search + /// LayerMaskList index, or -1 for not found + public static int FindLayerListIndex(this int layer, LayerMask[] layerMasks) + { + var i = 0; + for (int j = 0; j < layerMasks.Length; j++) + { + if (layer.IsInLayerMask(layerMasks[i])) + { + return i; + } + + i++; + } + + return -1; + } + + /// + /// Checks whether a layer is in a layer mask + /// + /// True if the layer mask contains the layer + public static bool IsInLayerMask(this int layer, int layerMask) + { + return ((1 << layer) & layerMask) != 0; + } + + /// + /// Combines provided layers into a single layer mask. + /// + /// The combined layer mask + public static int Combine(this LayerMask[] layerMaskList) + { + int combinedLayerMask = 0; + for (int i = 0; i < layerMaskList.Length; i++) + { + combinedLayerMask = combinedLayerMask | layerMaskList[i].value; + } + return combinedLayerMask; + } + + /// + /// Transform layer id to + /// + /// + /// + public static LayerMask ToMask(int layerId) + { + return 1 << layerId; + } + + /// + /// Gets a valid layer layer id using the layer name. + /// + /// The cached layer id. + /// The name of the layer to look for if the cache is unset. + /// The layer id. + public static int GetLayerId(ref int cache, string layerName) + { + if (cache == InvalidLayerId) + { + cache = LayerMask.NameToLayer(layerName); + } + + return cache; + } + +#if UNITY_EDITOR + + private static UnityEditor.SerializedProperty tagManagerLayers = null; + + /// + /// The current layers defined in the Tag Manager. + /// + public static UnityEditor.SerializedProperty TagManagerLayers + { + get + { + if (tagManagerLayers == null) + { + InitializeTagManager(); + } + + return tagManagerLayers; + } + } + + private static void InitializeTagManager() + { + Object[] tagAssets = UnityEditor.AssetDatabase.LoadAllAssetsAtPath("ProjectSettings/TagManager.asset"); + + if ((tagAssets == null) || (tagAssets.Length == 0)) + { + Debug.LogError("Failed to load TagManager!"); + return; + } + + var tagsManager = new UnityEditor.SerializedObject(tagAssets); + tagManagerLayers = tagsManager.FindProperty("layers"); + + Debug.Assert(tagManagerLayers != null); + } + + /// + /// Attempts to set the layer in Project Settings Tag Manager. + /// + /// + /// If the layer is already set, then it attempts to set the next available layer. + /// + /// The layer Id to attempt to set the layer on. + /// The layer name to attempt to set the layer on. + public static int SetupLayer(int layerId, string layerName) + { + while (layerId != InvalidLayerId) + { + var layer = TagManagerLayers.GetArrayElementAtIndex(layerId); + + if (layer.stringValue == layerName) + { + // layer already set. + return layerId; + } + + if (layer.stringValue != string.Empty) + { + layerId--; + // Target layer in use and may be being used for something else already + // so let's set it to the next empty layer + continue; + } + + // Set the layer name. + layer.stringValue = layerName; + layer.serializedObject.ApplyModifiedProperties(); + UnityEditor.AssetDatabase.SaveAssets(); + return layerId; + } + + Debug.LogError($"Failed to set layer {layerName}. All Layers are in use."); + return InvalidLayerId; + } + + /// + /// Attempts to remove the layer from the Project Settings Tag Manager. + /// + /// + /// + public static void RemoveLayer(string layerName) + { + for (int i = 0; i < TagManagerLayers.arraySize; i++) + { + var layer = TagManagerLayers.GetArrayElementAtIndex(i); + + if (layer.stringValue == layerName) + { + layer.stringValue = string.Empty; + layer.serializedObject.ApplyModifiedProperties(); + UnityEditor.AssetDatabase.SaveAssets(); + break; + } + } + } + +#endif // UNITY_EDITOR + } +} \ No newline at end of file diff --git a/Extensions/LayerExtensions.cs.meta b/Extensions/LayerExtensions.cs.meta new file mode 100644 index 000000000..defd8f90a --- /dev/null +++ b/Extensions/LayerExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9d24e2e808ba4f5299076ed66c48b288 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/MathfExtensions.cs b/Extensions/MathfExtensions.cs new file mode 100644 index 000000000..1213c27b9 --- /dev/null +++ b/Extensions/MathfExtensions.cs @@ -0,0 +1,73 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods and helper functions for various math data + /// + public static class MathExtensions + { + public static int MostSignificantBit(this int x) + { + x |= (x >> 1); + x |= (x >> 2); + x |= (x >> 4); + x |= (x >> 8); + x |= (x >> 16); + + return x & ~(x >> 1); + } + + public static int PowerOfTwoGreaterThanOrEqualTo(this int v) + { + return Mathf.IsPowerOfTwo(v) ? v : Mathf.NextPowerOfTwo(v); + } + + public static Vector3Int PowerOfTwoGreaterThanOrEqualTo(this Vector3Int v) + { + return new Vector3Int(PowerOfTwoGreaterThanOrEqualTo(v.x), + PowerOfTwoGreaterThanOrEqualTo(v.y), + PowerOfTwoGreaterThanOrEqualTo(v.z)); + } + + public static int CubicToLinearIndex(Vector3Int ndx, Vector3Int size) + { + return (ndx.x) + + (ndx.y * size.x) + + (ndx.z * size.x * size.y); + } + + public static Vector3Int LinearToCubicIndex(int linearIndex, Vector3Int size) + { + return new Vector3Int((linearIndex / 1) % size.x, + (linearIndex / size.x) % size.y, + (linearIndex / (size.x * size.y)) % size.z); + } + + public static Vector3 ClampComponentWise(Vector3 value, Vector3 min, Vector3 max) + { + return new Vector3(Mathf.Clamp(value.x, min.x, max.x), + Mathf.Clamp(value.y, min.y, max.y), + Mathf.Clamp(value.z, min.z, max.z)); + } + + /// + /// Sets the value to zero if greater than the specified amount. + /// + /// + /// + /// + public static int ResetIfGreaterThan(this int value, int amount) + { + if (value > amount) + { + value = 0; + } + + return value; + } + } +} diff --git a/Extensions/MathfExtensions.cs.meta b/Extensions/MathfExtensions.cs.meta new file mode 100644 index 000000000..6268c6ef0 --- /dev/null +++ b/Extensions/MathfExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2e0672dd5a2d470fab3e81611a2061b0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/ProcessExtensions.cs b/Extensions/ProcessExtensions.cs new file mode 100644 index 000000000..9caa25d70 --- /dev/null +++ b/Extensions/ProcessExtensions.cs @@ -0,0 +1,218 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +#if UNITY_EDITOR || !UNITY_WSA +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.Threading; +using System.Threading.Tasks; +using XRTK.Definitions.Utilities; + +namespace XRTK.Extensions +{ + /// + /// Extension class. + /// + public static class ProcessExtensions + { + /// + /// Runs an external process. + /// + /// + /// The passed arguments. + /// The output of the process. + /// The Application to run through the command line. Default application is "cmd.exe" + /// Output string. + /// This process will block the main thread of the editor if command takes too long to run. Use for a background process. + public static bool Run(this Process process, string args, out string output, string application = @"cmd.exe") + { + if (string.IsNullOrEmpty(args)) + { + output = "You cannot pass null or empty parameter."; + UnityEngine.Debug.LogError(output); + return false; + } + + process.StartInfo = new ProcessStartInfo + { + WindowStyle = ProcessWindowStyle.Normal, + CreateNoWindow = true, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + FileName = application, + Arguments = args + }; + + try + { + if (!process.Start()) + { + output = "Failed to start process!"; + UnityEngine.Debug.LogError(output); + return false; + } + + string error = process.StandardError.ReadToEnd(); + + if (!string.IsNullOrEmpty(error)) + { + output = error; + return false; + } + + output = process.StandardOutput.ReadToEnd(); + + process.WaitForExit(); + process.Close(); + process.Dispose(); + } + catch (Exception e) + { + output = e.Message; + UnityEngine.Debug.LogException(e); + } + + return true; + } + + /// + /// Starts a process asynchronously. + /// + /// This Process. + /// The process executable to run. + /// The Process arguments. + /// Should output debug code to Editor Console? + /// + /// + public static async Task RunAsync(this Process process, string args, string application = @"cmd.exe", bool showDebug = false, CancellationToken cancellationToken = default) + { + return await RunAsync(process, new ProcessStartInfo + { + FileName = application, + CreateNoWindow = true, + UseShellExecute = false, + RedirectStandardOutput = true, + RedirectStandardError = true, + Arguments = args + }, showDebug, cancellationToken); + } + + /// + /// Starts a process asynchronously. + /// + /// The provided Process Start Info must not use shell execution, and should redirect the standard output and errors. + /// This Process. + /// The Process start info. + /// Should output debug code to Editor Console? + /// + /// + public static async Task RunAsync(this Process process, ProcessStartInfo startInfo, bool showDebug = false, CancellationToken cancellationToken = default) + { + Debug.Assert(!startInfo.UseShellExecute, "Process Start Info must not use shell execution."); + Debug.Assert(startInfo.RedirectStandardOutput, "Process Start Info must redirect standard output."); + Debug.Assert(startInfo.RedirectStandardError, "Process Start Info must redirect standard errors."); + + process.StartInfo = startInfo; + process.EnableRaisingEvents = true; + + var processResult = new TaskCompletionSource(); + var errorCodeResult = new TaskCompletionSource(); + var errorList = new List(); + var outputCodeResult = new TaskCompletionSource(); + var outputList = new List(); + + process.Exited += OnProcessExited; + process.ErrorDataReceived += OnErrorDataReceived; + process.OutputDataReceived += OnOutputDataReceived; + + async void OnProcessExited(object sender, EventArgs args) + { + processResult.TrySetResult(new ProcessResult(process.ExitCode, await errorCodeResult.Task, await outputCodeResult.Task)); + process.Close(); + process.Dispose(); + } + + void OnErrorDataReceived(object sender, DataReceivedEventArgs args) + { + if (args.Data != null) + { + errorList.Add(args.Data); + + if (!showDebug) + { + return; + } + + UnityEngine.Debug.LogError(args.Data); + } + else + { + errorCodeResult.TrySetResult(errorList.ToArray()); + } + } + + void OnOutputDataReceived(object sender, DataReceivedEventArgs args) + { + if (args.Data != null) + { + outputList.Add(args.Data); + + if (!showDebug) + { + return; + } + + UnityEngine.Debug.Log(args.Data); + } + else + { + outputCodeResult.TrySetResult(outputList.ToArray()); + } + } + + if (!process.Start()) + { + if (showDebug) + { + UnityEngine.Debug.LogError("Failed to start process!"); + } + + processResult.TrySetResult(new ProcessResult(process.ExitCode, new[] { "Failed to start process!" }, null)); + } + else + { + process.BeginOutputReadLine(); + process.BeginErrorReadLine(); + CancellationWatcher(process); + } + + async void CancellationWatcher(Process runningProcess) + { + // ReSharper disable once MethodSupportsCancellation + // We utilize the cancellation token in the loop + await Task.Run(() => + { + try + { + while (!runningProcess.HasExited) + { + if (cancellationToken.IsCancellationRequested) + { + runningProcess.Kill(); + } + } + } + catch + { + // ignored + } + }); + } + + return await processResult.Task; + } + } +} +#endif diff --git a/Extensions/ProcessExtensions.cs.meta b/Extensions/ProcessExtensions.cs.meta new file mode 100644 index 000000000..8ed286c6b --- /dev/null +++ b/Extensions/ProcessExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7d11ab5330bf4254ab9a6881f9e16705 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/QuaternionExtensions.cs b/Extensions/QuaternionExtensions.cs new file mode 100644 index 000000000..392e9bf85 --- /dev/null +++ b/Extensions/QuaternionExtensions.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Quaternion struct. + /// + public static class QuaternionExtensions + { + public static bool IsValidRotation(this Quaternion rotation) + { + return !float.IsNaN(rotation.x) && !float.IsNaN(rotation.y) && !float.IsNaN(rotation.z) && !float.IsNaN(rotation.w) && + !float.IsInfinity(rotation.x) && !float.IsInfinity(rotation.y) && !float.IsInfinity(rotation.z) && !float.IsInfinity(rotation.w); + } + } +} \ No newline at end of file diff --git a/Extensions/QuaternionExtensions.cs.meta b/Extensions/QuaternionExtensions.cs.meta new file mode 100644 index 000000000..a6038c450 --- /dev/null +++ b/Extensions/QuaternionExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b11018517b014118a69d02f766e5cc3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/RayExtensions.cs b/Extensions/RayExtensions.cs new file mode 100644 index 000000000..8996de918 --- /dev/null +++ b/Extensions/RayExtensions.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Ray struct + /// + public static class RayExtensions + { + /// + /// Determines whether or not a ray is valid. + /// + /// The ray being tested. + /// True if the ray is valid, false otherwise. + public static bool IsValid(this Ray ray) + { + return ray.direction != Vector3.zero; + } + } +} diff --git a/Extensions/RayExtensions.cs.meta b/Extensions/RayExtensions.cs.meta new file mode 100644 index 000000000..76bf6f864 --- /dev/null +++ b/Extensions/RayExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: fc393e56252249428efc6c3c9a4d6c3e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/StringExtensions.cs b/Extensions/StringExtensions.cs new file mode 100644 index 000000000..1d799d38c --- /dev/null +++ b/Extensions/StringExtensions.cs @@ -0,0 +1,94 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Text; + +namespace XRTK.Extensions +{ + /// + /// Extensions. + /// + public static class StringExtensions + { + /// + /// Encodes the string to base 64 ASCII. + /// + /// String to encode. + /// Encoded string. + public static string EncodeTo64(this string toEncode) + { + byte[] toEncodeAsBytes = Encoding.ASCII.GetBytes(toEncode); + return Convert.ToBase64String(toEncodeAsBytes); + } + + /// + /// Decodes string from base 64 ASCII. + /// + /// String to decode. + /// Decoded string. + public static string DecodeFrom64(this string encodedData) + { + byte[] encodedDataAsBytes = Convert.FromBase64String(encodedData); + return Encoding.ASCII.GetString(encodedDataAsBytes); + } + + /// + /// Capitalize the first character and add a space before + /// each capitalized letter (except the first character). + /// + /// + public static string ToProperCase(this string value) + { + // If there are 0 or 1 characters, just return the string. + if (value == null) { return value; } + if (value.Length < 2) { return value.ToUpper(); } + // If there's already spaces in the string, return. + if (value.Contains(" ")) { return value; } + + // Start with the first character. + string result = value.Substring(0, 1).ToUpper(); + + // Add the remaining characters. + for (int i = 1; i < value.Length; i++) + { + var wasLastCharUpper = char.IsUpper(value[i - 1]); + var nextIsLower = i + 1 < value.Length && char.IsLower(value[i + 1]); + var isUpper = char.IsLetter(value[i]) && char.IsUpper(value[i]); + + if (isUpper && !wasLastCharUpper && nextIsLower) + { + result += " "; + } + + result += value[i]; + + if (isUpper && wasLastCharUpper && !nextIsLower) + { + result += " "; + } + } + + return result; + } + + /// + /// Replaces all back slashes in the string with forward slashes. + /// + /// + /// + public static string ToBackSlashes(this string value) + { + return value.Replace("\\", "/"); + } + + /// + /// Replaces all backslashes in the string with forward slashes. + /// + /// + public static string ToForwardSlashes(this string value) + { + return value.Replace("/", "\\"); + } + } +} diff --git a/Extensions/StringExtensions.cs.meta b/Extensions/StringExtensions.cs.meta new file mode 100644 index 000000000..e8da29c18 --- /dev/null +++ b/Extensions/StringExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5a497145e2394d0e97ba2b9f9337104e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/TextureExtensions.cs b/Extensions/TextureExtensions.cs new file mode 100644 index 000000000..1eb044759 --- /dev/null +++ b/Extensions/TextureExtensions.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Utilities.Async; +using System.Threading.Tasks; +using UnityEngine; +using XRTK.Utilities.Async.AwaitYieldInstructions; + +namespace XRTK.Extensions +{ + /// + /// and Extensions. + /// + public static class TextureExtensions + { + public static async Task LoadTextureAsync(this Texture2D texture, string path) + { + // TODO load raw image data + return await texture.LoadTextureAsync((byte[])null); + } + + public static async Task LoadTextureAsync(this Texture2D texture, byte[] rawImageData) + { + texture.GetNativeTexturePtr(); + await Awaiters.UnityMainThread; + // TODO Call into native graphic plugin. + return texture; + } + } +} \ No newline at end of file diff --git a/Extensions/TextureExtensions.cs.meta b/Extensions/TextureExtensions.cs.meta new file mode 100644 index 000000000..2fe8789bf --- /dev/null +++ b/Extensions/TextureExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55ad017bf9994676b8ac1b4548f8ac97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/TransformExtensions.cs b/Extensions/TransformExtensions.cs new file mode 100644 index 000000000..2ecdd51a9 --- /dev/null +++ b/Extensions/TransformExtensions.cs @@ -0,0 +1,259 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Text; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Transform class + /// + public static class TransformExtensions + { + /// + /// An extension method that will get you the full path to an object. + /// + /// The transform you wish a full path to. + /// The delimiter with which each object is delimited in the string. + /// Prefix with which the full path to the object should start. + /// A delimited string that is the full path to the game object in the hierarchy. + public static string GetFullPath(this Transform transform, string delimiter = ".", string prefix = "/") + { + var stringBuilder = new StringBuilder(); + GetFullPath(stringBuilder, transform, delimiter, prefix); + return stringBuilder.ToString(); + } + + private static void GetFullPath(StringBuilder stringBuilder, Transform transform, string delimiter, string prefix) + { + if (transform.parent == null) + { + stringBuilder.Append(prefix); + } + else + { + GetFullPath(stringBuilder, transform.parent, delimiter, prefix); + stringBuilder.Append(delimiter); + } + + stringBuilder.Append(transform.name); + } + + /// + /// Enumerates all children in the hierarchy starting at the root object. + /// + /// Start point of the traversion set + public static IEnumerable EnumerateHierarchy(this Transform root) + { + if (root == null) { throw new ArgumentNullException(nameof(root)); } + return root.EnumerateHierarchyCore(new List(0)); + } + + /// + /// Enumerates all children in the hierarchy starting at the root object except for the branches in ignore. + /// + /// Start point of the traversion set + /// Transforms and all its children to be ignored + public static IEnumerable EnumerateHierarchy(this Transform root, ICollection ignore) + { + if (root == null) { throw new ArgumentNullException(nameof(root)); } + if (ignore == null) + { + throw new ArgumentNullException(nameof(ignore), "Ignore collection can't be null, use EnumerateHierarchy(root) instead."); + } + return root.EnumerateHierarchyCore(ignore); + } + + /// + /// Enumerates all children in the hierarchy starting at the root object except for the branches in ignore. + /// + /// Start point of the traversion set + /// Transforms and all its children to be ignored + private static IEnumerable EnumerateHierarchyCore(this Transform root, ICollection ignore) + { + var transformQueue = new Queue(); + transformQueue.Enqueue(root); + + while (transformQueue.Count > 0) + { + var parentTransform = transformQueue.Dequeue(); + + if (!parentTransform || ignore.Contains(parentTransform)) { continue; } + + for (var i = 0; i < parentTransform.childCount; i++) + { + transformQueue.Enqueue(parentTransform.GetChild(i)); + } + + yield return parentTransform; + } + } + + /// + /// Calculates the bounds of all the colliders attached to this GameObject and all it's children + /// + /// Transform of root GameObject the colliders are attached to + /// The total bounds of all colliders attached to this GameObject. + /// If no colliders attached, returns a bounds of center and extents 0 + public static Bounds GetColliderBounds(this Transform transform) + { + Collider[] colliders = transform.GetComponentsInChildren(); + + if (colliders.Length == 0) { return new Bounds(); } + + Bounds bounds = colliders[0].bounds; + + for (int i = 1; i < colliders.Length; i++) + { + bounds.Encapsulate(colliders[i].bounds); + } + + return bounds; + } + + /// + /// Checks if the provided transforms are child/parent related. + /// + /// True if either transform is the parent of the other or if they are the same + public static bool IsParentOrChildOf(this Transform transform1, Transform transform2) + { + return transform1.IsChildOf(transform2) || transform2.IsChildOf(transform1); + } + + /// + /// Find the first component of type in the ancestors of the specified transform. + /// + /// Type of component to find. + /// Transform for which ancestors must be considered. + /// Indicates whether the specified transform should be included. + /// The component of type . Null if it none was found. + public static T FindAncestorComponent(this Transform startTransform, bool includeSelf = true) where T : Component + { + foreach (Transform transform in startTransform.EnumerateAncestors(includeSelf)) + { + T component = transform.GetComponent(); + + if (component != null) + { + return component; + } + } + + return null; + } + + /// + /// Enumerates the ancestors of the specified transform. + /// + /// Transform for which ancestors must be returned. + /// Indicates whether the specified transform should be included. + /// An enumeration of all ancestor transforms of the specified start transform. + public static IEnumerable EnumerateAncestors(this Transform startTransform, bool includeSelf) + { + if (!includeSelf) + { + startTransform = startTransform.parent; + } + + for (Transform transform = startTransform; transform != null; transform = transform.parent) + { + yield return transform; + } + } + + /// + /// Transforms the size from local to world. + /// + /// The transform. + /// The local size. + /// World size. + public static Vector3 TransformSize(this Transform transform, Vector3 localSize) + { + var transformedSize = localSize; + var transformedCopy = transform; + + do + { + var localScale = transformedCopy.localScale; + transformedSize.x *= localScale.x; + transformedSize.y *= localScale.y; + transformedSize.z *= localScale.z; + transformedCopy = transformedCopy.parent; + } + while (transformedCopy != null); + + return transformedSize; + } + + /// + /// Transforms the size from world to local. + /// + /// The transform. + /// The world size + /// World size. + public static Vector3 InverseTransformSize(this Transform transform, Vector3 worldSize) + { + var transformedSize = worldSize; + var transformedCopy = transform; + + do + { + var localScale = transformedCopy.localScale; + transformedSize.x /= localScale.x; + transformedSize.y /= localScale.y; + transformedSize.z /= localScale.z; + transformedCopy = transformedCopy.parent; + } + while (transformedCopy != null); + + return transformedSize; + } + + /// + /// Gets the hierarchical depth of the Transform from its root. Returns -1 if the transform is the root. + /// + /// The transform to get the depth for. + /// + public static int GetDepth(this Transform transform) + { + int depth = -1; + + Transform root = transform.root; + + if (root == transform) + { + return depth; + } + + TryGetDepth(transform, root, ref depth); + + return depth; + } + + /// + /// Tries to get the hierarchical depth of the Transform from the specified parent. This method is recursive. + /// + /// The transform to get the depth for + /// The starting transform to look for the target transform in + /// The depth of the target transform + /// 'true' if the depth could be retrieved, or 'false' because the transform is a root transform. + public static bool TryGetDepth(Transform target, Transform parent, ref int depth) + { + for (int i = 0; i < parent.childCount; i++) + { + depth++; + var child = parent.GetChild(i); + + if (child == target.transform || TryGetDepth(target, child, ref depth)) + { + return true; + } + } + + return false; + } + } +} \ No newline at end of file diff --git a/Extensions/TransformExtensions.cs.meta b/Extensions/TransformExtensions.cs.meta new file mode 100644 index 000000000..a076f3c14 --- /dev/null +++ b/Extensions/TransformExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 500993af9b194be1bdacf3d70f419038 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/UnityObjectExtensions.cs b/Extensions/UnityObjectExtensions.cs new file mode 100644 index 000000000..b35ad1adf --- /dev/null +++ b/Extensions/UnityObjectExtensions.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using Object = UnityEngine.Object; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Object class + /// + public static class UnityObjectExtensions + { + /// + /// Enable Unity objects to skip "DontDestroyOnLoad" when editor isn't playing so test runner passes. + /// + /// + public static void DontDestroyOnLoad(this Object target) + { +#if UNITY_EDITOR + if (UnityEditor.EditorApplication.isPlaying) +#endif + Object.DontDestroyOnLoad(target); + } + } +} diff --git a/Extensions/UnityObjectExtensions.cs.meta b/Extensions/UnityObjectExtensions.cs.meta new file mode 100644 index 000000000..a7a1148e1 --- /dev/null +++ b/Extensions/UnityObjectExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cb5acbcd47dd4c7fb3d138d2d39cb47d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Extensions/VectorExtensions.cs b/Extensions/VectorExtensions.cs new file mode 100644 index 000000000..80f5aa6d9 --- /dev/null +++ b/Extensions/VectorExtensions.cs @@ -0,0 +1,245 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEngine; + +namespace XRTK.Extensions +{ + /// + /// Extension methods for Unity's Vector struct + /// + public static class VectorExtensions + { + public static Vector2 Mul(this Vector2 value, Vector2 scale) + { + return new Vector2(value.x * scale.x, value.y * scale.y); + } + + public static Vector2 Div(this Vector2 value, Vector2 scale) + { + return new Vector2(value.x / scale.x, value.y / scale.y); + } + + public static Vector3 Mul(this Vector3 value, Vector3 scale) + { + return new Vector3(value.x * scale.x, value.y * scale.y, value.z * scale.z); + } + + public static Vector3 Div(this Vector3 value, Vector3 scale) + { + return new Vector3(value.x / scale.x, value.y / scale.y, value.z / scale.z); + } + + public static Vector3 RotateAround(this Vector3 point, Vector3 pivot, Quaternion rotation) + { + return rotation * (point - pivot) + pivot; + } + + public static Vector3 RotateAround(this Vector3 point, Vector3 pivot, Vector3 eulerAngles) + { + return RotateAround(point, pivot, Quaternion.Euler(eulerAngles)); + } + + public static Vector3 TransformPoint(this Vector3 point, Vector3 translation, Quaternion rotation, Vector3 lossyScale) + { + return rotation * Vector3.Scale(lossyScale, point) + translation; + } + + public static Vector3 InverseTransformPoint(this Vector3 point, Vector3 translation, Quaternion rotation, Vector3 lossyScale) + { + var scaleInv = new Vector3(1 / lossyScale.x, 1 / lossyScale.y, 1 / lossyScale.z); + return Vector3.Scale(scaleInv, (Quaternion.Inverse(rotation) * (point - translation))); + } + + public static Vector2 Average(this IEnumerable vectors) + { + float x = 0f; + float y = 0f; + int count = 0; + + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + count++; + } + + return new Vector2(x / count, y / count); + } + + public static Vector3 Average(this IEnumerable vectors) + { + float x = 0f; + float y = 0f; + float z = 0f; + int count = 0; + + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + z += pos.z; + count++; + } + + return new Vector3(x / count, y / count, z / count); + } + + public static Vector2 Average(this ICollection vectors) + { + int count = vectors.Count; + if (count == 0) + { + return Vector2.zero; + } + + float x = 0f; + float y = 0f; + + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + } + + return new Vector2(x / count, y / count); + } + + public static Vector3 Average(this ICollection vectors) + { + int count = vectors.Count; + + if (count == 0) + { + return Vector3.zero; + } + + float x = 0f; + float y = 0f; + float z = 0f; + + foreach (var pos in vectors) + { + x += pos.x; + y += pos.y; + z += pos.z; + } + + return new Vector3(x / count, y / count, z / count); + } + + public static Vector2 Median(this IEnumerable vectors) + { + var enumerable = vectors as Vector2[] ?? vectors.ToArray(); + int count = enumerable.Length; + return count == 0 ? Vector2.zero : enumerable.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static Vector3 Median(this IEnumerable vectors) + { + var enumerable = vectors as Vector3[] ?? vectors.ToArray(); + int count = enumerable.Length; + return count == 0 ? Vector3.zero : enumerable.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static Vector2 Median(this ICollection vectors) + { + int count = vectors.Count; + return count == 0 ? Vector2.zero : vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static Vector3 Median(this ICollection vectors) + { + int count = vectors.Count; + return count == 0 ? Vector3.zero : vectors.OrderBy(v => v.sqrMagnitude).ElementAt(count / 2); + } + + public static bool IsValidVector(this Vector3 vector) + { + return !float.IsNaN(vector.x) && !float.IsNaN(vector.y) && !float.IsNaN(vector.z) && + !float.IsInfinity(vector.x) && !float.IsInfinity(vector.y) && !float.IsInfinity(vector.z); + } + + /// + /// Get the relative mapping based on a source Vec3 and a radius for spherical mapping. + /// + /// The source to be mapped to sphere + /// This is a for the radius of the sphere + /// + public static Vector3 SphericalMapping(Vector3 source, float radius) + { + float circ = 2f * Mathf.PI * radius; + + float xAngle = (source.x / circ) * 360f; + float yAngle = -(source.y / circ) * 360f; + + source.Set(0.0f, 0.0f, radius); + + Quaternion rot = Quaternion.Euler(yAngle, xAngle, 0.0f); + source = rot * source; + + return source; + } + + /// + /// Get the relative mapping based on a source Vec3 and a radius for cylinder mapping. + /// + /// The source to be mapped to cylinder + /// This is a for the radius of the cylinder + /// + public static Vector3 CylindricalMapping(Vector3 source, float radius) + { + float circ = 2f * Mathf.PI * radius; + + float xAngle = (source.x / circ) * 360f; + + source.Set(0.0f, source.y, radius); + + Quaternion rot = Quaternion.Euler(0.0f, xAngle, 0.0f); + source = rot * source; + + return source; + } + + /// + /// Get the relative mapping based on a source Vec3 and a radius for radial mapping. + /// + /// The source to be mapped to cylinder + /// The total range of the radial in degrees as a + /// This is a for the radius of the radial + /// The current row as a for the radial calculation + /// The total rows as a for the radial calculation + /// The current column as a for the radial calculation + /// The total columns as a for the radial calculation + /// The offset to use to adjust the start position of the items in the radial. + /// The new position for the row/column. + public static Vector3 RadialMapping(Vector3 source, float radialRange, float radius, int row, int totalRows, int column, int totalColumns, float offset = 0.0f) + { + var radialCellAngle = radialRange / totalColumns; + + source.x = 0f; + source.y = 0f; + source.z = (radius / totalRows) * row; + var yAngle = radialCellAngle * (column - (totalColumns * offset)) + (radialCellAngle * offset); + var rot = Quaternion.Euler(0.0f, yAngle, 0.0f); + + return rot * source; + } + + /// + /// Randomized mapping based on a source Vec3 and a radius for randomization distance. + /// + /// The source to be mapped to cylinder + /// This is a for the radius of the cylinder + /// + public static Vector3 ScatterMapping(Vector3 source, float radius) + { + source.x = UnityEngine.Random.Range(-radius, radius); + source.y = UnityEngine.Random.Range(-radius, radius); + return source; + } + + } +} diff --git a/Extensions/VectorExtensions.cs.meta b/Extensions/VectorExtensions.cs.meta new file mode 100644 index 000000000..a0fe7f2d7 --- /dev/null +++ b/Extensions/VectorExtensions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b8a1bd84dd1c438986b424d4f0ecb32b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors.meta b/Inspectors.meta new file mode 100644 index 000000000..f2dd7ef0d --- /dev/null +++ b/Inspectors.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8c0c5822e4144c9eb3ed9fca2ff54b66 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/BaseMixedRealityToolkitInspector.cs b/Inspectors/BaseMixedRealityToolkitInspector.cs new file mode 100644 index 000000000..08ac8297e --- /dev/null +++ b/Inspectors/BaseMixedRealityToolkitInspector.cs @@ -0,0 +1,24 @@ +using UnityEditor; +using UnityEngine; +using XRTK.Inspectors.Utilities; + +namespace XRTK.Inspectors.Profiles { + /// + /// Base class for all editor inspectors of the Mixed Reality Toolkit to inherit from. + /// + public abstract class BaseMixedRealityToolkitInspector : Editor + { + /// + /// Render the Mixed Reality Toolkit Logo. + /// + protected static void RenderMixedRealityToolkitLogo() + { + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label(EditorGUIUtility.isProSkin ? MixedRealityInspectorUtility.LightThemeLogo : MixedRealityInspectorUtility.DarkThemeLogo, GUILayout.MaxHeight(128f)); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + GUILayout.Space(12f); + } + } +} \ No newline at end of file diff --git a/Inspectors/BaseMixedRealityToolkitInspector.cs.meta b/Inspectors/BaseMixedRealityToolkitInspector.cs.meta new file mode 100644 index 000000000..72697e547 --- /dev/null +++ b/Inspectors/BaseMixedRealityToolkitInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a63cb65fe9cd47d7b0feb563c1460da9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/ControllerPopupWindow.cs b/Inspectors/ControllerPopupWindow.cs new file mode 100644 index 000000000..b011af917 --- /dev/null +++ b/Inspectors/ControllerPopupWindow.cs @@ -0,0 +1,759 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Inspectors.Data; +using XRTK.Inspectors.Utilities; +using XRTK.Services; +using XRTK.Utilities.Editor; + +namespace XRTK.Inspectors +{ + public class ControllerPopupWindow : EditorWindow + { + private const string EditorWindowOptionsPath = "/Inspectors/Data/EditorWindowOptions.json"; + private const float InputActionLabelWidth = 128f; + + /// + /// Used to enable editing the input axis label positions on controllers + /// + private static readonly bool EnableWysiwyg = false; + + private static readonly GUIContent InteractionAddButtonContent = new GUIContent("+ Add a New Interaction Mapping"); + private static readonly GUIContent InteractionMinusButtonContent = new GUIContent("-", "Remove Interaction Mapping"); + private static readonly GUIContent AxisTypeContent = new GUIContent("Axis Type", "The axis type of the button, e.g. Analogue, Digital, etc."); + private static readonly GUIContent ControllerInputTypeContent = new GUIContent("Input Type", "The primary action of the input as defined by the controller SDK."); + private static readonly GUIContent ActionContent = new GUIContent("Action", "Action to be raised to the Input Manager when the input data has changed."); + private static readonly GUIContent KeyCodeContent = new GUIContent("KeyCode", "Unity Input KeyCode id to listen for."); + private static readonly GUIContent XAxisContent = new GUIContent("X Axis", "Horizontal Axis to listen for."); + private static readonly GUIContent YAxisContent = new GUIContent("Y Axis", "Vertical Axis to listen for."); + private static readonly GUIContent InvertContent = new GUIContent("Invert", "Should an Axis be inverted?"); + private static readonly GUIContent[] InvertAxisContent = + { + new GUIContent("None"), + new GUIContent("X"), + new GUIContent("Y"), + new GUIContent("Both") + }; + + private static readonly int[] InvertAxisValues = { 0, 1, 2, 3 }; + + private static readonly Vector2 InputActionLabelPosition = new Vector2(256f, 0f); + private static readonly Vector2 InputActionDropdownPosition = new Vector2(88f, 0f); + private static readonly Vector2 InputActionFlipTogglePosition = new Vector2(-24f, 0f); + private static readonly Vector2 HorizontalSpace = new Vector2(8f, 0f); + + private static readonly Rect ControllerRectPosition = new Rect(new Vector2(128f, 0f), new Vector2(512f, 512f)); + + private static ControllerPopupWindow window; + private static ControllerInputActionOptions controllerInputActionOptions; + + private static GUIContent[] axisLabels; + private static int[] actionIds; + private static GUIContent[] actionLabels; + private static int[] rawActionIds; + private static GUIContent[] rawActionLabels; + private static int[] digitalActionIds; + private static GUIContent[] digitalActionLabels; + private static int[] singleAxisActionIds; + private static GUIContent[] singleAxisActionLabels; + private static int[] dualAxisActionIds; + private static GUIContent[] dualAxisActionLabels; + private static int[] threeDofPositionActionIds; + private static GUIContent[] threeDofPositionActionLabels; + private static int[] threeDofRotationActionIds; + private static GUIContent[] threeDofRotationActionLabels; + private static int[] sixDofActionIds; + private static GUIContent[] sixDofActionLabels; + private static bool[] isMouseInRects; + + private static bool editInputActionPositions; + + private static float defaultLabelWidth; + private static float defaultFieldWidth; + + private static Vector2 horizontalScrollPosition; + + private bool isLocked = false; + private SerializedProperty currentInteractionList; + + private ControllerPopupWindow thisWindow; + + private Handedness currentHandedness; + private SupportedControllerType currentControllerType; + + private Vector2 mouseDragOffset; + private GUIStyle flippedLabelStyle; + private Texture2D currentControllerTexture; + private ControllerInputActionOption currentControllerOption; + + private bool IsCustomController => currentControllerType == SupportedControllerType.GenericOpenVR || + currentControllerType == SupportedControllerType.GenericUnity; + + private void OnFocus() + { + currentControllerTexture = ControllerMappingLibrary.GetControllerTexture(currentControllerType, currentHandedness); + + #region Interaction Constraint Setup + + actionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + axisLabels = ControllerMappingLibrary.UnityInputManagerAxes + .Select(axis => new GUIContent(axis.Name)) + .Prepend(new GUIContent("None")).ToArray(); + + actionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.None) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + actionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.None) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + rawActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Raw) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + rawActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Raw) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + digitalActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Digital) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + digitalActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.Digital) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + singleAxisActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SingleAxis) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + singleAxisActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SingleAxis) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + dualAxisActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.DualAxis) + .Select(action => (int)action.Id).Prepend(0).ToArray(); + + dualAxisActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.DualAxis) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + threeDofPositionActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofPosition) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + threeDofPositionActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofPosition) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + threeDofRotationActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofRotation) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + threeDofRotationActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.ThreeDofRotation) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + sixDofActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SixDof) + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + + sixDofActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == AxisType.SixDof) + .Select(inputAction => new GUIContent(inputAction.Description)) + .Prepend(new GUIContent("None")).ToArray(); + + #endregion Interaction Constraint Setup + } + + public static void Show(SupportedControllerType controllerType, SerializedProperty interactionsList, Handedness handedness = Handedness.None, bool isLocked = false) + { + window = (ControllerPopupWindow)GetWindow(typeof(ControllerPopupWindow)); + window.Close(); + window = (ControllerPopupWindow)CreateInstance(typeof(ControllerPopupWindow)); + window.thisWindow = window; + var handednessTitleText = handedness != Handedness.None ? $"{handedness} Hand " : string.Empty; + window.titleContent = new GUIContent($"{controllerType} {handednessTitleText}Input Action Assignment"); + window.currentControllerType = controllerType; + window.currentHandedness = handedness; + window.isLocked = isLocked; + window.currentInteractionList = interactionsList; + isMouseInRects = new bool[interactionsList.arraySize]; + + if (!File.Exists($"{MixedRealityEditorSettings.MixedRealityToolkit_AbsoluteFolderPath}{EditorWindowOptionsPath}")) + { + var empty = new ControllerInputActionOptions + { + Controllers = new List + { + new ControllerInputActionOption + { + Controller = SupportedControllerType.None, + Handedness = Handedness.None, + InputLabelPositions = new[] {new Vector2(0, 0)}, + IsLabelFlipped = new []{false} + } + } + }; + + File.WriteAllText($"{MixedRealityEditorSettings.MixedRealityToolkit_AbsoluteFolderPath}{EditorWindowOptionsPath}", JsonUtility.ToJson(empty)); + AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); + } + else + { + controllerInputActionOptions = JsonUtility.FromJson(File.ReadAllText($"{MixedRealityEditorSettings.MixedRealityToolkit_AbsoluteFolderPath}{EditorWindowOptionsPath}")); + + if (controllerInputActionOptions.Controllers.Any(option => option.Controller == controllerType && option.Handedness == handedness)) + { + window.currentControllerOption = controllerInputActionOptions.Controllers.FirstOrDefault(option => option.Controller == controllerType && option.Handedness == handedness); + + if (window.currentControllerOption != null && window.currentControllerOption.IsLabelFlipped == null) + { + window.currentControllerOption.IsLabelFlipped = new bool[interactionsList.arraySize]; + } + } + } + + window.ShowUtility(); + var windowSize = new Vector2(controllerType == SupportedControllerType.GenericOpenVR || controllerType == SupportedControllerType.GenericUnity ? 896f : 768f, 512f); + window.maxSize = windowSize; + window.minSize = windowSize; + window.CenterOnMainWin(); + defaultLabelWidth = EditorGUIUtility.labelWidth; + defaultFieldWidth = EditorGUIUtility.fieldWidth; + } + + private void Update() + { + if (editInputActionPositions) + { + Repaint(); + } + } + + private void OnGUI() + { + if (flippedLabelStyle == null) + { + flippedLabelStyle = new GUIStyle("Label") + { + alignment = TextAnchor.UpperRight, + stretchWidth = true + }; + } + + if (!IsCustomController && currentControllerTexture != null) + { + GUILayout.BeginHorizontal(); + GUI.DrawTexture(ControllerRectPosition, currentControllerTexture); + GUILayout.EndHorizontal(); + } + + try + { + RenderInteractionList(currentInteractionList, IsCustomController); + } + catch (Exception) + { + thisWindow.Close(); + } + } + + private void RenderInteractionList(SerializedProperty interactionList, bool useCustomInteractionMapping) + { + GUI.enabled = !isLocked; + if (interactionList == null) { throw new Exception(); } + + bool noInteractions = interactionList.arraySize == 0; + + if (currentControllerOption != null && (currentControllerOption.IsLabelFlipped == null || currentControllerOption.IsLabelFlipped.Length != interactionList.arraySize)) + { + currentControllerOption.IsLabelFlipped = new bool[interactionList.arraySize]; + } + + GUILayout.BeginVertical(); + + if (useCustomInteractionMapping) + { + horizontalScrollPosition = EditorGUILayout.BeginScrollView(horizontalScrollPosition, false, false, GUILayout.ExpandWidth(true), GUILayout.ExpandWidth(true)); + } + + if (useCustomInteractionMapping) + { + if (GUILayout.Button(InteractionAddButtonContent)) + { + interactionList.arraySize += 1; + var interaction = interactionList.GetArrayElementAtIndex(interactionList.arraySize - 1); + var axisType = interaction.FindPropertyRelative("axisType"); + axisType.enumValueIndex = 0; + var inputType = interaction.FindPropertyRelative("inputType"); + inputType.enumValueIndex = 0; + var action = interaction.FindPropertyRelative("inputAction"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + actionDescription.stringValue = "None"; + actionId.intValue = 0; + } + + if (noInteractions) + { + EditorGUILayout.HelpBox("Create an Interaction Mapping.", MessageType.Warning); + EditorGUILayout.EndScrollView(); + GUILayout.EndVertical(); + return; + } + } + else if (EnableWysiwyg) + { + EditorGUI.BeginChangeCheck(); + editInputActionPositions = EditorGUILayout.Toggle("Edit Input Action Positions", editInputActionPositions); + + if (EditorGUI.EndChangeCheck()) + { + if (!editInputActionPositions) + { + File.WriteAllText($"{MixedRealityEditorSettings.MixedRealityToolkit_AbsoluteFolderPath}{EditorWindowOptionsPath}", JsonUtility.ToJson(controllerInputActionOptions)); + } + else + { + if (!controllerInputActionOptions.Controllers.Any(option => option.Controller == currentControllerType && option.Handedness == currentHandedness)) + { + currentControllerOption = new ControllerInputActionOption + { + Controller = currentControllerType, + Handedness = currentHandedness, + InputLabelPositions = new Vector2[currentInteractionList.arraySize], + IsLabelFlipped = new bool[currentInteractionList.arraySize] + }; + + controllerInputActionOptions.Controllers.Add(currentControllerOption); + isMouseInRects = new bool[currentInteractionList.arraySize]; + + if (controllerInputActionOptions.Controllers.Any(option => option.Controller == SupportedControllerType.None)) + { + controllerInputActionOptions.Controllers.Remove( + controllerInputActionOptions.Controllers.Find(option => + option.Controller == SupportedControllerType.None)); + } + + File.WriteAllText($"{MixedRealityEditorSettings.MixedRealityToolkit_AbsoluteFolderPath}{EditorWindowOptionsPath}", JsonUtility.ToJson(controllerInputActionOptions)); + } + } + } + } + + GUILayout.BeginHorizontal(); + + if (useCustomInteractionMapping) + { + EditorGUILayout.LabelField("Id", GUILayout.Width(32f)); + EditorGUIUtility.labelWidth = 24f; + EditorGUIUtility.fieldWidth = 24f; + EditorGUILayout.LabelField(ControllerInputTypeContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(AxisTypeContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(ActionContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(KeyCodeContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(XAxisContent, GUILayout.Width(InputActionLabelWidth)); + EditorGUILayout.LabelField(YAxisContent, GUILayout.Width(InputActionLabelWidth)); + GUILayout.FlexibleSpace(); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(24f)); + + EditorGUIUtility.labelWidth = defaultLabelWidth; + EditorGUIUtility.fieldWidth = defaultFieldWidth; + } + + GUILayout.EndHorizontal(); + + for (int i = 0; i < interactionList.arraySize; i++) + { + EditorGUILayout.BeginHorizontal(); + SerializedProperty interaction = interactionList.GetArrayElementAtIndex(i); + + if (useCustomInteractionMapping) + { + EditorGUILayout.LabelField($"{i + 1}", GUILayout.Width(32f)); + var inputType = interaction.FindPropertyRelative("inputType"); + EditorGUILayout.PropertyField(inputType, GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + var axisType = interaction.FindPropertyRelative("axisType"); + EditorGUILayout.PropertyField(axisType, GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + var invertXAxis = interaction.FindPropertyRelative("invertXAxis"); + var invertYAxis = interaction.FindPropertyRelative("invertYAxis"); + var interactionAxisConstraint = interaction.FindPropertyRelative("axisType"); + + var action = interaction.FindPropertyRelative("inputAction"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + + GUIContent[] labels; + int[] ids; + + switch ((AxisType)interactionAxisConstraint.intValue) + { + default: + case AxisType.None: + labels = actionLabels; + ids = actionIds; + break; + case AxisType.Raw: + labels = rawActionLabels; + ids = rawActionIds; + break; + case AxisType.Digital: + labels = digitalActionLabels; + ids = digitalActionIds; + break; + case AxisType.SingleAxis: + labels = singleAxisActionLabels; + ids = singleAxisActionIds; + break; + case AxisType.DualAxis: + labels = dualAxisActionLabels; + ids = dualAxisActionIds; + break; + case AxisType.ThreeDofPosition: + labels = threeDofPositionActionLabels; + ids = threeDofPositionActionIds; + break; + case AxisType.ThreeDofRotation: + labels = threeDofRotationActionLabels; + ids = threeDofRotationActionIds; + break; + case AxisType.SixDof: + labels = sixDofActionLabels; + ids = sixDofActionIds; + break; + } + + EditorGUI.BeginChangeCheck(); + actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, labels, ids, GUILayout.Width(InputActionLabelWidth)); + + if (EditorGUI.EndChangeCheck()) + { + var inputAction = actionId.intValue == 0 ? MixedRealityInputAction.None : MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; + actionDescription.stringValue = inputAction.Description; + actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + } + + if ((AxisType)axisType.intValue == AxisType.Digital) + { + var keyCode = interaction.FindPropertyRelative("keyCode"); + EditorGUILayout.PropertyField(keyCode, GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + else + { + if ((AxisType)axisType.intValue == AxisType.DualAxis) + { + EditorGUIUtility.labelWidth = InputActionLabelWidth * 0.5f; + EditorGUIUtility.fieldWidth = InputActionLabelWidth * 0.5f; + + int currentAxisSetting = 0; + + if (invertXAxis.boolValue) + { + currentAxisSetting += 1; + } + + if (invertYAxis.boolValue) + { + currentAxisSetting += 2; + } + + EditorGUI.BeginChangeCheck(); + currentAxisSetting = EditorGUILayout.IntPopup(InvertContent, currentAxisSetting, InvertAxisContent, InvertAxisValues, GUILayout.Width(InputActionLabelWidth)); + + if (EditorGUI.EndChangeCheck()) + { + switch (currentAxisSetting) + { + case 0: + invertXAxis.boolValue = false; + invertYAxis.boolValue = false; + break; + case 1: + invertXAxis.boolValue = true; + invertYAxis.boolValue = false; + break; + case 2: + invertXAxis.boolValue = false; + invertYAxis.boolValue = true; + break; + case 3: + invertXAxis.boolValue = true; + invertYAxis.boolValue = true; + break; + } + } + + EditorGUIUtility.labelWidth = defaultLabelWidth; + EditorGUIUtility.fieldWidth = defaultFieldWidth; + } + else if ((AxisType)axisType.intValue == AxisType.SingleAxis) + { + invertXAxis.boolValue = EditorGUILayout.ToggleLeft("Invert X", invertXAxis.boolValue, GUILayout.Width(InputActionLabelWidth)); + EditorGUIUtility.labelWidth = defaultLabelWidth; + } + else + { + EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + } + + if ((AxisType)axisType.intValue == AxisType.SingleAxis || + (AxisType)axisType.intValue == AxisType.DualAxis) + { + var axisCodeX = interaction.FindPropertyRelative("axisCodeX"); + RenderAxisPopup(axisCodeX, InputActionLabelWidth); + } + else + { + EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + + if ((AxisType)axisType.intValue == AxisType.DualAxis) + { + var axisCodeY = interaction.FindPropertyRelative("axisCodeY"); + RenderAxisPopup(axisCodeY, InputActionLabelWidth); + } + else + { + EditorGUILayout.LabelField(GUIContent.none, GUILayout.Width(InputActionLabelWidth)); + } + + if (GUILayout.Button(InteractionMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.ExpandWidth(true))) + { + interactionList.DeleteArrayElementAtIndex(i); + } + } + else + { + var interactionDescription = interaction.FindPropertyRelative("description"); + var interactionAxisConstraint = interaction.FindPropertyRelative("axisType"); + var action = interaction.FindPropertyRelative("inputAction"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + + GUIContent[] labels; + int[] ids; + + switch ((AxisType)interactionAxisConstraint.intValue) + { + default: + case AxisType.None: + labels = actionLabels; + ids = actionIds; + break; + case AxisType.Raw: + labels = rawActionLabels; + ids = rawActionIds; + break; + case AxisType.Digital: + labels = digitalActionLabels; + ids = digitalActionIds; + break; + case AxisType.SingleAxis: + labels = singleAxisActionLabels; + ids = singleAxisActionIds; + break; + case AxisType.DualAxis: + labels = dualAxisActionLabels; + ids = dualAxisActionIds; + break; + case AxisType.ThreeDofPosition: + labels = threeDofPositionActionLabels; + ids = threeDofPositionActionIds; + break; + case AxisType.ThreeDofRotation: + labels = threeDofRotationActionLabels; + ids = threeDofRotationActionIds; + break; + case AxisType.SixDof: + labels = sixDofActionLabels; + ids = sixDofActionIds; + break; + } + + EditorGUI.BeginChangeCheck(); + + if (currentControllerOption == null || currentControllerTexture == null) + { + bool skip = false; + var description = interactionDescription.stringValue; + if (currentControllerType == SupportedControllerType.WindowsMixedReality && currentHandedness == Handedness.None) + { + if (description == "Grip Press" || + description == "Trigger Position" || + description == "Trigger Touched" || + description == "Touchpad Position" || + description == "Touchpad Touch" || + description == "Touchpad Press" || + description == "Menu Press" || + description == "Thumbstick Position" || + description == "Thumbstick Press" + ) + { + skip = true; + } + + if (description == "Trigger Press (Select)") + { + description = "Air Tap (Select)"; + } + } + + if (!skip) + { + actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, labels, ids, GUILayout.Width(80f)); + EditorGUILayout.LabelField(description, GUILayout.ExpandWidth(true)); + } + } + else + { + var rectPosition = currentControllerOption.InputLabelPositions[i]; + var rectSize = InputActionLabelPosition + InputActionDropdownPosition + new Vector2(currentControllerOption.IsLabelFlipped[i] ? 0f : 8f, EditorGUIUtility.singleLineHeight); + GUI.Box(new Rect(rectPosition, rectSize), GUIContent.none, EditorGUIUtility.isProSkin ? "ObjectPickerBackground" : "ObjectPickerResultsEven"); + var offset = currentControllerOption.IsLabelFlipped[i] ? InputActionLabelPosition : Vector2.zero; + var popupRect = new Rect(rectPosition + offset, new Vector2(InputActionDropdownPosition.x, EditorGUIUtility.singleLineHeight)); + + actionId.intValue = EditorGUI.IntPopup(popupRect, actionId.intValue, labels, ids); + offset = currentControllerOption.IsLabelFlipped[i] ? Vector2.zero : InputActionDropdownPosition; + var labelRect = new Rect(rectPosition + offset, new Vector2(InputActionLabelPosition.x, EditorGUIUtility.singleLineHeight)); + EditorGUI.LabelField(labelRect, interactionDescription.stringValue, currentControllerOption.IsLabelFlipped[i] ? flippedLabelStyle : EditorStyles.label); + + if (editInputActionPositions) + { + offset = currentControllerOption.IsLabelFlipped[i] ? InputActionLabelPosition + InputActionDropdownPosition + HorizontalSpace : InputActionFlipTogglePosition; + var toggleRect = new Rect(rectPosition + offset, new Vector2(-InputActionFlipTogglePosition.x, EditorGUIUtility.singleLineHeight)); + + EditorGUI.BeginChangeCheck(); + currentControllerOption.IsLabelFlipped[i] = EditorGUI.Toggle(toggleRect, currentControllerOption.IsLabelFlipped[i]); + + if (EditorGUI.EndChangeCheck()) + { + if (currentControllerOption.IsLabelFlipped[i]) + { + currentControllerOption.InputLabelPositions[i] -= InputActionLabelPosition; + } + else + { + currentControllerOption.InputLabelPositions[i] += InputActionLabelPosition; + } + } + + if (!isMouseInRects.Any(value => value) || isMouseInRects[i]) + { + if (Event.current.type == EventType.MouseDrag && labelRect.Contains(Event.current.mousePosition) && !isMouseInRects[i]) + { + isMouseInRects[i] = true; + mouseDragOffset = Event.current.mousePosition - currentControllerOption.InputLabelPositions[i]; + } + else if (Event.current.type == EventType.Repaint && isMouseInRects[i]) + { + currentControllerOption.InputLabelPositions[i] = Event.current.mousePosition - mouseDragOffset; + } + else if (Event.current.type == EventType.DragUpdated && isMouseInRects[i]) + { + currentControllerOption.InputLabelPositions[i] = Event.current.mousePosition - mouseDragOffset; + } + else if (Event.current.type == EventType.MouseUp && isMouseInRects[i]) + { + currentControllerOption.InputLabelPositions[i] = Event.current.mousePosition - mouseDragOffset; + mouseDragOffset = Vector2.zero; + isMouseInRects[i] = false; + } + } + } + } + + if (EditorGUI.EndChangeCheck()) + { + MixedRealityInputAction inputAction = actionId.intValue == 0 ? + MixedRealityInputAction.None : + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; + actionId.intValue = (int)inputAction.Id; + actionDescription.stringValue = inputAction.Description; + actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + interactionList.serializedObject.ApplyModifiedProperties(); + } + } + + EditorGUILayout.EndHorizontal(); + } + + if (useCustomInteractionMapping) + { + EditorGUILayout.EndScrollView(); + interactionList.serializedObject.ApplyModifiedProperties(); + } + + GUILayout.EndVertical(); + } + + private static void RenderAxisPopup(SerializedProperty axisCode, float customLabelWidth) + { + var axisId = -1; + + for (int j = 0; j < ControllerMappingLibrary.UnityInputManagerAxes.Length; j++) + { + if (ControllerMappingLibrary.UnityInputManagerAxes[j].Name == axisCode.stringValue) + { + axisId = j + 1; + break; + } + } + + EditorGUI.BeginChangeCheck(); + axisId = EditorGUILayout.IntPopup(GUIContent.none, axisId, axisLabels, null, GUILayout.Width(customLabelWidth)); + + if (EditorGUI.EndChangeCheck()) + { + if (axisId == 0) + { + axisCode.stringValue = string.Empty; + axisCode.serializedObject.ApplyModifiedProperties(); + } + else + { + for (int j = 0; j < ControllerMappingLibrary.UnityInputManagerAxes.Length; j++) + { + if (axisId - 1 == j) + { + axisCode.stringValue = ControllerMappingLibrary.UnityInputManagerAxes[j].Name; + axisCode.serializedObject.ApplyModifiedProperties(); + break; + } + } + } + } + } + } +} diff --git a/Inspectors/ControllerPopupWindow.cs.meta b/Inspectors/ControllerPopupWindow.cs.meta new file mode 100644 index 000000000..8f2ff2831 --- /dev/null +++ b/Inspectors/ControllerPopupWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a3b5c2c2929f402c8618eb444dc43fbb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Data.meta b/Inspectors/Data.meta new file mode 100644 index 000000000..70bfafa5e --- /dev/null +++ b/Inspectors/Data.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 422554d5c24b48fc810b1b0711953b1b +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Data/ControllerInputActionOption.cs b/Inspectors/Data/ControllerInputActionOption.cs new file mode 100644 index 000000000..4956d0bf3 --- /dev/null +++ b/Inspectors/Data/ControllerInputActionOption.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; + +namespace XRTK.Inspectors.Data +{ + /// + /// Used to aid in layout of Controller Input Actions. + /// + [Serializable] + public class ControllerInputActionOption + { + public SupportedControllerType Controller; + public Handedness Handedness; + public Vector2[] InputLabelPositions; + public bool[] IsLabelFlipped; + } +} \ No newline at end of file diff --git a/Inspectors/Data/ControllerInputActionOption.cs.meta b/Inspectors/Data/ControllerInputActionOption.cs.meta new file mode 100644 index 000000000..192fa0875 --- /dev/null +++ b/Inspectors/Data/ControllerInputActionOption.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f6361e43ba774b08b44cda355061d523 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Data/ControllerInputActionOptions.cs b/Inspectors/Data/ControllerInputActionOptions.cs new file mode 100644 index 000000000..55b85f2bd --- /dev/null +++ b/Inspectors/Data/ControllerInputActionOptions.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; + +namespace XRTK.Inspectors.Data +{ + /// + /// Used to aid in layout of Controller Input Actions. + /// + [Serializable] + public class ControllerInputActionOptions + { + public List Controllers; + } +} \ No newline at end of file diff --git a/Inspectors/Data/ControllerInputActionOptions.cs.meta b/Inspectors/Data/ControllerInputActionOptions.cs.meta new file mode 100644 index 000000000..1799363b5 --- /dev/null +++ b/Inspectors/Data/ControllerInputActionOptions.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9a7a917f0374496da8216b7ed3fac19d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Data/EditorWindowOptions.json b/Inspectors/Data/EditorWindowOptions.json new file mode 100644 index 000000000..88701f82d --- /dev/null +++ b/Inspectors/Data/EditorWindowOptions.json @@ -0,0 +1 @@ +{"Controllers":[{"Controller":6,"Handedness":2,"InputLabelPositions":[{"x":291.0,"y":22.0},{"x":382.0,"y":348.0},{"x":-48.0,"y":283.0},{"x":486.0,"y":144.0},{"x":-84.0,"y":158.0},{"x":-82.0,"y":136.0},{"x":484.0,"y":190.0},{"x":484.0,"y":231.0},{"x":484.0,"y":211.0},{"x":-70.0,"y":241.0},{"x":-77.0,"y":191.0},{"x":-78.0,"y":211.0}],"IsLabelFlipped":[false,false,true,false,true,true,false,false,false,true,true,true]},{"Controller":6,"Handedness":1,"InputLabelPositions":[{"x":121.0,"y":21.0},{"x":404.0,"y":355.0},{"x":469.0,"y":283.0},{"x":-67.0,"y":145.0},{"x":500.0,"y":158.0},{"x":501.0,"y":137.0},{"x":-68.0,"y":182.0},{"x":-69.0,"y":205.0},{"x":-69.0,"y":226.0},{"x":488.0,"y":238.0},{"x":499.0,"y":190.0},{"x":499.0,"y":211.0}],"IsLabelFlipped":[true,false,false,true,false,false,true,true,true,false,false,false]},{"Controller":8,"Handedness":0,"InputLabelPositions":[{"x":15.0,"y":398.0},{"x":14.0,"y":419.0},{"x":418.0,"y":399.0},{"x":418.0,"y":420.0},{"x":-188.0,"y":338.0},{"x":298.0,"y":54.0},{"x":-132.0,"y":134.0},{"x":551.0,"y":126.0},{"x":14.0,"y":101.0},{"x":409.0,"y":101.0},{"x":-159.0,"y":182.0},{"x":577.0,"y":173.0},{"x":628.0,"y":310.0},{"x":622.0,"y":282.0},{"x":616.0,"y":253.0},{"x":607.0,"y":225.0}],"IsLabelFlipped":[true,true,false,false,true,false,true,false,true,false,true,false,false,false,false,false]},{"Controller":4,"Handedness":2,"InputLabelPositions":[{"x":-43.0,"y":165.0},{"x":5.0,"y":289.0},{"x":7.0,"y":330.0},{"x":8.0,"y":351.0},{"x":6.0,"y":309.0},{"x":436.0,"y":272.0},{"x":267.0,"y":30.0},{"x":267.0,"y":68.0},{"x":268.0,"y":88.0},{"x":267.0,"y":49.0},{"x":418.0,"y":163.0},{"x":-43.0,"y":204.0},{"x":418.0,"y":182.0},{"x":-42.0,"y":184.0},{"x":420.0,"y":202.0},{"x":419.0,"y":222.0}],"IsLabelFlipped":[true,true,true,true,true,false,false,false,false,false,false,true,false,true,false,false]},{"Controller":4,"Handedness":1,"InputLabelPositions":[{"x":482.0,"y":158.0},{"x":433.0,"y":295.0},{"x":433.0,"y":334.0},{"x":433.0,"y":355.0},{"x":433.0,"y":315.0},{"x":-14.0,"y":268.0},{"x":171.0,"y":28.0},{"x":171.0,"y":67.0},{"x":171.0,"y":87.0},{"x":172.0,"y":47.0},{"x":15.0,"y":168.0},{"x":480.0,"y":179.0},{"x":16.0,"y":141.0},{"x":15.0,"y":188.0},{"x":479.0,"y":198.0},{"x":15.0,"y":207.0},{"x":14.0,"y":225.0}],"IsLabelFlipped":[false,false,false,false,false,true,true,true,true,true,true,false,true,true,false,true,true]},{"Controller":2,"Handedness":1,"InputLabelPositions":[{"x":198.0,"y":49.0},{"x":545.0,"y":215.0},{"x":543.0,"y":233.0},{"x":543.0,"y":251.0},{"x":542.0,"y":298.0},{"x":-131.0,"y":216.0},{"x":-131.0,"y":256.0},{"x":-131.0,"y":235.0},{"x":-125.0,"y":173.0}],"IsLabelFlipped":[false,false,false,false,false,true,true,true,true]},{"Controller":2,"Handedness":2,"InputLabelPositions":[{"x":418.0,"y":43.0},{"x":-118.0,"y":208.0},{"x":-117.0,"y":228.0},{"x":-117.0,"y":248.0},{"x":-117.0,"y":285.0},{"x":563.0,"y":212.0},{"x":565.0,"y":252.0},{"x":563.0,"y":232.0},{"x":568.0,"y":168.0}],"IsLabelFlipped":[false,true,true,true,true,false,false,false,false]},{"Controller":5,"Handedness":0,"InputLabelPositions":[{"x":301.0,"y":63.0},{"x":-64.0,"y":147.0},{"x":490.0,"y":226.0}],"IsLabelFlipped":[false,true,false]},{"Controller":11,"Handedness":1,"InputLabelPositions":[{"x":-94.0,"y":306.0},{"x":315.0,"y":437.0},{"x":316.0,"y":460.0},{"x":314.0,"y":414.0},{"x":-108.0,"y":372.0},{"x":-16.0,"y":124.0},{"x":-58.0,"y":195.0},{"x":-59.0,"y":218.0}],"IsLabelFlipped":[true,false,false,false,true,true,true,true]},{"Controller":11,"Handedness":2,"InputLabelPositions":[{"x":538.0,"y":299.0},{"x":114.0,"y":438.0},{"x":113.0,"y":463.0},{"x":115.0,"y":415.0},{"x":536.0,"y":370.0},{"x":442.0,"y":128.0},{"x":496.0,"y":194.0},{"x":497.0,"y":217.0}],"IsLabelFlipped":[false,true,true,true,false,false,false,false]}]} \ No newline at end of file diff --git a/Inspectors/Data/EditorWindowOptions.json.meta b/Inspectors/Data/EditorWindowOptions.json.meta new file mode 100644 index 000000000..c980ce8dd --- /dev/null +++ b/Inspectors/Data/EditorWindowOptions.json.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: cd3211901ed84a74a3e09a7538e3f67f +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/EditorHandsShaderGUI.cs b/Inspectors/EditorHandsShaderGUI.cs new file mode 100644 index 000000000..afd09b8ae --- /dev/null +++ b/Inspectors/EditorHandsShaderGUI.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; + +namespace XRTK.Inspectors +{ + public class EditorHandsShaderGUI : ShaderGUI + { + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] properties) + { + foreach (MaterialProperty materialProperty in properties) + { + if (materialProperty.flags != MaterialProperty.PropFlags.PerRendererData) + { + materialEditor.ShaderProperty(materialProperty, materialProperty.displayName); + } + } + } + } +} \ No newline at end of file diff --git a/Inspectors/EditorHandsShaderGUI.cs.meta b/Inspectors/EditorHandsShaderGUI.cs.meta new file mode 100644 index 000000000..cb02753ae --- /dev/null +++ b/Inspectors/EditorHandsShaderGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc1ae324e5694697b2d40fd2d065f544 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/MixedRealityPreferences.cs b/Inspectors/MixedRealityPreferences.cs new file mode 100644 index 000000000..b529df35d --- /dev/null +++ b/Inspectors/MixedRealityPreferences.cs @@ -0,0 +1,393 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; +using XRTK.Extensions.EditorClassExtensions; +using XRTK.Inspectors.Utilities.SymbolicLinks; +using XRTK.Utilities.Editor; + +namespace XRTK.Inspectors +{ + public static class MixedRealityPreferences + { + private static readonly string[] XRTK_Keywords = { "XRTK", "Mixed", "Reality" }; + + #region Lock Profile Preferences + + private static readonly GUIContent LockContent = new GUIContent("Lock SDK profiles", "Locks the SDK profiles from being edited.\n\nThis setting only applies to the currently running project."); + private const string LOCK_KEY = "LockProfiles"; + private static bool lockPrefLoaded; + private static bool lockProfiles; + + /// + /// Should the default profile inspectors be disabled to prevent editing? + /// + public static bool LockProfiles + { + get + { + if (!lockPrefLoaded) + { + lockProfiles = EditorPreferences.Get(LOCK_KEY, true); + lockPrefLoaded = true; + } + + return lockProfiles; + } + set => EditorPreferences.Set(LOCK_KEY, lockProfiles = value); + } + + #endregion Lock Profile Preferences + + #region Ignore startup settings prompt + + private static readonly GUIContent IgnoreContent = new GUIContent("Ignore settings prompt on startup", "Prevents settings dialog popup from showing on startup.\n\nThis setting applies to all projects using XRTK."); + private const string IGNORE_KEY = "_MixedRealityToolkit_Editor_IgnoreSettingsPrompts"; + private static bool ignorePrefLoaded; + private static bool ignoreSettingsPrompt; + + /// + /// Should the settings prompt show on startup? + /// + public static bool IgnoreSettingsPrompt + { + get + { + if (!ignorePrefLoaded) + { + ignoreSettingsPrompt = EditorPrefs.GetBool(IGNORE_KEY, false); + ignorePrefLoaded = true; + } + + return ignoreSettingsPrompt; + } + set => EditorPrefs.SetBool(IGNORE_KEY, ignoreSettingsPrompt = value); + } + + #endregion Ignore startup settings prompt + + #region Show Canvas Utility Prompt + + private static readonly GUIContent CanvasUtilityContent = new GUIContent("Canvas world space utility dialogs", "Enable or disable the dialog popups for the world space canvas settings.\n\nThis setting only applies to the currently running project."); + private const string CANVAS_KEY = "EnableCanvasUtilityDialog"; + private static bool isCanvasUtilityPrefLoaded; + private static bool showCanvasUtilityPrompt; + + /// + /// Should the utility dialog show when updating the settings on that component? + /// + public static bool ShowCanvasUtilityPrompt + { + get + { + if (!isCanvasUtilityPrefLoaded) + { + showCanvasUtilityPrompt = EditorPreferences.Get(CANVAS_KEY, true); + isCanvasUtilityPrefLoaded = true; + } + + return showCanvasUtilityPrompt; + } + set => EditorPreferences.Set(CANVAS_KEY, showCanvasUtilityPrompt = value); + } + + #endregion Show Canvas Utility Prompt + + #region Start Scene Preference + + private static readonly GUIContent StartSceneContent = new GUIContent("Start Scene", "When pressing play in the editor, a prompt will ask you if you want to switch to this start scene.\n\nThis setting only applies to the currently running project."); + private const string START_SCENE_KEY = "StartScene"; + private static SceneAsset sceneAsset; + private static bool isStartScenePrefLoaded; + + public static SceneAsset StartSceneAsset + { + get + { + if (!isStartScenePrefLoaded) + { + var scenePath = EditorPreferences.Get(START_SCENE_KEY, string.Empty); + sceneAsset = GetSceneObject(scenePath); + isStartScenePrefLoaded = true; + } + + return sceneAsset; + } + set + { + sceneAsset = value != null ? GetSceneObject(value) : null; + var scenePath = value != null ? AssetDatabase.GetAssetOrScenePath(value) : string.Empty; + EditorPreferences.Set(START_SCENE_KEY, scenePath); + } + } + + #endregion Start Scene Preference + + #region Symbolic Link Preferences + + private static bool isSymbolicLinkSettingsPathLoaded; + private static string symbolicLinkSettingsPath = string.Empty; + + public static string SymbolicLinkSettingsPath + { + get + { + if (!isSymbolicLinkSettingsPathLoaded) + { + symbolicLinkSettingsPath = EditorPreferences.Get("_SymbolicLinkSettingsPath", string.Empty); + isSymbolicLinkSettingsPathLoaded = true; + } + + if (string.IsNullOrEmpty(symbolicLinkSettingsPath)) + { + symbolicLinkSettingsPath = AssetDatabase + .FindAssets($"t:{typeof(SymbolicLinkSettings).Name}") + .Select(AssetDatabase.GUIDToAssetPath) + .OrderBy(x => x) + .FirstOrDefault(); + } + + if (Application.isBatchMode) + { + Debug.Log(symbolicLinkSettingsPath); + } + + return symbolicLinkSettingsPath; + } + set => EditorPreferences.Set("_SymbolicLinkSettingsPath", symbolicLinkSettingsPath = value); + } + + private static bool isAutoLoadSymbolicLinksLoaded; + private static bool autoLoadSymbolicLinks = true; + + public static bool AutoLoadSymbolicLinks + { + get + { + if (!isAutoLoadSymbolicLinksLoaded) + { + autoLoadSymbolicLinks = EditorPreferences.Get("_AutoLoadSymbolicLinks", true); + isAutoLoadSymbolicLinksLoaded = true; + } + + return autoLoadSymbolicLinks; + } + set + { + EditorPreferences.Set("_AutoLoadSymbolicLinks", autoLoadSymbolicLinks = value); + + if (autoLoadSymbolicLinks && SymbolicLinker.Settings == null) + { + var profile = ScriptableObject.CreateInstance(nameof(SymbolicLinkSettings)); + profile.CreateAsset("Assets/XRTK.Generated/CustomProfiles"); + } + } + } + + #endregion Symbolic Link Preferences + + #region Debug Packages + + private static readonly GUIContent DebugUpmContent = new GUIContent("Debug package loading", "Enable or disable the debug information for package loading.\n\nThis setting only applies to the currently running project."); + private const string PACKAGE_DEBUG_KEY = "EnablePackageDebug"; + private static bool isPackageDebugPrefLoaded; + private static bool debugPackageInfo; + + /// + /// Enabled debugging info for the xrtk upm packages. + /// + public static bool DebugPackageInfo + { + get + { + if (!isPackageDebugPrefLoaded) + { + debugPackageInfo = EditorPreferences.Get(PACKAGE_DEBUG_KEY, Application.isBatchMode); + isPackageDebugPrefLoaded = true; + } + + return debugPackageInfo; + } + set => EditorPreferences.Set(PACKAGE_DEBUG_KEY, debugPackageInfo = value); + } + + #endregion Debug Packages + + [SettingsProvider] + private static SettingsProvider Preferences() + { + return new SettingsProvider("Preferences/XRTK", SettingsScope.User, XRTK_Keywords) + { + label = "XRTK", + guiHandler = OnPreferencesGui, + keywords = new HashSet(XRTK_Keywords) + }; + } + + private static void OnPreferencesGui(string searchContext) + { + var prevLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 200f; + + EditorGUI.BeginChangeCheck(); + lockProfiles = EditorGUILayout.Toggle(LockContent, LockProfiles); + + // Save the preference + if (EditorGUI.EndChangeCheck()) + { + LockProfiles = lockProfiles; + } + + if (!LockProfiles) + { + EditorGUILayout.HelpBox("This is only to be used to update the default SDK profiles. If any edits are made, and not checked into the XRTK's Github, the changes may be lost next time you update your local copy.", MessageType.Warning); + } + + EditorGUI.BeginChangeCheck(); + ignoreSettingsPrompt = EditorGUILayout.Toggle(IgnoreContent, IgnoreSettingsPrompt); + + // Save the preference + if (EditorGUI.EndChangeCheck()) + { + IgnoreSettingsPrompt = ignoreSettingsPrompt; + } + + EditorGUI.BeginChangeCheck(); + showCanvasUtilityPrompt = EditorGUILayout.Toggle(CanvasUtilityContent, ShowCanvasUtilityPrompt); + + if (EditorGUI.EndChangeCheck()) + { + ShowCanvasUtilityPrompt = showCanvasUtilityPrompt; + } + + if (!ShowCanvasUtilityPrompt) + { + EditorGUILayout.HelpBox("Be aware that if a Canvas needs to receive input events it is required to have the CanvasUtility attached or the Focus Provider's UIRaycast Camera assigned to the canvas' camera reference.", MessageType.Warning); + } + + EditorGUI.BeginChangeCheck(); + var startScene = (SceneAsset)EditorGUILayout.ObjectField(StartSceneContent, StartSceneAsset, typeof(SceneAsset), true); + + if (EditorGUI.EndChangeCheck()) + { + StartSceneAsset = startScene; + } + + EditorGUI.BeginChangeCheck(); + var scriptLock = EditorGUILayout.Toggle("Is Script Reloading locked?", EditorAssemblyReloadManager.LockReloadAssemblies); + + if (EditorGUI.EndChangeCheck()) + { + EditorAssemblyReloadManager.LockReloadAssemblies = scriptLock; + } + + EditorGUI.BeginChangeCheck(); + autoLoadSymbolicLinks = EditorGUILayout.Toggle("Auto Load Symbolic Links", AutoLoadSymbolicLinks); + + if (EditorGUI.EndChangeCheck()) + { + AutoLoadSymbolicLinks = autoLoadSymbolicLinks; + + if (AutoLoadSymbolicLinks) + { + EditorApplication.delayCall += () => SymbolicLinker.RunSync(); + } + } + + EditorGUI.BeginChangeCheck(); + var symbolicLinkSettings = EditorGUILayout.ObjectField("Symbolic Link Settings", SymbolicLinker.Settings, typeof(SymbolicLinkSettings), false) as SymbolicLinkSettings; + + if (EditorGUI.EndChangeCheck()) + { + if (symbolicLinkSettings != null) + { + var shouldSync = string.IsNullOrEmpty(SymbolicLinkSettingsPath); + SymbolicLinkSettingsPath = AssetDatabase.GetAssetPath(symbolicLinkSettings); + SymbolicLinker.Settings = AssetDatabase.LoadAssetAtPath(SymbolicLinkSettingsPath); + + if (shouldSync) + { + EditorApplication.delayCall += () => SymbolicLinker.RunSync(); + } + } + else + { + SymbolicLinkSettingsPath = string.Empty; + SymbolicLinker.Settings = null; + } + } + + EditorGUI.BeginChangeCheck(); + debugPackageInfo = EditorGUILayout.Toggle(DebugUpmContent, DebugPackageInfo); + + if (EditorGUI.EndChangeCheck()) + { + DebugPackageInfo = debugPackageInfo; + } + + EditorGUIUtility.labelWidth = prevLabelWidth; + } + + private static SceneAsset GetSceneObject(SceneAsset asset) + { + return GetSceneObject(asset.name, asset); + } + + private static SceneAsset GetSceneObject(string sceneName, SceneAsset asset = null) + { + if (string.IsNullOrEmpty(sceneName)) + { + return null; + } + + EditorBuildSettingsScene editorScene = null; + + try + { + editorScene = EditorBuildSettings.scenes.First(scene => scene.path.IndexOf(sceneName, StringComparison.Ordinal) != -1); + } + catch + { + // ignored + } + + if (editorScene != null) + { + asset = AssetDatabase.LoadAssetAtPath(editorScene.path, typeof(SceneAsset)) as SceneAsset; + } + + if (asset == null) + { + return null; + } + + AssetDatabase.TryGetGUIDAndLocalFileIdentifier(asset, out var guid, out long _); + var sceneGuid = new GUID(guid); + + if (EditorBuildSettings.scenes.Length == 0 || + EditorBuildSettings.scenes[0].guid != sceneGuid) + { + editorScene = new EditorBuildSettingsScene(sceneGuid, true); + var scenes = EditorBuildSettings.scenes + .Where(scene => scene.guid != sceneGuid) + .Prepend(editorScene) + .ToArray(); + EditorBuildSettings.scenes = scenes; + Debug.Assert(EditorBuildSettings.scenes[0].guid == sceneGuid); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + + if (!EditorBuildSettings.scenes[0].enabled) + { + EditorBuildSettings.scenes[0].enabled = true; + } + + return asset; + } + } +} diff --git a/Inspectors/MixedRealityPreferences.cs.meta b/Inspectors/MixedRealityPreferences.cs.meta new file mode 100644 index 000000000..a04652f1f --- /dev/null +++ b/Inspectors/MixedRealityPreferences.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43b9fbbfb47c41579ecd667e244338f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/MixedRealityStandardShaderGUI.cs b/Inspectors/MixedRealityStandardShaderGUI.cs new file mode 100644 index 000000000..8944733b4 --- /dev/null +++ b/Inspectors/MixedRealityStandardShaderGUI.cs @@ -0,0 +1,991 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System; +using UnityEditor; +using UnityEngine; +using UnityEngine.Rendering; +using XRTK.Utilities; +using XRTK.Utilities.Rendering; +using Object = UnityEngine.Object; + +namespace XRTK.Inspectors +{ + /// + /// A custom shader inspector for the "Mixed Reality Toolkit/Standard" shader. + /// + public class MixedRealityStandardShaderGUI : ShaderGUI + { + protected enum RenderingMode + { + Opaque, + TransparentCutout, + Transparent, + PremultipliedTransparent, + Additive, + Custom + } + + protected enum CustomRenderingMode + { + Opaque, + TransparentCutout, + Transparent + } + + protected enum AlbedoAlphaMode + { + Transparency, + Metallic, + Smoothness + } + + protected enum DepthWrite + { + Off, + On + } + + protected static class Styles + { + public static string primaryMapsTitle = "Main Maps"; + public static string renderingOptionsTitle = "Rendering Options"; + public static string advancedOptionsTitle = "Advanced Options"; + public static string fluentOptionsTitle = "Fluent Options"; + public static string renderTypeName = "RenderType"; + public static string renderingModeName = "_Mode"; + public static string customRenderingModeName = "_CustomMode"; + public static string sourceBlendName = "_SrcBlend"; + public static string destinationBlendName = "_DstBlend"; + public static string blendOperationName = "_BlendOp"; + public static string depthTestName = "_ZTest"; + public static string depthWriteName = "_ZWrite"; + public static string colorWriteMaskName = "_ColorWriteMask"; + public static string instancedColorName = "_InstancedColor"; + public static string instancedColorFeatureName = "_INSTANCED_COLOR"; + public static string stencilComparisonName = "_StencilComparison"; + public static string stencilOperationName = "_StencilOperation"; + public static string alphaTestOnName = "_ALPHATEST_ON"; + public static string alphaBlendOnName = "_ALPHABLEND_ON"; + public static string disableAlbedoMapName = "_DISABLE_ALBEDO_MAP"; + public static string albedoMapAlphaMetallicName = "_METALLIC_TEXTURE_ALBEDO_CHANNEL_A"; + public static string albedoMapAlphaSmoothnessName = "_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A"; + public static string propertiesComponentHelp = "Use the {0} component to control {1} properties."; + public static readonly string[] renderingModeNames = Enum.GetNames(typeof(RenderingMode)); + public static readonly string[] customRenderingModeNames = Enum.GetNames(typeof(CustomRenderingMode)); + public static readonly string[] albedoAlphaModeNames = Enum.GetNames(typeof(AlbedoAlphaMode)); + public static readonly string[] depthWriteNames = Enum.GetNames(typeof(DepthWrite)); + public static GUIContent sourceBlend = new GUIContent("Source Blend", "Blend Mode of Newly Calculated Color"); + public static GUIContent destinationBlend = new GUIContent("Destination Blend", "Blend Mode of Existing Color"); + public static GUIContent blendOperation = new GUIContent("Blend Operation", "Operation for Blending New Color With Existing Color"); + public static GUIContent depthTest = new GUIContent("Depth Test", "How Should Depth Testing Be Performed."); + public static GUIContent depthWrite = new GUIContent("Depth Write", "Controls Whether Pixels From This Object Are Written to the Depth Buffer"); + public static GUIContent colorWriteMask = new GUIContent("Color Write Mask", "Color Channel Writing Mask"); + public static GUIContent instancedColor = new GUIContent("Instanced Color", "Enable a Unique Color Per Instance"); + public static GUIContent cullMode = new GUIContent("Cull Mode", "Triangle Culling Mode"); + public static GUIContent renderQueueOverride = new GUIContent("Render Queue Override", "Manually Override the Render Queue"); + public static GUIContent albedo = new GUIContent("Albedo", "Albedo (RGB) and Transparency (Alpha)"); + public static GUIContent albedoAssignedAtRuntime = new GUIContent("Albedo Assigned at Runtime", "As an optimization albedo operations are disabled when no albedo texture is specified. If a albedo texture will be specified at runtime enable this option."); + public static GUIContent alphaCutoff = new GUIContent("Alpha Cutoff", "Threshold for Alpha Cutoff"); + public static GUIContent metallic = new GUIContent("Metallic", "Metallic Value"); + public static GUIContent smoothness = new GUIContent("Smoothness", "Smoothness Value"); + public static GUIContent enableChannelMap = new GUIContent("Channel Map", "Enable Channel Map, a Channel Packing Texture That Follows Unity's Standard Channel Setup"); + public static GUIContent channelMap = new GUIContent("Channel Map", "Metallic (Red), Occlusion (Green), Emission (Blue), Smoothness (Alpha)"); + public static GUIContent enableNormalMap = new GUIContent("Normal Map", "Enable Normal Map"); + public static GUIContent normalMap = new GUIContent("Normal Map"); + public static GUIContent normalMapScale = new GUIContent("Scale", "Scales the Normal Map Normal"); + public static GUIContent enableEmission = new GUIContent("Emission", "Enable Emission"); + public static GUIContent emissiveColor = new GUIContent("Color"); + public static GUIContent enableTriplanarMapping = new GUIContent("Triplanar Mapping", "Enable Triplanar Mapping, a technique which programmatically generates UV coordinates"); + public static GUIContent enableLocalSpaceTriplanarMapping = new GUIContent("Local Space", "If True Triplanar Mapping is Calculated in Local Space"); + public static GUIContent triplanarMappingBlendSharpness = new GUIContent("Blend Sharpness", "The Power of the Blend with the Normal"); + public static GUIContent directionalLight = new GUIContent("Directional Light", "Affected by One Unity Directional Light"); + public static GUIContent specularHighlights = new GUIContent("Specular Highlights", "Calculate Specular Highlights"); + public static GUIContent sphericalHarmonics = new GUIContent("Spherical Harmonics", "Read From Spherical Harmonics Data for Ambient Light"); + public static GUIContent reflections = new GUIContent("Reflections", "Calculate Glossy Reflections"); + public static GUIContent refraction = new GUIContent("Refraction", "Calculate Refraction"); + public static GUIContent refractiveIndex = new GUIContent("Refractive Index", "Ratio of Indices of Refraction at the Surface Interface"); + public static GUIContent rimLight = new GUIContent("Rim Light", "Enable Rim (Fresnel) Lighting"); + public static GUIContent rimColor = new GUIContent("Color", "Rim Highlight Color"); + public static GUIContent rimPower = new GUIContent("Power", "Rim Highlight Saturation"); + public static GUIContent vertexColors = new GUIContent("Vertex Colors", "Enable Vertex Color Tinting"); + public static GUIContent clippingPlane = new GUIContent("Clipping Plane", "Enable Clipping Against a Plane"); + public static GUIContent clippingSphere = new GUIContent("Clipping Sphere", "Enable Clipping Against a Sphere"); + public static GUIContent clippingBox = new GUIContent("Clipping Box", "Enable Clipping Against a Box"); + public static GUIContent clippingBorder = new GUIContent("Clipping Border", "Enable a Border Along the Clipping Primitive's Edge"); + public static GUIContent clippingBorderWidth = new GUIContent("Width", "Width of the Clipping Border"); + public static GUIContent clippingBorderColor = new GUIContent("Color", "Interpolated Color of the Clipping Border"); + public static GUIContent nearPlaneFade = new GUIContent("Near Plane Fade", "Objects Disappear (Turn to Black/Transparent) as the Camera Nears Them"); + public static GUIContent fadeBeginDistance = new GUIContent("Fade Begin", "Distance From Camera to Begin Fade In"); + public static GUIContent fadeCompleteDistance = new GUIContent("Fade Complete", "Distance From Camera When Fade is Fully In"); + public static GUIContent hoverLight = new GUIContent("Hover Light", "Enable utilization of Hover Light(s)"); + public static GUIContent enableHoverColorOverride = new GUIContent("Override Color", "Override Global Hover Light Color"); + public static GUIContent hoverLightOpaque = new GUIContent("Hover Light Opaque", "Enable Hover Light on Transparent Pixels"); + public static GUIContent enableHoverColorOpaqueOverride = new GUIContent("Override Color", "Override Opaque Hover Light Color"); + public static GUIContent hoverColorOpaqueOverride = new GUIContent("Color", "Override Hover Color for Transparent Pixels"); + public static GUIContent hoverColorOverride = new GUIContent("Color", "Override Hover Light Color"); + public static GUIContent roundCorners = new GUIContent("Round Corners", "(Assumes UVs Specify Borders of Surface, Works Best on Unity Cube, Quad, and Plane)"); + public static GUIContent roundCornerRadius = new GUIContent("Unit Radius", "Rounded Rectangle Corner Unit Sphere Radius"); + public static GUIContent roundCornerMargin = new GUIContent("Margin %", "Distance From Geometry Edge"); + public static GUIContent borderLight = new GUIContent("Border Light", "Enable Border Lighting (Assumes UVs Specify Borders of Surface, Works Best on Unity Cube, Quad, and Plane)"); + public static GUIContent borderLightUsesHoverColor = new GUIContent("Use Hover Color", "Border Color Comes From Hover Light Color"); + public static GUIContent borderLightOpaque = new GUIContent("Opaque Borders", "Borders Override Alpha Value to Appear Opaque"); + public static GUIContent borderWidth = new GUIContent("Width %", "Uniform Width Along Border as a % of the Smallest XYZ Dimension"); + public static GUIContent borderMinValue = new GUIContent("Min Value", "Minimum Border Saturation"); + public static GUIContent edgeSmoothingValue = new GUIContent("Edge Smoothing Value", "Smooths Edges When Round Corners and Transparency Is Enabled"); + public static GUIContent innerGlow = new GUIContent("Inner Glow", "Enable Inner Glow (Assumes UVs Specify Borders of Surface, Works Best on Unity Cube, Quad, and Plane)"); + public static GUIContent innerGlowColor = new GUIContent("Color", "Inner Glow Color (RGB) and Intensity (A)"); + public static GUIContent environmentColoring = new GUIContent("Environment Coloring", "Change Color Based on View"); + public static GUIContent environmentColorThreshold = new GUIContent("Threshold", "Threshold When Environment Coloring Should Appear Based on Surface Normal"); + public static GUIContent environmentColorIntensity = new GUIContent("Intensity", "Intensity (or Brightness) of the Environment Coloring"); + public static GUIContent environmentColorX = new GUIContent("X-Axis Color", "Color Along the World Space X-Axis"); + public static GUIContent environmentColorY = new GUIContent("Y-Axis Color", "Color Along the World Space Y-Axis"); + public static GUIContent environmentColorZ = new GUIContent("Z-Axis Color", "Color Along the World Space Z-Axis"); + public static GUIContent stencil = new GUIContent("Enable Stencil Testing", "Enabled Stencil Testing Operations"); + public static GUIContent stencilReference = new GUIContent("Stencil Reference", "Value to Compared Against (if Comparison is Anything but Always) and/or the Value to be Written to the Buffer (if Either Pass, Fail or ZFail is Set to Replace)"); + public static GUIContent stencilComparison = new GUIContent("Stencil Comparison", "Function to Compare the Reference Value to"); + public static GUIContent stencilOperation = new GUIContent("Stencil Operation", "What to do When the Stencil Test Passes"); + } + + private static readonly int BumpMap = Shader.PropertyToID("_BumpMap"); + private static readonly int NormalMap = Shader.PropertyToID("_NormalMap"); + + protected bool initialized; + + protected MaterialProperty renderingMode; + protected MaterialProperty customRenderingMode; + protected MaterialProperty sourceBlend; + protected MaterialProperty destinationBlend; + protected MaterialProperty blendOperation; + protected MaterialProperty depthTest; + protected MaterialProperty depthWrite; + protected MaterialProperty colorWriteMask; + protected MaterialProperty instancedColor; + protected MaterialProperty cullMode; + protected MaterialProperty renderQueueOverride; + protected MaterialProperty albedoMap; + protected MaterialProperty albedoColor; + protected MaterialProperty albedoAlphaMode; + protected MaterialProperty albedoAssignedAtRuntime; + protected MaterialProperty alphaCutoff; + protected MaterialProperty enableChannelMap; + protected MaterialProperty channelMap; + protected MaterialProperty enableNormalMap; + protected MaterialProperty normalMap; + protected MaterialProperty normalMapScale; + protected MaterialProperty enableEmission; + protected MaterialProperty emissiveColor; + protected MaterialProperty enableTriplanarMapping; + protected MaterialProperty enableLocalSpaceTriplanarMapping; + protected MaterialProperty triplanarMappingBlendSharpness; + protected MaterialProperty metallic; + protected MaterialProperty smoothness; + protected MaterialProperty directionalLight; + protected MaterialProperty specularHighlights; + protected MaterialProperty sphericalHarmonics; + protected MaterialProperty reflections; + protected MaterialProperty refraction; + protected MaterialProperty refractiveIndex; + protected MaterialProperty rimLight; + protected MaterialProperty rimColor; + protected MaterialProperty rimPower; + protected MaterialProperty vertexColors; + protected MaterialProperty clippingPlane; + protected MaterialProperty clippingSphere; + protected MaterialProperty clippingBox; + protected MaterialProperty clippingBorder; + protected MaterialProperty clippingBorderWidth; + protected MaterialProperty clippingBorderColor; + protected MaterialProperty nearPlaneFade; + protected MaterialProperty fadeBeginDistance; + protected MaterialProperty fadeCompleteDistance; + protected MaterialProperty hoverLight; + protected MaterialProperty enableHoverColorOverride; + protected MaterialProperty hoverLightOpaque; + protected MaterialProperty enableHoverColorOpaqueOverride; + protected MaterialProperty hoverColorOverrideOpaque; + protected MaterialProperty hoverColorOverride; + protected MaterialProperty roundCorners; + protected MaterialProperty roundCornerRadius; + protected MaterialProperty roundCornerMargin; + protected MaterialProperty borderLight; + protected MaterialProperty borderLightUsesHoverColor; + protected MaterialProperty borderLightOpaque; + protected MaterialProperty borderWidth; + protected MaterialProperty borderMinValue; + protected MaterialProperty edgeSmoothingValue; + protected MaterialProperty innerGlow; + protected MaterialProperty innerGlowColor; + protected MaterialProperty environmentColoring; + protected MaterialProperty environmentColorThreshold; + protected MaterialProperty environmentColorIntensity; + protected MaterialProperty environmentColorX; + protected MaterialProperty environmentColorY; + protected MaterialProperty environmentColorZ; + protected MaterialProperty stencil; + protected MaterialProperty stencilReference; + protected MaterialProperty stencilComparison; + protected MaterialProperty stencilOperation; + + protected void FindProperties(MaterialProperty[] props) + { + renderingMode = FindProperty(Styles.renderingModeName, props); + customRenderingMode = FindProperty(Styles.customRenderingModeName, props); + sourceBlend = FindProperty(Styles.sourceBlendName, props); + destinationBlend = FindProperty(Styles.destinationBlendName, props); + blendOperation = FindProperty(Styles.blendOperationName, props); + depthTest = FindProperty(Styles.depthTestName, props); + depthWrite = FindProperty(Styles.depthWriteName, props); + colorWriteMask = FindProperty(Styles.colorWriteMaskName, props); + instancedColor = FindProperty(Styles.instancedColorName, props); + cullMode = FindProperty("_CullMode", props); + renderQueueOverride = FindProperty("_RenderQueueOverride", props); + albedoMap = FindProperty("_MainTex", props); + albedoColor = FindProperty("_Color", props); + albedoAlphaMode = FindProperty("_AlbedoAlphaMode", props); + albedoAssignedAtRuntime = FindProperty("_AlbedoAssignedAtRuntime", props); + alphaCutoff = FindProperty("_Cutoff", props); + metallic = FindProperty("_Metallic", props); + smoothness = FindProperty("_Smoothness", props); + enableChannelMap = FindProperty("_EnableChannelMap", props); + channelMap = FindProperty("_ChannelMap", props); + enableNormalMap = FindProperty("_EnableNormalMap", props); + normalMap = FindProperty("_NormalMap", props); + normalMapScale = FindProperty("_NormalMapScale", props); + enableEmission = FindProperty("_EnableEmission", props); + emissiveColor = FindProperty("_EmissiveColor", props); + enableTriplanarMapping = FindProperty("_EnableTriplanarMapping", props); + enableLocalSpaceTriplanarMapping = FindProperty("_EnableLocalSpaceTriplanarMapping", props); + triplanarMappingBlendSharpness = FindProperty("_TriplanarMappingBlendSharpness", props); + directionalLight = FindProperty("_DirectionalLight", props); + specularHighlights = FindProperty("_SpecularHighlights", props); + sphericalHarmonics = FindProperty("_SphericalHarmonics", props); + reflections = FindProperty("_Reflections", props); + refraction = FindProperty("_Refraction", props); + refractiveIndex = FindProperty("_RefractiveIndex", props); + rimLight = FindProperty("_RimLight", props); + rimColor = FindProperty("_RimColor", props); + rimPower = FindProperty("_RimPower", props); + vertexColors = FindProperty("_VertexColors", props); + clippingPlane = FindProperty("_ClippingPlane", props); + clippingSphere = FindProperty("_ClippingSphere", props); + clippingBox = FindProperty("_ClippingBox", props); + clippingBorder = FindProperty("_ClippingBorder", props); + clippingBorderWidth = FindProperty("_ClippingBorderWidth", props); + clippingBorderColor = FindProperty("_ClippingBorderColor", props); + nearPlaneFade = FindProperty("_NearPlaneFade", props); + fadeBeginDistance = FindProperty("_FadeBeginDistance", props); + fadeCompleteDistance = FindProperty("_FadeCompleteDistance", props); + hoverLight = FindProperty("_HoverLight", props); + enableHoverColorOverride = FindProperty("_EnableHoverColorOverride", props); + hoverColorOverride = FindProperty("_HoverColorOverride", props); + hoverLightOpaque = FindProperty("_HoverLightOpaque", props); + enableHoverColorOpaqueOverride = FindProperty("_EnableHoverColorOpaqueOverride", props); + hoverColorOverrideOpaque = FindProperty("_HoverColorOpaqueOverride", props); + roundCorners = FindProperty("_RoundCorners", props); + roundCornerRadius = FindProperty("_RoundCornerRadius", props); + roundCornerMargin = FindProperty("_RoundCornerMargin", props); + borderLight = FindProperty("_BorderLight", props); + borderLightUsesHoverColor = FindProperty("_BorderLightUsesHoverColor", props); + borderLightOpaque = FindProperty("_BorderLightOpaque", props); + borderWidth = FindProperty("_BorderWidth", props); + borderMinValue = FindProperty("_BorderMinValue", props); + edgeSmoothingValue = FindProperty("_EdgeSmoothingValue", props); + innerGlow = FindProperty("_InnerGlow", props); + innerGlowColor = FindProperty("_InnerGlowColor", props); + environmentColoring = FindProperty("_EnvironmentColoring", props); + environmentColorThreshold = FindProperty("_EnvironmentColorThreshold", props); + environmentColorIntensity = FindProperty("_EnvironmentColorIntensity", props); + environmentColorX = FindProperty("_EnvironmentColorX", props); + environmentColorY = FindProperty("_EnvironmentColorY", props); + environmentColorZ = FindProperty("_EnvironmentColorZ", props); + stencil = FindProperty("_Stencil", props); + stencilReference = FindProperty("_StencilReference", props); + stencilComparison = FindProperty(Styles.stencilComparisonName, props); + stencilOperation = FindProperty(Styles.stencilOperationName, props); + } + + public override void OnGUI(MaterialEditor materialEditor, MaterialProperty[] props) + { + Material material = (Material)materialEditor.target; + + FindProperties(props); + Initialize(material); + + RenderingModeOptions(materialEditor); + MainMapOptions(materialEditor, material); + RenderingOptions(materialEditor, material); + FluentOptions(materialEditor, material); + AdvancedOptions(materialEditor, material); + } + + public override void AssignNewShaderToMaterial(Material material, Shader oldShader, Shader newShader) + { + // Cache old shader properties with potentially different names than the new shader. + float? _smoothness = GetFloatProperty(material, "_Glossiness"); + float? diffuse = GetFloatProperty(material, "_UseDiffuse"); + float? _specularHighlights = GetFloatProperty(material, "_SpecularHighlights"); + float? _normalMap = null; + Texture normalMapTexture = material.GetTexture(BumpMap); + float? _normalMapScale = GetFloatProperty(material, "_BumpScale"); + float? emission = null; + Color? emissionColor = GetColorProperty(material, "_EmissionColor"); + float? _reflections = null; + float? rimLighting = null; + Vector4? textureScaleOffset = null; + float? _cullMode = GetFloatProperty(material, "_Cull"); + + if (oldShader) + { + if (oldShader.name.Contains("Standard")) + { + _normalMap = material.IsKeywordEnabled("_NORMALMAP") ? 1.0f : 0.0f; + emission = material.IsKeywordEnabled("_EMISSION") ? 1.0f : 0.0f; + _reflections = GetFloatProperty(material, "_GlossyReflections"); + } + else if (oldShader.name.Contains("Fast Configurable")) + { + _normalMap = material.IsKeywordEnabled("_USEBUMPMAP_ON") ? 1.0f : 0.0f; + emission = GetFloatProperty(material, "_UseEmissionColor"); + _reflections = GetFloatProperty(material, "_UseReflections"); + rimLighting = GetFloatProperty(material, "_UseRimLighting"); + textureScaleOffset = GetVectorProperty(material, "_TextureScaleOffset"); + } + } + + base.AssignNewShaderToMaterial(material, oldShader, newShader); + + // Apply old shader properties to the new shader. + SetFloatProperty(material, null, "_Smoothness", _smoothness); + SetFloatProperty(material, "_DIRECTIONAL_LIGHT", "_DirectionalLight", diffuse); + SetFloatProperty(material, "_SPECULAR_HIGHLIGHTS", "_SpecularHighlights", _specularHighlights); + SetFloatProperty(material, "_NORMAL_MAP", "_EnableNormalMap", _normalMap); + + if (normalMapTexture) + { + material.SetTexture(NormalMap, normalMapTexture); + } + + SetFloatProperty(material, null, "_NormalMapScale", _normalMapScale); + SetFloatProperty(material, "_EMISSION", "_EnableEmission", emission); + SetColorProperty(material, "_EmissiveColor", emissionColor); + SetFloatProperty(material, "_REFLECTIONS", "_Reflections", _reflections); + SetFloatProperty(material, "_RIM_LIGHT", "_RimLight", rimLighting); + SetVectorProperty(material, "_MainTex_ST", textureScaleOffset); + SetFloatProperty(material, null, "_CullMode", _cullMode); + + // Setup the rendering mode based on the old shader. + if (oldShader == null || !oldShader.name.Contains("Legacy Shaders/")) + { + SetupMaterialWithRenderingMode(material, (RenderingMode)material.GetFloat(Styles.renderingModeName), CustomRenderingMode.Opaque, -1); + } + else + { + RenderingMode mode = RenderingMode.Opaque; + + if (oldShader.name.Contains("/Transparent/Cutout/")) + { + mode = RenderingMode.TransparentCutout; + } + else if (oldShader.name.Contains("/Transparent/")) + { + mode = RenderingMode.Transparent; + } + + material.SetFloat(Styles.renderingModeName, (float)mode); + + MaterialChanged(material); + } + } + + protected void Initialize(Material material) + { + if (!initialized) + { + MaterialChanged(material); + initialized = true; + } + } + + protected void MaterialChanged(Material material) + { + SetupMaterialWithAlbedo(material, albedoMap, albedoAlphaMode, albedoAssignedAtRuntime); + SetupMaterialWithRenderingMode(material, (RenderingMode)renderingMode.floatValue, (CustomRenderingMode)customRenderingMode.floatValue, (int)renderQueueOverride.floatValue); + } + + protected void RenderingModeOptions(MaterialEditor materialEditor) + { + EditorGUI.BeginChangeCheck(); + + EditorGUI.showMixedValue = renderingMode.hasMixedValue; + RenderingMode mode = (RenderingMode)renderingMode.floatValue; + EditorGUI.BeginChangeCheck(); + mode = (RenderingMode)EditorGUILayout.Popup(renderingMode.displayName, (int)mode, Styles.renderingModeNames); + + if (EditorGUI.EndChangeCheck()) + { + materialEditor.RegisterPropertyChangeUndo(renderingMode.displayName); + renderingMode.floatValue = (float)mode; + } + + EditorGUI.showMixedValue = false; + + if (EditorGUI.EndChangeCheck()) + { + Object[] targets = renderingMode.targets; + + foreach (Object target in targets) + { + MaterialChanged((Material)target); + } + } + + if ((RenderingMode)renderingMode.floatValue == RenderingMode.Custom) + { + EditorGUI.indentLevel += 2; + customRenderingMode.floatValue = EditorGUILayout.Popup(customRenderingMode.displayName, (int)customRenderingMode.floatValue, Styles.customRenderingModeNames); + materialEditor.ShaderProperty(sourceBlend, Styles.sourceBlend); + materialEditor.ShaderProperty(destinationBlend, Styles.destinationBlend); + materialEditor.ShaderProperty(blendOperation, Styles.blendOperation); + materialEditor.ShaderProperty(depthTest, Styles.depthTest); + depthWrite.floatValue = EditorGUILayout.Popup(depthWrite.displayName, (int)depthWrite.floatValue, Styles.depthWriteNames); + materialEditor.ShaderProperty(colorWriteMask, Styles.colorWriteMask); + EditorGUI.indentLevel -= 2; + } + + materialEditor.ShaderProperty(cullMode, Styles.cullMode); + } + + protected void MainMapOptions(MaterialEditor materialEditor, Material material) + { + GUILayout.Label(Styles.primaryMapsTitle, EditorStyles.boldLabel); + + materialEditor.TexturePropertySingleLine(Styles.albedo, albedoMap, albedoColor); + materialEditor.ShaderProperty(enableChannelMap, Styles.enableChannelMap); + + if (PropertyEnabled(enableChannelMap)) + { + EditorGUI.indentLevel += 2; + materialEditor.TexturePropertySingleLine(Styles.channelMap, channelMap); + GUILayout.Box("Metallic (Red), Occlusion (Green), Emission (Blue), Smoothness (Alpha)", EditorStyles.helpBox); + EditorGUI.indentLevel -= 2; + } + + if (!PropertyEnabled(enableChannelMap)) + { + EditorGUI.indentLevel += 2; + + albedoAlphaMode.floatValue = EditorGUILayout.Popup(albedoAlphaMode.displayName, (int)albedoAlphaMode.floatValue, Styles.albedoAlphaModeNames); + + if ((RenderingMode)renderingMode.floatValue == RenderingMode.TransparentCutout) + { + materialEditor.ShaderProperty(alphaCutoff, Styles.alphaCutoff.text); + } + + if ((AlbedoAlphaMode)albedoAlphaMode.floatValue != AlbedoAlphaMode.Metallic) + { + materialEditor.ShaderProperty(metallic, Styles.metallic); + } + + if ((AlbedoAlphaMode)albedoAlphaMode.floatValue != AlbedoAlphaMode.Smoothness) + { + materialEditor.ShaderProperty(smoothness, Styles.smoothness); + } + + SetupMaterialWithAlbedo(material, albedoMap, albedoAlphaMode, albedoAssignedAtRuntime); + + EditorGUI.indentLevel -= 2; + } + + if (PropertyEnabled(directionalLight) || + PropertyEnabled(reflections) || + PropertyEnabled(rimLight) || + PropertyEnabled(environmentColoring)) + { + materialEditor.ShaderProperty(enableNormalMap, Styles.enableNormalMap); + + if (PropertyEnabled(enableNormalMap)) + { + EditorGUI.indentLevel += 2; + materialEditor.TexturePropertySingleLine(Styles.normalMap, normalMap, normalMap.textureValue != null ? normalMapScale : null); + EditorGUI.indentLevel -= 2; + } + } + + materialEditor.ShaderProperty(enableEmission, Styles.enableEmission); + + if (PropertyEnabled(enableEmission)) + { + materialEditor.ShaderProperty(emissiveColor, Styles.emissiveColor, 2); + } + + materialEditor.ShaderProperty(enableTriplanarMapping, Styles.enableTriplanarMapping); + + if (PropertyEnabled(enableTriplanarMapping)) + { + materialEditor.ShaderProperty(enableLocalSpaceTriplanarMapping, Styles.enableLocalSpaceTriplanarMapping, 2); + materialEditor.ShaderProperty(triplanarMappingBlendSharpness, Styles.triplanarMappingBlendSharpness, 2); + } + + EditorGUILayout.Space(); + materialEditor.TextureScaleOffsetProperty(albedoMap); + } + + protected void RenderingOptions(MaterialEditor materialEditor, Material material) + { + EditorGUILayout.Space(); + GUILayout.Label(Styles.renderingOptionsTitle, EditorStyles.boldLabel); + + materialEditor.ShaderProperty(directionalLight, Styles.directionalLight); + + if (PropertyEnabled(directionalLight)) + { + materialEditor.ShaderProperty(specularHighlights, Styles.specularHighlights, 2); + } + + materialEditor.ShaderProperty(sphericalHarmonics, Styles.sphericalHarmonics); + + materialEditor.ShaderProperty(reflections, Styles.reflections); + + if (PropertyEnabled(reflections)) + { + materialEditor.ShaderProperty(refraction, Styles.refraction, 2); + + if (PropertyEnabled(refraction)) + { + materialEditor.ShaderProperty(refractiveIndex, Styles.refractiveIndex, 4); + } + } + + materialEditor.ShaderProperty(rimLight, Styles.rimLight); + + if (PropertyEnabled(rimLight)) + { + materialEditor.ShaderProperty(rimColor, Styles.rimColor, 2); + materialEditor.ShaderProperty(rimPower, Styles.rimPower, 2); + } + + materialEditor.ShaderProperty(vertexColors, Styles.vertexColors); + + materialEditor.ShaderProperty(clippingPlane, Styles.clippingPlane); + + if (PropertyEnabled(clippingPlane)) + { + GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(ClippingPlane), Styles.clippingPlane.text), EditorStyles.helpBox); + } + + materialEditor.ShaderProperty(clippingSphere, Styles.clippingSphere); + + if (PropertyEnabled(clippingSphere)) + { + GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(ClippingSphere), Styles.clippingSphere.text), EditorStyles.helpBox); + } + + materialEditor.ShaderProperty(clippingBox, Styles.clippingBox); + + if (PropertyEnabled(clippingBox)) + { + GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(ClippingBox), Styles.clippingBox.text), EditorStyles.helpBox); + } + + if (PropertyEnabled(clippingPlane) || PropertyEnabled(clippingSphere) || PropertyEnabled(clippingBox)) + { + materialEditor.ShaderProperty(clippingBorder, Styles.clippingBorder); + + if (PropertyEnabled(clippingBorder)) + { + materialEditor.ShaderProperty(clippingBorderWidth, Styles.clippingBorderWidth, 2); + materialEditor.ShaderProperty(clippingBorderColor, Styles.clippingBorderColor, 2); + } + } + + materialEditor.ShaderProperty(nearPlaneFade, Styles.nearPlaneFade); + + if (PropertyEnabled(nearPlaneFade)) + { + materialEditor.ShaderProperty(fadeBeginDistance, Styles.fadeBeginDistance, 2); + materialEditor.ShaderProperty(fadeCompleteDistance, Styles.fadeCompleteDistance, 2); + } + } + + protected void FluentOptions(MaterialEditor materialEditor, Material material) + { + EditorGUILayout.Space(); + GUILayout.Label(Styles.fluentOptionsTitle, EditorStyles.boldLabel); + RenderingMode mode = (RenderingMode)renderingMode.floatValue; + CustomRenderingMode customMode = (CustomRenderingMode)customRenderingMode.floatValue; + + materialEditor.ShaderProperty(hoverLight, Styles.hoverLight); + + if (PropertyEnabled(hoverLight)) + { + GUILayout.Box(string.Format(Styles.propertiesComponentHelp, nameof(HoverLight), Styles.hoverLight.text), EditorStyles.helpBox); + + materialEditor.ShaderProperty(enableHoverColorOverride, Styles.enableHoverColorOverride, 2); + + if (PropertyEnabled(enableHoverColorOverride)) + { + materialEditor.ShaderProperty(hoverColorOverride, Styles.hoverColorOverride, 4); + } + + if (mode == RenderingMode.Transparent || (mode == RenderingMode.Custom && customMode == CustomRenderingMode.Transparent)) + { + materialEditor.ShaderProperty(hoverLightOpaque, Styles.hoverLightOpaque, 2); + } + + if (PropertyEnabled(hoverLightOpaque)) + { + materialEditor.ShaderProperty(enableHoverColorOpaqueOverride, Styles.enableHoverColorOpaqueOverride, 4); + + if (PropertyEnabled(enableHoverColorOpaqueOverride)) + { + materialEditor.ShaderProperty(hoverColorOverrideOpaque, Styles.hoverColorOpaqueOverride, 6); + } + } + } + + materialEditor.ShaderProperty(roundCorners, Styles.roundCorners); + + if (PropertyEnabled(roundCorners)) + { + materialEditor.ShaderProperty(roundCornerRadius, Styles.roundCornerRadius, 2); + materialEditor.ShaderProperty(roundCornerMargin, Styles.roundCornerMargin, 2); + } + + materialEditor.ShaderProperty(borderLight, Styles.borderLight); + + if (PropertyEnabled(borderLight)) + { + if (PropertyEnabled(hoverLight)) + { + materialEditor.ShaderProperty(borderLightUsesHoverColor, Styles.borderLightUsesHoverColor, 2); + } + + if (mode == RenderingMode.TransparentCutout || mode == RenderingMode.Transparent || + (mode == RenderingMode.Custom && customMode == CustomRenderingMode.TransparentCutout) || + (mode == RenderingMode.Custom && customMode == CustomRenderingMode.Transparent)) + { + materialEditor.ShaderProperty(borderLightOpaque, Styles.borderLightOpaque, 2); + } + + materialEditor.ShaderProperty(borderWidth, Styles.borderWidth, 2); + + if (!PropertyEnabled(borderLightOpaque)) + { + materialEditor.ShaderProperty(borderMinValue, Styles.borderMinValue, 2); + } + } + + if (PropertyEnabled(roundCorners) || PropertyEnabled(borderLight)) + { + materialEditor.ShaderProperty(edgeSmoothingValue, Styles.edgeSmoothingValue); + } + + materialEditor.ShaderProperty(innerGlow, Styles.innerGlow); + + if (PropertyEnabled(innerGlow)) + { + materialEditor.ShaderProperty(innerGlowColor, Styles.innerGlowColor, 2); + } + + materialEditor.ShaderProperty(environmentColoring, Styles.environmentColoring); + + if (PropertyEnabled(environmentColoring)) + { + materialEditor.ShaderProperty(environmentColorThreshold, Styles.environmentColorThreshold, 2); + materialEditor.ShaderProperty(environmentColorIntensity, Styles.environmentColorIntensity, 2); + materialEditor.ShaderProperty(environmentColorX, Styles.environmentColorX, 2); + materialEditor.ShaderProperty(environmentColorY, Styles.environmentColorY, 2); + materialEditor.ShaderProperty(environmentColorZ, Styles.environmentColorZ, 2); + } + } + + protected void AdvancedOptions(MaterialEditor materialEditor, Material material) + { + EditorGUILayout.Space(); + GUILayout.Label(Styles.advancedOptionsTitle, EditorStyles.boldLabel); + + EditorGUI.BeginChangeCheck(); + + materialEditor.ShaderProperty(renderQueueOverride, Styles.renderQueueOverride); + + if (EditorGUI.EndChangeCheck()) + { + MaterialChanged(material); + } + + // Show the RenderQueueField but do not allow users to directly manipulate it. That is done via the renderQueueOverride. + GUI.enabled = false; + materialEditor.RenderQueueField(); + + // When round corner or border light features are used, enable instancing to disable batching. Static and dynamic + // batching will normalize the object scale, which breaks border related features. + GUI.enabled = !PropertyEnabled(roundCorners) && !PropertyEnabled(borderLight); + + if (!GUI.enabled && !material.enableInstancing) + { + material.enableInstancing = true; + } + + if (albedoMap.textureValue == null) + { + materialEditor.ShaderProperty(albedoAssignedAtRuntime, Styles.albedoAssignedAtRuntime); + } + + materialEditor.EnableInstancingField(); + + if (material.enableInstancing) + { + GUI.enabled = true; + materialEditor.ShaderProperty(instancedColor, Styles.instancedColor, 2); + } + else + { + // When instancing is disable, disable instanced color. + SetFloatProperty(material, Styles.instancedColorFeatureName, Styles.instancedColorName, 0.0f); + } + + materialEditor.ShaderProperty(stencil, Styles.stencil); + + if (PropertyEnabled(stencil)) + { + materialEditor.ShaderProperty(stencilReference, Styles.stencilReference, 2); + materialEditor.ShaderProperty(stencilComparison, Styles.stencilComparison, 2); + materialEditor.ShaderProperty(stencilOperation, Styles.stencilOperation, 2); + } + else + { + // When stencil is disable, revert to the default stencil operations. Note, when tested on D3D11 hardware the stencil state + // is still set even when the CompareFunction.Disabled is selected, but this does not seem to affect performance. + material.SetInt(Styles.stencilComparisonName, (int)CompareFunction.Disabled); + material.SetInt(Styles.stencilOperationName, (int)StencilOp.Keep); + } + } + + protected static void SetupMaterialWithAlbedo(Material material, MaterialProperty albedoMap, MaterialProperty albedoAlphaMode, MaterialProperty albedoAssignedAtRuntime) + { + if (albedoMap.textureValue || PropertyEnabled(albedoAssignedAtRuntime)) + { + material.DisableKeyword(Styles.disableAlbedoMapName); + } + else + { + material.EnableKeyword(Styles.disableAlbedoMapName); + } + + switch ((AlbedoAlphaMode)albedoAlphaMode.floatValue) + { + case AlbedoAlphaMode.Transparency: + { + material.DisableKeyword(Styles.albedoMapAlphaMetallicName); + material.DisableKeyword(Styles.albedoMapAlphaSmoothnessName); + } + break; + + case AlbedoAlphaMode.Metallic: + { + material.EnableKeyword(Styles.albedoMapAlphaMetallicName); + material.DisableKeyword(Styles.albedoMapAlphaSmoothnessName); + } + break; + + case AlbedoAlphaMode.Smoothness: + { + material.DisableKeyword(Styles.albedoMapAlphaMetallicName); + material.EnableKeyword(Styles.albedoMapAlphaSmoothnessName); + } + break; + } + } + + protected static void SetupMaterialWithRenderingMode(Material material, RenderingMode mode, CustomRenderingMode customMode, int renderQueueOverride) + { + switch (mode) + { + case RenderingMode.Opaque: + { + material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Opaque]); + material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Opaque); + material.SetInt(Styles.sourceBlendName, (int)BlendMode.One); + material.SetInt(Styles.destinationBlendName, (int)BlendMode.Zero); + material.SetInt(Styles.blendOperationName, (int)BlendOp.Add); + material.SetInt(Styles.depthTestName, (int)CompareFunction.LessEqual); + material.SetInt(Styles.depthWriteName, (int)DepthWrite.On); + material.SetInt(Styles.colorWriteMaskName, (int)ColorWriteMask.All); + material.DisableKeyword(Styles.alphaTestOnName); + material.DisableKeyword(Styles.alphaBlendOnName); + material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Geometry; + } + break; + + case RenderingMode.TransparentCutout: + { + material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.TransparentCutout]); + material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.TransparentCutout); + material.SetInt(Styles.sourceBlendName, (int)BlendMode.One); + material.SetInt(Styles.destinationBlendName, (int)BlendMode.Zero); + material.SetInt(Styles.blendOperationName, (int)BlendOp.Add); + material.SetInt(Styles.depthTestName, (int)CompareFunction.LessEqual); + material.SetInt(Styles.depthWriteName, (int)DepthWrite.On); + material.SetInt(Styles.colorWriteMaskName, (int)ColorWriteMask.All); + material.EnableKeyword(Styles.alphaTestOnName); + material.DisableKeyword(Styles.alphaBlendOnName); + material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.AlphaTest; + } + break; + + case RenderingMode.Transparent: + { + material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Transparent]); + material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Transparent); + material.SetInt(Styles.sourceBlendName, (int)BlendMode.SrcAlpha); + material.SetInt(Styles.destinationBlendName, (int)BlendMode.OneMinusSrcAlpha); + material.SetInt(Styles.blendOperationName, (int)BlendOp.Add); + material.SetInt(Styles.depthTestName, (int)CompareFunction.LessEqual); + material.SetInt(Styles.depthWriteName, (int)DepthWrite.Off); + material.SetInt(Styles.colorWriteMaskName, (int)ColorWriteMask.All); + material.DisableKeyword(Styles.alphaTestOnName); + material.EnableKeyword(Styles.alphaBlendOnName); + material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Transparent; + } + break; + + case RenderingMode.PremultipliedTransparent: + { + material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Transparent]); + material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Transparent); + material.SetInt(Styles.sourceBlendName, (int)BlendMode.One); + material.SetInt(Styles.destinationBlendName, (int)BlendMode.OneMinusSrcAlpha); + material.SetInt(Styles.blendOperationName, (int)BlendOp.Add); + material.SetInt(Styles.depthTestName, (int)CompareFunction.LessEqual); + material.SetInt(Styles.depthWriteName, (int)DepthWrite.Off); + material.SetInt(Styles.colorWriteMaskName, (int)ColorWriteMask.All); + material.DisableKeyword(Styles.alphaTestOnName); + material.EnableKeyword(Styles.alphaBlendOnName); + material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Transparent; + } + break; + + case RenderingMode.Additive: + { + material.SetOverrideTag(Styles.renderTypeName, Styles.renderingModeNames[(int)RenderingMode.Transparent]); + material.SetInt(Styles.customRenderingModeName, (int)CustomRenderingMode.Transparent); + material.SetInt(Styles.sourceBlendName, (int)BlendMode.One); + material.SetInt(Styles.destinationBlendName, (int)BlendMode.One); + material.SetInt(Styles.blendOperationName, (int)BlendOp.Add); + material.SetInt(Styles.depthTestName, (int)CompareFunction.LessEqual); + material.SetInt(Styles.depthWriteName, (int)DepthWrite.Off); + material.SetInt(Styles.colorWriteMaskName, (int)ColorWriteMask.All); + material.DisableKeyword(Styles.alphaTestOnName); + material.EnableKeyword(Styles.alphaBlendOnName); + material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : (int)RenderQueue.Transparent; + } + break; + + case RenderingMode.Custom: + { + material.SetOverrideTag(Styles.renderTypeName, Styles.customRenderingModeNames[(int)customMode]); + // _SrcBlend, _DstBlend, _BlendOp, _ZTest, _ZWrite, _ColorWriteMask are controlled by UI. + + switch (customMode) + { + case CustomRenderingMode.Opaque: + { + material.DisableKeyword(Styles.alphaTestOnName); + material.DisableKeyword(Styles.alphaBlendOnName); + } + break; + + case CustomRenderingMode.TransparentCutout: + { + material.EnableKeyword(Styles.alphaTestOnName); + material.DisableKeyword(Styles.alphaBlendOnName); + } + break; + + case CustomRenderingMode.Transparent: + { + material.DisableKeyword(Styles.alphaTestOnName); + material.EnableKeyword(Styles.alphaBlendOnName); + } + break; + } + + material.renderQueue = (renderQueueOverride >= 0) ? renderQueueOverride : material.renderQueue; + } + break; + } + } + + protected static bool PropertyEnabled(MaterialProperty property) + { + return !property.floatValue.Equals(0.0f); + } + + protected static float? GetFloatProperty(Material material, string propertyName) + { + if (material.HasProperty(propertyName)) + { + return material.GetFloat(propertyName); + } + + return null; + } + + protected static Vector4? GetVectorProperty(Material material, string propertyName) + { + if (material.HasProperty(propertyName)) + { + return material.GetVector(propertyName); + } + + return null; + } + + protected static Color? GetColorProperty(Material material, string propertyName) + { + if (material.HasProperty(propertyName)) + { + return material.GetColor(propertyName); + } + + return null; + } + + protected static void SetFloatProperty(Material material, string keywordName, string propertyName, float? propertyValue) + { + if (propertyValue.HasValue) + { + if (keywordName != null) + { + if (!propertyValue.Value.Equals(0.0f)) + { + material.EnableKeyword(keywordName); + } + else + { + material.DisableKeyword(keywordName); + } + } + + material.SetFloat(propertyName, propertyValue.Value); + } + } + + protected static void SetVectorProperty(Material material, string propertyName, Vector4? propertyValue) + { + if (propertyValue.HasValue) + { + material.SetVector(propertyName, propertyValue.Value); + } + } + + protected static void SetColorProperty(Material material, string propertyName, Color? propertyValue) + { + if (propertyValue.HasValue) + { + material.SetColor(propertyName, propertyValue.Value); + } + } + } +} diff --git a/Inspectors/MixedRealityStandardShaderGUI.cs.meta b/Inspectors/MixedRealityStandardShaderGUI.cs.meta new file mode 100644 index 000000000..9e4db2881 --- /dev/null +++ b/Inspectors/MixedRealityStandardShaderGUI.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3f2512f0db2d4db2aa8f68c5b847710f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/MixedRealityToolkitInspector.cs b/Inspectors/MixedRealityToolkitInspector.cs new file mode 100644 index 000000000..56a95889d --- /dev/null +++ b/Inspectors/MixedRealityToolkitInspector.cs @@ -0,0 +1,152 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEditor.Experimental.SceneManagement; +using UnityEditor.SceneManagement; +using UnityEngine; +using UnityEngine.SceneManagement; +using XRTK.Definitions; +using XRTK.Extensions.EditorClassExtensions; +using XRTK.Inspectors.Profiles; +using XRTK.Services; + +namespace XRTK.Inspectors +{ + [CustomEditor(typeof(MixedRealityToolkit))] + public class MixedRealityToolkitInspector : BaseMixedRealityToolkitInspector + { + private SerializedProperty activeProfile; + private int currentPickerWindow = -1; + private bool checkChange; + + private void OnEnable() + { + activeProfile = serializedObject.FindProperty("activeProfile"); + currentPickerWindow = -1; + checkChange = activeProfile.objectReferenceValue == null; + } + + public override void OnInspectorGUI() + { + RenderMixedRealityToolkitLogo(); + + serializedObject.Update(); + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(activeProfile); + var changed = EditorGUI.EndChangeCheck(); + var commandName = Event.current.commandName; + var allConfigProfiles = ScriptableObjectExtensions.GetAllInstances(); + + if (activeProfile.objectReferenceValue == null) + { + if (currentPickerWindow == -1 && checkChange) + { + if (allConfigProfiles.Length > 1) + { + EditorUtility.DisplayDialog("Attention!", "You must choose a profile for the Mixed Reality Toolkit.", "OK"); + currentPickerWindow = GUIUtility.GetControlID(FocusType.Passive); + EditorGUIUtility.ShowObjectPicker(GetDefaultProfile(allConfigProfiles), false, string.Empty, currentPickerWindow); + } + else if (allConfigProfiles.Length == 1) + { + activeProfile.objectReferenceValue = allConfigProfiles[0]; + changed = true; + Selection.activeObject = allConfigProfiles[0]; + EditorGUIUtility.PingObject(allConfigProfiles[0]); + } + + checkChange = false; + } + + if (GUILayout.Button("Create new configuration")) + { + var profile = CreateInstance(nameof(MixedRealityToolkitConfigurationProfile)); + profile.CreateAsset("Assets/XRTK.Generated/CustomProfiles"); + activeProfile.objectReferenceValue = profile; + Selection.activeObject = profile; + EditorGUIUtility.PingObject(profile); + } + } + + if (EditorGUIUtility.GetObjectPickerControlID() == currentPickerWindow) + { + switch (commandName) + { + case "ObjectSelectorUpdated": + activeProfile.objectReferenceValue = EditorGUIUtility.GetObjectPickerObject(); + changed = true; + break; + case "ObjectSelectorClosed": + activeProfile.objectReferenceValue = EditorGUIUtility.GetObjectPickerObject(); + currentPickerWindow = -1; + changed = true; + Selection.activeObject = activeProfile.objectReferenceValue; + EditorGUIUtility.PingObject(activeProfile.objectReferenceValue); + break; + } + } + + serializedObject.ApplyModifiedProperties(); + + if (changed) + { + MixedRealityToolkit.Instance.ResetConfiguration((MixedRealityToolkitConfigurationProfile)activeProfile.objectReferenceValue); + } + } + + [MenuItem("Mixed Reality Toolkit/Configure...", true, 0)] + private static bool CreateMixedRealityToolkitGameObjectValidation() + { + return PrefabStageUtility.GetCurrentPrefabStage() == null; + } + + [MenuItem("Mixed Reality Toolkit/Configure...", false, 0)] + public static void CreateMixedRealityToolkitGameObject() + { + var startScene = MixedRealityPreferences.StartSceneAsset; + + if (startScene != null) + { + if (!EditorUtility.DisplayDialog( + title: "Attention!", + message: $"It seems you've already set the projects Start Scene to {startScene.name}\n" + + "You only need to configure the toolkit once in your Start Scene.\n" + + "Would you like to replace your Start Scene with the current scene you're configuring?", + ok: "Yes", + cancel: "No")) + { + return; + } + } + + Selection.activeObject = MixedRealityToolkit.Instance; + Debug.Assert(MixedRealityToolkit.IsInitialized); + var playspace = MixedRealityToolkit.Instance.MixedRealityPlayspace; + Debug.Assert(playspace != null); + + EditorApplication.delayCall += () => + { + if (!EditorSceneManager.SaveCurrentModifiedScenesIfUserWantsTo()) + { + Debug.LogWarning("You must save this scene and assign it to the Start Scene in the XRTK preferences for the Mixed Reality Toolkit to function correctly."); + } + + EditorSceneManager.EnsureUntitledSceneHasBeenSaved("Mixed Reality Start Scene for the Mixed Reality Toolkit to function correctly."); + + Debug.Assert(!string.IsNullOrEmpty(SceneManager.GetActiveScene().path), + "Configured Scene must be saved in order to set it as the Start Scene!\n" + + "Please save your scene and set it as the Start Scene in the XRTK preferences."); + MixedRealityPreferences.StartSceneAsset = AssetDatabase.LoadAssetAtPath(SceneManager.GetActiveScene().path); + EditorGUIUtility.PingObject(MixedRealityToolkit.Instance); + }; + } + + private static MixedRealityToolkitConfigurationProfile GetDefaultProfile(IEnumerable allProfiles) + { + return allProfiles.FirstOrDefault(profile => profile.name == "DefaultMixedRealityToolkitConfigurationProfile"); + } + } +} diff --git a/Inspectors/MixedRealityToolkitInspector.cs.meta b/Inspectors/MixedRealityToolkitInspector.cs.meta new file mode 100644 index 000000000..90d5d4d66 --- /dev/null +++ b/Inspectors/MixedRealityToolkitInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b70bbc5370c44a7fa3ca6ce785e03a72 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles.meta b/Inspectors/Profiles.meta new file mode 100644 index 000000000..792273f83 --- /dev/null +++ b/Inspectors/Profiles.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ec9513c9bbdf40ba8f667cc9a90b61ed +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs b/Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs new file mode 100644 index 000000000..cfd1806d4 --- /dev/null +++ b/Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs @@ -0,0 +1,185 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Inspectors.Utilities; +using XRTK.Providers.Controllers; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(BaseMixedRealityControllerMappingProfile))] + public class BaseMixedRealityControllerMappingProfileInspector : BaseMixedRealityProfileInspector + { + private struct ControllerItem + { + public SupportedControllerType ControllerType; + public Handedness Handedness; + public MixedRealityInteractionMapping[] Interactions; + + public ControllerItem(SupportedControllerType controllerType, Handedness handedness, MixedRealityInteractionMapping[] interactions) + { + ControllerType = controllerType; + Handedness = handedness; + Interactions = interactions; + } + } + + private readonly List controllerItems = new List(); + + private SerializedProperty controllerMappings; + + private BaseMixedRealityControllerMappingProfile profile; + + private GUIStyle controllerButtonStyle; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled || + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + return; + } + + controllerMappings = serializedObject.FindProperty("controllerMappings"); + profile = target as BaseMixedRealityControllerMappingProfile; + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to controller mapping list")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.ControllerMappingProfiles; + } + + EditorGUILayout.Space(); + var deviceName = profile.ControllerType == SupportedControllerType.None ? "Custom Device" : profile.ControllerType.ToString(); + EditorGUILayout.LabelField($"{deviceName} Mappings", EditorStyles.boldLabel); + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + EditorGUILayout.HelpBox("No input actions found, please specify a input action profile in the main configuration.", MessageType.Error); + return; + } + + (target as BaseMixedRealityProfile).CheckProfileLock(false); + + if (controllerButtonStyle == null) + { + controllerButtonStyle = new GUIStyle("LargeButton") + { + imagePosition = ImagePosition.ImageAbove, + fontStyle = FontStyle.Bold, + stretchHeight = true, + stretchWidth = true, + wordWrap = true, + fontSize = 10, + }; + } + + serializedObject.Update(); + controllerItems.Clear(); + + GUILayout.BeginVertical(); + + if (controllerMappings.arraySize == 0) + { + EditorGUILayout.HelpBox("You must override the controller mappings in your custom implementation to see a list of mappings for your device.", MessageType.Error); + } + + for (int i = 0; i < controllerMappings?.arraySize; i++) + { + var supportedControllerType = profile.ControllerType; + var controllerMapping = controllerMappings.GetArrayElementAtIndex(i); + var handednessValue = controllerMapping.FindPropertyRelative("handedness"); + var handedness = (Handedness)handednessValue.intValue; + var description = controllerMapping.FindPropertyRelative("description"); + var interactions = controllerMapping.FindPropertyRelative("interactions"); + + bool skip = false; + + for (int j = 0; j < controllerItems.Count; j++) + { + if (controllerItems[j].ControllerType == supportedControllerType && + controllerItems[j].Handedness == handedness) + { + profile.ControllerMappings[i].SynchronizeInputActions(controllerItems[j].Interactions); + serializedObject.ApplyModifiedProperties(); + skip = true; + } + } + + if (skip) { continue; } + + controllerItems.Add(new ControllerItem(supportedControllerType, handedness, profile.ControllerMappings[i].Interactions)); + + string handednessContent = string.Empty; + + switch (handedness) + { + case Handedness.Left: + case Handedness.Right: + case Handedness.Other: + handednessContent = $" {handedness.ToString()} hand"; + break; + case Handedness.Both: + handednessContent = $" {handedness.ToString()} hands"; + break; + } + + if (handedness != Handedness.Right) + { + GUILayout.BeginHorizontal(); + } + + var buttonContent = new GUIContent($"Edit {description.stringValue}{handednessContent}", ControllerMappingLibrary.GetControllerTextureScaled(supportedControllerType, handedness)); + + if (GUILayout.Button(buttonContent, controllerButtonStyle, GUILayout.Height(128f), GUILayout.MinWidth(32f), GUILayout.ExpandWidth(true))) + { + serializedObject.ApplyModifiedProperties(); + ControllerPopupWindow.Show(profile.ControllerType, interactions, handedness, MixedRealityPreferences.LockProfiles && !((BaseMixedRealityProfile)target).IsCustomProfile); + } + + if (handedness != Handedness.Left) + { + GUILayout.EndHorizontal(); + } + } + + GUILayout.EndVertical(); + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..d21279fa9 --- /dev/null +++ b/Inspectors/Profiles/BaseMixedRealityControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 370f4446f8d9493087279d5c1dc9d60a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs b/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs new file mode 100644 index 000000000..14be6e36e --- /dev/null +++ b/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs @@ -0,0 +1,183 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Extensions.EditorClassExtensions; +using XRTK.Services; +using XRTK.Utilities.Async; + +namespace XRTK.Inspectors.Profiles +{ + /// + /// Base class for all Inspectors to inherit from. + /// + public abstract class BaseMixedRealityProfileInspector : Editor + { + private const string IsCustomProfileProperty = "isCustomProfile"; + + private static readonly GUIContent NewProfileContent = new GUIContent("+", "Create New Profile"); + private static readonly GUIContent CopyProfileContent = new GUIContent("Clone", "Replace with a copy of the default profile."); + + private static SerializedObject targetProfile; + private static BaseMixedRealityProfile profile; + private static BaseMixedRealityProfile profileToCopy; + + protected virtual void OnEnable() + { + targetProfile = serializedObject; + profile = target as BaseMixedRealityProfile; + } + + /// + /// Renders a . + /// + /// the property. + /// The GUIContent for the field. + /// Optional flag to hide the create button. + /// True, if the profile changed. + protected static bool RenderProfile(SerializedProperty property, GUIContent guiContent, bool showAddButton = true) + { + return RenderProfileInternal(property, guiContent, showAddButton); + } + + /// + /// Renders a . + /// + /// the property. + /// Optional flag to hide the create button. + /// True, if the profile changed. + protected static bool RenderProfile(SerializedProperty property, bool showAddButton = true) + { + return RenderProfileInternal(property, null, showAddButton); + } + + private static bool RenderProfileInternal(SerializedProperty property, GUIContent guiContent, bool showAddButton) + { + bool changed = false; + EditorGUILayout.BeginHorizontal(); + + var oldObject = property.objectReferenceValue; + + if (guiContent == null) + { + EditorGUILayout.PropertyField(property); + } + else + { + EditorGUILayout.PropertyField(property, guiContent); + } + + if (property.objectReferenceValue == null) + { + if (showAddButton && + GUILayout.Button(NewProfileContent, EditorStyles.miniButton, GUILayout.Width(20f))) + { + var profileTypeName = property.type.Replace("PPtr<$", string.Empty).Replace(">", string.Empty); + Debug.Assert(profileTypeName != null, "No Type Found"); + + ScriptableObject instance = CreateInstance(profileTypeName); + var newProfile = instance.CreateAsset(AssetDatabase.GetAssetPath(Selection.activeObject)) as BaseMixedRealityProfile; + property.objectReferenceValue = newProfile; + property.serializedObject.ApplyModifiedProperties(); + changed = true; + } + } + else + { + var renderedProfile = property.objectReferenceValue as BaseMixedRealityProfile; + Debug.Assert(renderedProfile != null); + Debug.Assert(profile != null, "No profile was set in OnEnable. Did you forget to call base.OnEnable in a derived profile class?"); + + if (profile.IsCustomProfile && + !renderedProfile.IsCustomProfile && + GUILayout.Button(CopyProfileContent, EditorStyles.miniButton, GUILayout.Width(42f))) + { + profileToCopy = renderedProfile; + var typeName = renderedProfile.GetType().Name; + Debug.Assert(typeName != null, "No Type Found"); + + ScriptableObject instance = CreateInstance(typeName); + var newProfile = instance.CreateAsset(AssetDatabase.GetAssetPath(Selection.activeObject)) as BaseMixedRealityProfile; + property.objectReferenceValue = newProfile; + property.serializedObject.ApplyModifiedProperties(); + PasteProfileValuesDelay(newProfile); + changed = true; + } + } + + if (oldObject != property.objectReferenceValue) + { + changed = true; + } + + EditorGUILayout.EndHorizontal(); + return changed; + } + + [MenuItem("CONTEXT/BaseMixedRealityProfile/Create Clone from Profile Values", false, 0)] + protected static async void CreateCloneProfile() + { + profileToCopy = profile; + ScriptableObject newProfile = CreateInstance(profile.GetType().ToString()); + profile = newProfile.CreateAsset("Assets/XRTK.Generated/CustomProfiles") as BaseMixedRealityProfile; + Debug.Assert(profile != null); + + await new WaitUntil(() => profileToCopy != profile); + + Selection.activeObject = null; + PasteProfileValues(); + Selection.activeObject = profile; + + if (!profileToCopy.IsCustomProfile) + { + // For now we only replace it if it's the master configuration profile. + // Sub-profiles are easy to update in the master configuration inspector. + if (MixedRealityToolkit.Instance.ActiveProfile.GetType() == profile.GetType()) + { + MixedRealityToolkit.Instance.ActiveProfile = profile as MixedRealityToolkitConfigurationProfile; + } + } + } + + [MenuItem("CONTEXT/BaseMixedRealityProfile/Copy Profile Values", false, 1)] + private static void CopyProfileValues() + { + profileToCopy = profile; + } + + [MenuItem("CONTEXT/BaseMixedRealityProfile/Paste Profile Values", true)] + private static bool PasteProfileValuesValidation() + { + return profile != null && + targetProfile != null && + profileToCopy != null && + targetProfile.FindProperty(IsCustomProfileProperty).boolValue && + profile.GetType() == profileToCopy.GetType(); + } + + [MenuItem("CONTEXT/BaseMixedRealityProfile/Paste Profile Values", false, 2)] + private static void PasteProfileValues() + { + Undo.RecordObject(profile, "Paste Profile Values"); + bool targetIsCustom = targetProfile.FindProperty(IsCustomProfileProperty).boolValue; + string originalName = targetProfile.targetObject.name; + EditorUtility.CopySerialized(profileToCopy, targetProfile.targetObject); + targetProfile.Update(); + targetProfile.FindProperty(IsCustomProfileProperty).boolValue = targetIsCustom; + targetProfile.ApplyModifiedProperties(); + targetProfile.targetObject.name = originalName; + Debug.Assert(targetProfile.FindProperty(IsCustomProfileProperty).boolValue == targetIsCustom); + AssetDatabase.SaveAssets(); + } + + private static async void PasteProfileValuesDelay(BaseMixedRealityProfile newProfile) + { + await new WaitUntil(() => profile == newProfile); + Selection.activeObject = null; + PasteProfileValues(); + Selection.activeObject = newProfile; + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs.meta b/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs.meta new file mode 100644 index 000000000..f0b831cf7 --- /dev/null +++ b/Inspectors/Profiles/BaseMixedRealityProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c793f7ec739c40e3a0b673b3a9d84385 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/CustomControllerMappingProfileInspector.cs b/Inspectors/Profiles/CustomControllerMappingProfileInspector.cs new file mode 100644 index 000000000..991cf1e47 --- /dev/null +++ b/Inspectors/Profiles/CustomControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Providers.Controllers; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(CustomMixedRealityControllerMappingProfile))] + public class CustomControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/CustomControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/CustomControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..8e19afd97 --- /dev/null +++ b/Inspectors/Profiles/CustomControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4fa1c5445e254e98b984f47b2d75e9a9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders.meta b/Inspectors/Profiles/DataProviders.meta new file mode 100644 index 000000000..a90ad88e4 --- /dev/null +++ b/Inspectors/Profiles/DataProviders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 28e06a5d68024a0d8e7fcc4368e1a4c8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers.meta b/Inspectors/Profiles/DataProviders/Controllers.meta new file mode 100644 index 000000000..622b6260a --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9c3fbe644a804e01a91d03f10ee8a7f5 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR.meta b/Inspectors/Profiles/DataProviders/Controllers/OpenVR.meta new file mode 100644 index 000000000..138b733e9 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e25b74025ffc448aaf0823e84c4a994c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs new file mode 100644 index 000000000..0f5e26eb9 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.OpenVR.Inspectors.Profiles +{ + [CustomEditor(typeof(GenericOpenVRControllerMappingProfile))] + public class GenericOpenVRControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..de70c9b9f --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/GenericOpenVRControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 216128080323432e88448e41adc234a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs new file mode 100644 index 000000000..7978cb8a4 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.OpenVR.Inspectors.Profiles +{ + [CustomEditor(typeof(OculusRemoteControllerMappingProfile))] + public class OculusRemoteControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..aaa8a3e8c --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusRemoteControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9336a74a9bd149e9bd03e29c0f5a760f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs new file mode 100644 index 000000000..e726dc2f9 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.OpenVR.Inspectors.Profiles +{ + [CustomEditor(typeof(OculusTouchControllerMappingProfile))] + public class OculusTouchControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..df8f9f403 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/OculusTouchControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4b9875e38d134af18d645e6fbcc436d7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs new file mode 100644 index 000000000..7b35a1246 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.OpenVR.Inspectors.Profiles +{ + [CustomEditor(typeof(ViveWandControllerMappingProfile))] + public class ViveWandControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..0287d34e1 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/OpenVR/ViveWandControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ac45beb6ea594c9e893b42f69085e265 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput.meta b/Inspectors/Profiles/DataProviders/Controllers/UnityInput.meta new file mode 100644 index 000000000..ae8275683 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 783933a67c2c4a59a93a82bc81b01d5d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs new file mode 100644 index 000000000..25425f8e7 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles.Inspectors +{ + [CustomEditor(typeof(GenericUnityControllerMappingProfile))] + public class GenericUnityControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..51a3ba1b8 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/GenericUnityControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd442751776944489b4dd84307ac9c97 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs new file mode 100644 index 000000000..a160a0089 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles.Inspectors +{ + [CustomEditor(typeof(MouseControllerMappingProfile))] + public class MouseControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..a010a688f --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/MouseControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 30795b78eaf8417097b699abb30e77f5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs new file mode 100644 index 000000000..ed1ad4180 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles.Inspectors +{ + [CustomEditor(typeof(TouchScreenControllerMappingProfile))] + public class TouchScreenControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..591f0ad96 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/TouchScreenControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b1874bcc3f7a4de29b1cf125405cc581 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs new file mode 100644 index 000000000..8528384cf --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Inspectors.Profiles; + +namespace XRTK.Providers.Controllers.UnityInput.Profiles.Inspectors +{ + [CustomEditor(typeof(XboxControllerMappingProfile))] + public class XboxControllerMappingProfileInspector : BaseMixedRealityControllerMappingProfileInspector { } +} \ No newline at end of file diff --git a/Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs.meta b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs.meta new file mode 100644 index 000000000..5ba984ee7 --- /dev/null +++ b/Inspectors/Profiles/DataProviders/Controllers/UnityInput/XboxControllerMappingProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0b857a16c071475b9f0a22eacbdf5a91 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs b/Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs new file mode 100644 index 000000000..9e2e2f3d7 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs @@ -0,0 +1,136 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.BoundarySystem; +using XRTK.Definitions.Utilities; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityBoundaryVisualizationProfile))] + public class MixedRealityBoundaryVisualizationProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty boundaryHeight; + private SerializedProperty showFloor; + private SerializedProperty floorMaterial; + private SerializedProperty floorScale; + private SerializedProperty floorPhysicsLayer; + + private SerializedProperty showPlayArea; + private SerializedProperty playAreaMaterial; + private SerializedProperty playAreaPhysicsLayer; + + private SerializedProperty showTrackedArea; + private SerializedProperty trackedAreaMaterial; + private SerializedProperty trackedAreaPhysicsLayer; + + private SerializedProperty showBoundaryWalls; + private SerializedProperty boundaryWallMaterial; + private SerializedProperty boundaryWallsPhysicsLayer; + + private SerializedProperty showBoundaryCeiling; + private SerializedProperty boundaryCeilingMaterial; + private SerializedProperty ceilingPhysicsLayer; + + private readonly GUIContent showContent = new GUIContent("Show"); + private readonly GUIContent scaleContent = new GUIContent("Scale"); + private readonly GUIContent materialContent = new GUIContent("Material"); + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + boundaryHeight = serializedObject.FindProperty("boundaryHeight"); + + showFloor = serializedObject.FindProperty("showFloor"); + floorMaterial = serializedObject.FindProperty("floorMaterial"); + floorScale = serializedObject.FindProperty("floorScale"); + floorPhysicsLayer = serializedObject.FindProperty("floorPhysicsLayer"); + + showPlayArea = serializedObject.FindProperty("showPlayArea"); + playAreaMaterial = serializedObject.FindProperty("playAreaMaterial"); + playAreaPhysicsLayer = serializedObject.FindProperty("playAreaPhysicsLayer"); + + showTrackedArea = serializedObject.FindProperty("showTrackedArea"); + trackedAreaMaterial = serializedObject.FindProperty("trackedAreaMaterial"); + trackedAreaPhysicsLayer = serializedObject.FindProperty("trackedAreaPhysicsLayer"); + + showBoundaryWalls = serializedObject.FindProperty("showBoundaryWalls"); + boundaryWallMaterial = serializedObject.FindProperty("boundaryWallMaterial"); + boundaryWallsPhysicsLayer = serializedObject.FindProperty("boundaryWallsPhysicsLayer"); + + showBoundaryCeiling = serializedObject.FindProperty("showBoundaryCeiling"); + boundaryCeilingMaterial = serializedObject.FindProperty("boundaryCeilingMaterial"); + ceilingPhysicsLayer = serializedObject.FindProperty("ceilingPhysicsLayer"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Boundary Visualization Options", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Boundary visualizations can help users stay oriented and comfortable in the experience.", MessageType.Info); + EditorGUILayout.Space(); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + EditorGUILayout.PropertyField(boundaryHeight); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Floor Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(showFloor, showContent); + EditorGUILayout.PropertyField(floorMaterial, materialContent); + var prevWideMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + EditorGUILayout.PropertyField(floorScale, scaleContent, GUILayout.ExpandWidth(true)); + EditorGUIUtility.wideMode = prevWideMode; + EditorGUILayout.PropertyField(floorPhysicsLayer); + + GUILayout.Space(12f); + EditorGUILayout.LabelField("Play Area Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(showPlayArea, showContent); + EditorGUILayout.PropertyField(playAreaMaterial, materialContent); + EditorGUILayout.PropertyField(playAreaPhysicsLayer); + + GUILayout.Space(12f); + EditorGUILayout.LabelField("Tracked Area Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(showTrackedArea, showContent); + EditorGUILayout.PropertyField(trackedAreaMaterial, materialContent); + EditorGUILayout.PropertyField(trackedAreaPhysicsLayer); + + GUILayout.Space(12f); + EditorGUILayout.LabelField("Boundary Wall Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(showBoundaryWalls, showContent); + EditorGUILayout.PropertyField(boundaryWallMaterial, materialContent); + EditorGUILayout.PropertyField(boundaryWallsPhysicsLayer); + + GUILayout.Space(12f); + EditorGUILayout.LabelField("Boundary Ceiling Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(showBoundaryCeiling, showContent); + EditorGUILayout.PropertyField(boundaryCeilingMaterial, materialContent); + EditorGUILayout.PropertyField(ceilingPhysicsLayer); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs.meta new file mode 100644 index 000000000..91c82bac4 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityBoundaryVisualizationProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 42bc27a194714d4bb17f6b61d5defe1d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs b/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs new file mode 100644 index 000000000..c779fb8ff --- /dev/null +++ b/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs @@ -0,0 +1,102 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityCameraProfile))] + public class MixedRealityCameraProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty isCameraPersistent; + private SerializedProperty opaqueNearClip; + private SerializedProperty opaqueClearFlags; + private SerializedProperty opaqueBackgroundColor; + private SerializedProperty opaqueQualityLevel; + + private SerializedProperty transparentNearClip; + private SerializedProperty transparentClearFlags; + private SerializedProperty transparentBackgroundColor; + private SerializedProperty transparentQualityLevel; + + private readonly GUIContent nearClipTitle = new GUIContent("Near Clip"); + private readonly GUIContent clearFlagsTitle = new GUIContent("Clear Flags"); + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + isCameraPersistent = serializedObject.FindProperty("isCameraPersistent"); + opaqueNearClip = serializedObject.FindProperty("nearClipPlaneOpaqueDisplay"); + opaqueClearFlags = serializedObject.FindProperty("cameraClearFlagsOpaqueDisplay"); + opaqueBackgroundColor = serializedObject.FindProperty("backgroundColorOpaqueDisplay"); + opaqueQualityLevel = serializedObject.FindProperty("opaqueQualityLevel"); + + transparentNearClip = serializedObject.FindProperty("nearClipPlaneTransparentDisplay"); + transparentClearFlags = serializedObject.FindProperty("cameraClearFlagsTransparentDisplay"); + transparentBackgroundColor = serializedObject.FindProperty("backgroundColorTransparentDisplay"); + transparentQualityLevel = serializedObject.FindProperty("transparentQualityLevel"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Camera Profile", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("The Camera Profile helps tweak camera settings no matter what platform you're building for.", MessageType.Info); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Global Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(isCameraPersistent); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Opaque Display Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(opaqueNearClip, nearClipTitle); + EditorGUILayout.PropertyField(opaqueClearFlags, clearFlagsTitle); + + if ((CameraClearFlags)opaqueClearFlags.intValue == CameraClearFlags.Color) + { + opaqueBackgroundColor.colorValue = EditorGUILayout.ColorField("Background Color", opaqueBackgroundColor.colorValue); + } + + opaqueQualityLevel.intValue = EditorGUILayout.Popup("Quality Setting", opaqueQualityLevel.intValue, QualitySettings.names); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Transparent Display Settings:", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(transparentNearClip, nearClipTitle); + EditorGUILayout.PropertyField(transparentClearFlags, clearFlagsTitle); + + if ((CameraClearFlags)transparentClearFlags.intValue == CameraClearFlags.Color) + { + transparentBackgroundColor.colorValue = EditorGUILayout.ColorField("Background Color", transparentBackgroundColor.colorValue); + } + + transparentQualityLevel.intValue = EditorGUILayout.Popup("Quality Setting", transparentQualityLevel.intValue, QualitySettings.names); + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs.meta new file mode 100644 index 000000000..4688de399 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityCameraProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 347c895a84de4b00beb369cb79080d94 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs b/Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs new file mode 100644 index 000000000..0102dfa37 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs @@ -0,0 +1,161 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Providers.Controllers; +using XRTK.Definitions; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityControllerDataProvidersProfile))] + public class MixedRealityControllerDataProviderProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent AddControllerDataProviderContent = new GUIContent("+ Add a New Controller Data Provider"); + private static readonly GUIContent RemoveControllerDataProviderContent = new GUIContent("-", "Remove Controller Data Provider"); + private static readonly GUIContent ProfileContent = new GUIContent("Profile"); + + private SerializedProperty controllerDataProviders; + + private bool[] foldouts = null; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled || + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + return; + } + + controllerDataProviders = serializedObject.FindProperty("registeredControllerDataProviders"); + foldouts = new bool[controllerDataProviders.arraySize]; + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Controller Data Providers", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Use this profile to define all the input sources your application can get input data from.", MessageType.Info); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + + EditorGUILayout.Space(); + + bool changed = false; + + if (GUILayout.Button(AddControllerDataProviderContent, EditorStyles.miniButton)) + { + controllerDataProviders.arraySize += 1; + var newConfiguration = controllerDataProviders.GetArrayElementAtIndex(controllerDataProviders.arraySize - 1); + var dataProviderType = newConfiguration.FindPropertyRelative("dataProviderType"); + var dataProviderName = newConfiguration.FindPropertyRelative("dataProviderName"); + var priority = newConfiguration.FindPropertyRelative("priority"); + var runtimePlatform = newConfiguration.FindPropertyRelative("runtimePlatform"); + var profile = newConfiguration.FindPropertyRelative("profile"); + + serializedObject.ApplyModifiedProperties(); + dataProviderType.FindPropertyRelative("reference").stringValue = string.Empty; + dataProviderName.stringValue = "New Controller Data Provider"; + priority.intValue = 5; + runtimePlatform.intValue = 0; + profile.objectReferenceValue = null; + serializedObject.ApplyModifiedProperties(); + foldouts = new bool[controllerDataProviders.arraySize]; + changed = true; + } + + EditorGUILayout.Space(); + EditorGUILayout.BeginVertical(); + + for (int i = 0; i < controllerDataProviders.arraySize; i++) + { + var controllerConfiguration = controllerDataProviders.GetArrayElementAtIndex(i); + var dataProviderName = controllerConfiguration.FindPropertyRelative("dataProviderName"); + var dataProviderType = controllerConfiguration.FindPropertyRelative("dataProviderType"); + var priority = controllerConfiguration.FindPropertyRelative("priority"); + var runtimePlatform = controllerConfiguration.FindPropertyRelative("runtimePlatform"); + var profile = controllerConfiguration.FindPropertyRelative("profile"); + + EditorGUILayout.BeginHorizontal(); + foldouts[i] = EditorGUILayout.Foldout(foldouts[i], dataProviderName.stringValue, true); + + if (GUILayout.Button(RemoveControllerDataProviderContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + controllerDataProviders.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + foldouts = new bool[controllerDataProviders.arraySize]; + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + return; + } + + EditorGUILayout.EndHorizontal(); + + if (foldouts[i]) + { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(dataProviderType); + EditorGUILayout.PropertyField(dataProviderName); + EditorGUILayout.PropertyField(priority); + EditorGUILayout.PropertyField(runtimePlatform); + RenderProfile(profile, ProfileContent, false); + + if (EditorGUI.EndChangeCheck()) + { + changed = true; + } + + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + } + + EditorGUILayout.EndVertical(); + + serializedObject.ApplyModifiedProperties(); + + if (changed) + { + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(MixedRealityToolkit.Instance.ActiveProfile); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs.meta new file mode 100644 index 000000000..7dccc8f1e --- /dev/null +++ b/Inspectors/Profiles/MixedRealityControllerDataProviderProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1ddcf71794a4693a8ebaf4d2154d291 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs b/Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs new file mode 100644 index 000000000..ab7bdaafb --- /dev/null +++ b/Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs @@ -0,0 +1,169 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Extensions; +using XRTK.Inspectors.Utilities; +using XRTK.Providers.Controllers; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityControllerMappingProfiles))] + public class MixedRealityControllerMappingProfilesInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent AddMappingDefinitionContent = new GUIContent("+ Add a new Mapping Definition"); + private static readonly GUIContent RemoveMappingDefinitionContent = new GUIContent("-", "Remove Mapping Definition"); + + private SerializedProperty controllerMappingProfiles; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled || + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + return; + } + + controllerMappingProfiles = serializedObject.FindProperty("controllerMappingProfiles"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Controller Input Mappings", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Use this profile to define all the controllers and their inputs your users will be able to use in your application.\n\n" + + "You'll want to define all your Input Actions and Controller Data Providers first so you can wire up actions to hardware sensors, controllers, gestures, and other input devices.", MessageType.Info); + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + EditorGUILayout.HelpBox("No input actions found, please specify a input action profile in the input system profile.", MessageType.Error); + return; + } + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.ControllerDataProvidersProfile == null) + { + EditorGUILayout.HelpBox("No input actions found, please specify a controller data providers profile in the input system profile.", MessageType.Error); + return; + } + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + + EditorGUILayout.Space(); + + bool changed = false; + + if (GUILayout.Button(AddMappingDefinitionContent, EditorStyles.miniButton)) + { + controllerMappingProfiles.arraySize += 1; + var newItem = controllerMappingProfiles.GetArrayElementAtIndex(controllerMappingProfiles.arraySize - 1); + newItem.objectReferenceValue = null; + changed = true; + } + + EditorGUILayout.Space(); + + for (int i = 0; i < controllerMappingProfiles.arraySize; i++) + { + var profileChanged = false; + var controllerProfile = controllerMappingProfiles.GetArrayElementAtIndex(i); + var profileObject = controllerProfile.objectReferenceValue; + var profileName = "Assign or create a profile"; + + if (profileObject != null) + { + profileName = controllerProfile.objectReferenceValue.name.ToProperCase().Replace("Default ", string.Empty).Replace(" Controller Mapping Profile", string.Empty); + } + + EditorGUILayout.BeginHorizontal(); + profileChanged |= RenderProfile(controllerProfile, new GUIContent(profileName), false); + + if (profileChanged && controllerProfile.objectReferenceValue != null) + { + var knownProfiles = new List(); + + for (int j = 0; j < controllerMappingProfiles.arraySize; j++) + { + var knownProfile = controllerMappingProfiles.GetArrayElementAtIndex(j); + + if (knownProfile.objectReferenceValue != null) + { + knownProfiles.Add(knownProfile.objectReferenceValue); + } + } + + var count = 0; + + for (int j = 0; j < knownProfiles.Count; j++) + { + if (knownProfiles[j] == controllerProfile.objectReferenceValue) + { + count++; + } + } + + if (count >= 2) + { + Debug.LogWarning($"{controllerProfile.objectReferenceValue.name} is already registered!"); + controllerProfile.objectReferenceValue = null; + serializedObject.ApplyModifiedProperties(); + break; + } + } + + changed |= profileChanged; + + if (GUILayout.Button(RemoveMappingDefinitionContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + controllerMappingProfiles.DeleteArrayElementAtIndex(i); + changed = true; + } + + EditorGUILayout.EndHorizontal(); + } + + serializedObject.ApplyModifiedProperties(); + + if (changed) + { + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(MixedRealityToolkit.Instance.ActiveProfile); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs.meta b/Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs.meta new file mode 100644 index 000000000..a42ebf4ae --- /dev/null +++ b/Inspectors/Profiles/MixedRealityControllerMappingProfilesInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 327f4de39b434ed188f7e251759b7e90 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs b/Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs new file mode 100644 index 000000000..3c58d218b --- /dev/null +++ b/Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs @@ -0,0 +1,281 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Extensions; +using UnityEditor; +using UnityEngine; +using XRTK.Providers.Controllers; +using XRTK.Providers.Controllers.UnityInput; +using XRTK.Definitions; +using XRTK.Definitions.Utilities; +using XRTK.Inspectors.Utilities; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityControllerVisualizationProfile))] + public class MixedRealityControllerVisualizationProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent ControllerAddButtonContent = new GUIContent("+ Add a New Controller Definition"); + private static readonly GUIContent ControllerMinusButtonContent = new GUIContent("-", "Remove Controller Definition"); + + private static readonly GUIContent[] HandednessSelections = + { + new GUIContent("Left Hand"), + new GUIContent("Right Hand"), + }; + + private SerializedProperty renderMotionControllers; + private SerializedProperty controllerVisualizationType; + private SerializedProperty useDefaultModels; + private SerializedProperty globalLeftHandModel; + private SerializedProperty globalRightHandModel; + private SerializedProperty controllerVisualizationSettings; + + private MixedRealityControllerVisualizationProfile thisProfile; + + private float defaultLabelWidth; + private float defaultFieldWidth; + + protected override void OnEnable() + { + base.OnEnable(); + + defaultLabelWidth = EditorGUIUtility.labelWidth; + defaultFieldWidth = EditorGUIUtility.fieldWidth; + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + thisProfile = target as MixedRealityControllerVisualizationProfile; + + renderMotionControllers = serializedObject.FindProperty("renderMotionControllers"); + controllerVisualizationType = serializedObject.FindProperty("controllerVisualizationType"); + useDefaultModels = serializedObject.FindProperty("useDefaultModels"); + globalLeftHandModel = serializedObject.FindProperty("globalLeftHandModel"); + globalRightHandModel = serializedObject.FindProperty("globalRightHandModel"); + controllerVisualizationSettings = serializedObject.FindProperty("controllerVisualizationSettings"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Controller Visualizations", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Define all the custom controller visualizations you'd like to use for each controller type when they're rendered in the scene.\n\n" + + "Global settings are the default fallback, and any specific controller definitions take precedence.", MessageType.Info); + serializedObject.Update(); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + EditorGUIUtility.labelWidth = 168f; + EditorGUILayout.PropertyField(renderMotionControllers); + + if (renderMotionControllers.boolValue) + { + var leftHandModelPrefab = globalLeftHandModel.objectReferenceValue as GameObject; + var rightHandModelPrefab = globalRightHandModel.objectReferenceValue as GameObject; + + EditorGUILayout.PropertyField(controllerVisualizationType); + + if (thisProfile.ControllerVisualizationType == null || + thisProfile.ControllerVisualizationType.Type == null) + { + EditorGUILayout.HelpBox("A controller visualization type must be defined!", MessageType.Error); + } + + EditorGUILayout.PropertyField(useDefaultModels); + + if (useDefaultModels.boolValue && (leftHandModelPrefab != null || rightHandModelPrefab != null)) + { + EditorGUILayout.HelpBox("When default models are used, the global left and right hand models will only be used if the default models cannot be loaded from the driver.", MessageType.Warning); + } + + EditorGUI.BeginChangeCheck(); + leftHandModelPrefab = EditorGUILayout.ObjectField(new GUIContent(globalLeftHandModel.displayName, "Note: If the default model is not found, the fallback is the global left hand model."), leftHandModelPrefab, typeof(GameObject), false) as GameObject; + + if (EditorGUI.EndChangeCheck() && CheckVisualizer(leftHandModelPrefab)) + { + globalLeftHandModel.objectReferenceValue = leftHandModelPrefab; + } + + EditorGUI.BeginChangeCheck(); + rightHandModelPrefab = EditorGUILayout.ObjectField(new GUIContent(globalRightHandModel.displayName, "Note: If the default model is not found, the fallback is the global right hand model."), rightHandModelPrefab, typeof(GameObject), false) as GameObject; + + if (EditorGUI.EndChangeCheck() && CheckVisualizer(rightHandModelPrefab)) + { + globalRightHandModel.objectReferenceValue = rightHandModelPrefab; + } + + EditorGUIUtility.labelWidth = defaultLabelWidth; + + RenderControllerList(controllerVisualizationSettings); + } + + serializedObject.ApplyModifiedProperties(); + } + + private void RenderControllerList(SerializedProperty controllerList) + { + if (thisProfile.ControllerVisualizationSettings.Length != controllerList.arraySize) { return; } + + EditorGUILayout.Space(); + + if (GUILayout.Button(ControllerAddButtonContent, EditorStyles.miniButton)) + { + controllerList.InsertArrayElementAtIndex(controllerList.arraySize); + var index = controllerList.arraySize - 1; + var controllerSetting = controllerList.GetArrayElementAtIndex(index); + var mixedRealityControllerMappingDescription = controllerSetting.FindPropertyRelative("description"); + mixedRealityControllerMappingDescription.stringValue = typeof(GenericJoystickController).Name; + var mixedRealityControllerHandedness = controllerSetting.FindPropertyRelative("handedness"); + mixedRealityControllerHandedness.intValue = 1; + serializedObject.ApplyModifiedProperties(); + thisProfile.ControllerVisualizationSettings[index].ControllerType.Type = typeof(GenericJoystickController); + return; + } + + for (int i = 0; i < controllerList.arraySize; i++) + { + EditorGUILayout.Space(); + EditorGUILayout.BeginHorizontal(); + + EditorGUIUtility.labelWidth = 64f; + EditorGUIUtility.fieldWidth = 64f; + var controllerSetting = controllerList.GetArrayElementAtIndex(i); + var mixedRealityControllerMappingDescription = controllerSetting.FindPropertyRelative("description"); + bool hasValidType = thisProfile.ControllerVisualizationSettings[i].ControllerType != null && + thisProfile.ControllerVisualizationSettings[i].ControllerType.Type != null; + + mixedRealityControllerMappingDescription.stringValue = hasValidType + ? thisProfile.ControllerVisualizationSettings[i].ControllerType.Type.Name.ToProperCase() + : "Undefined Controller"; + + serializedObject.ApplyModifiedProperties(); + var mixedRealityControllerHandedness = controllerSetting.FindPropertyRelative("handedness"); + EditorGUILayout.LabelField($"{mixedRealityControllerMappingDescription.stringValue} {((Handedness)mixedRealityControllerHandedness.intValue).ToString().ToProperCase()} Hand"); + + EditorGUIUtility.fieldWidth = defaultFieldWidth; + EditorGUIUtility.labelWidth = defaultLabelWidth; + + if (GUILayout.Button(ControllerMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + controllerList.DeleteArrayElementAtIndex(i); + EditorGUILayout.EndHorizontal(); + GUILayout.EndVertical(); + return; + } + + EditorGUILayout.EndHorizontal(); + + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(controllerSetting.FindPropertyRelative("controllerType")); + EditorGUILayout.PropertyField(controllerSetting.FindPropertyRelative("controllerVisualizationType")); + + if (!hasValidType) + { + EditorGUILayout.HelpBox("A controller type must be defined!", MessageType.Error); + } + + var handednessValue = mixedRealityControllerHandedness.intValue - 1; + + // Reset in case it was set to something other than left or right. + if (handednessValue < 0 || handednessValue > 1) { handednessValue = 0; } + + EditorGUI.BeginChangeCheck(); + handednessValue = EditorGUILayout.IntPopup(new GUIContent(mixedRealityControllerHandedness.displayName, mixedRealityControllerHandedness.tooltip), handednessValue, HandednessSelections, null); + + if (EditorGUI.EndChangeCheck()) + { + mixedRealityControllerHandedness.intValue = handednessValue + 1; + } + + EditorGUILayout.PropertyField(controllerSetting.FindPropertyRelative("poseAction")); + EditorGUILayout.PropertyField(controllerSetting.FindPropertyRelative("alternatePoseAction")); + + var overrideModel = controllerSetting.FindPropertyRelative("overrideModel"); + var overrideModelPrefab = overrideModel.objectReferenceValue as GameObject; + + var controllerUseDefaultModelOverride = controllerSetting.FindPropertyRelative("useDefaultModel"); + EditorGUILayout.PropertyField(controllerUseDefaultModelOverride); + + if (controllerUseDefaultModelOverride.boolValue && overrideModelPrefab != null) + { + EditorGUILayout.HelpBox("When default model is used, the override model will only be used if the default model cannot be loaded from the driver.", MessageType.Warning); + } + + EditorGUI.BeginChangeCheck(); + overrideModelPrefab = EditorGUILayout.ObjectField(new GUIContent(overrideModel.displayName, "If no override model is set, the global model is used."), overrideModelPrefab, typeof(GameObject), false) as GameObject; + + if (EditorGUI.EndChangeCheck() && CheckVisualizer(overrideModelPrefab)) + { + overrideModel.objectReferenceValue = overrideModelPrefab; + } + + EditorGUI.indentLevel--; + } + } + + private bool CheckVisualizer(GameObject modelPrefab) + { + if (modelPrefab == null) { return true; } + + if (PrefabUtility.GetPrefabInstanceStatus(modelPrefab) == PrefabInstanceStatus.NotAPrefab) + { + Debug.LogWarning("Assigned GameObject must be a prefab"); + return false; + } + + var componentList = modelPrefab.GetComponentsInChildren(); + + if (componentList == null || componentList.Length == 0) + { + if (thisProfile.ControllerVisualizationType != null && + thisProfile.ControllerVisualizationType.Type != null) + { + modelPrefab.AddComponent(thisProfile.ControllerVisualizationType.Type); + return true; + } + + Debug.LogError("No controller visualization type specified!"); + } + else if (componentList.Length == 1) + { + return true; + } + else if (componentList.Length > 1) + { + Debug.LogWarning("Found too many IMixedRealityControllerVisualizer components on your prefab. There can only be one."); + } + + return false; + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs.meta new file mode 100644 index 000000000..beca49c0a --- /dev/null +++ b/Inspectors/Profiles/MixedRealityControllerVisualizationProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f589f92b6a7f438992448a94597516d9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs b/Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs new file mode 100644 index 000000000..74c191624 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs @@ -0,0 +1,83 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.Diagnostics; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityDiagnosticsProfile))] + public class MixedRealityDiagnosticsSystemProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty visible; + private SerializedProperty handlerType; + private SerializedProperty showFps; + private SerializedProperty fpsBuffer; + private SerializedProperty showCpu; + private SerializedProperty cpuBuffer; + private SerializedProperty showMemory; + private SerializedProperty memoryBuffer; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + visible = serializedObject.FindProperty("visible"); + handlerType = serializedObject.FindProperty("handlerType"); + showCpu = serializedObject.FindProperty("showCpu"); + cpuBuffer = serializedObject.FindProperty("cpuBuffer"); + showFps = serializedObject.FindProperty("showFps"); + fpsBuffer = serializedObject.FindProperty("fpsBuffer"); + showMemory = serializedObject.FindProperty("showMemory"); + memoryBuffer = serializedObject.FindProperty("memoryBuffer"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Diagnostic Visualization Options", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Diagnostic visualizations can help monitor system resources and performance inside an application.", MessageType.Info); + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(visible); + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(handlerType); + EditorGUILayout.Space(); + + EditorGUILayout.PropertyField(showCpu); + EditorGUILayout.PropertyField(cpuBuffer); + EditorGUILayout.PropertyField(showFps); + EditorGUILayout.PropertyField(fpsBuffer); + EditorGUILayout.PropertyField(showMemory); + EditorGUILayout.PropertyField(memoryBuffer); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs.meta new file mode 100644 index 000000000..77f6db66c --- /dev/null +++ b/Inspectors/Profiles/MixedRealityDiagnosticsSystemProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b634cd7dea1b42e695288b9f49d800f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs b/Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs new file mode 100644 index 000000000..c2f114171 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs @@ -0,0 +1,226 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityGesturesProfile))] + public class MixedRealityGesturesProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent MinusButtonContent = new GUIContent("-", "Remove defined Gesture"); + private static readonly GUIContent AddButtonContent = new GUIContent("+ Add a New defined Gesture"); + private static readonly GUIContent DescriptionContent = new GUIContent("Description", "The human readable description of the Gesture."); + private static readonly GUIContent GestureTypeContent = new GUIContent("Gesture Type", "The type of Gesture that will trigger the action."); + private static readonly GUIContent ActionContent = new GUIContent("Action", "The action to trigger when a Gesture is recognized."); + + private SerializedProperty gestures; + + private MixedRealityGesturesProfile thisProfile; + private static GUIContent[] allGestureLabels; + private static int[] allGestureIds; + private static GUIContent[] actionLabels; + private static int[] actionIds; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) { return; } + + gestures = serializedObject.FindProperty("gestures"); + thisProfile = target as MixedRealityGesturesProfile; + Debug.Assert(thisProfile != null); + + if (MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile != null) + { + actionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Select(action => new GUIContent(action.Description)) + .Prepend(new GUIContent("None")).ToArray(); + actionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Select(action => (int)action.Id) + .Prepend(0).ToArray(); + } + + UpdateGestureLabels(); + } + + private void UpdateGestureLabels() + { + var allGestureTypeNames = Enum.GetNames(typeof(GestureInputType)); + + var tempIds = new List(); + var tempContent = new List(); + + for (int i = 0; i < allGestureTypeNames.Length; i++) + { + if (allGestureTypeNames[i].Equals("None") || + thisProfile.Gestures.All(mapping => !allGestureTypeNames[i].Equals(mapping.GestureType.ToString()))) + { + tempContent.Add(new GUIContent(allGestureTypeNames[i])); + tempIds.Add(i); + } + } + + allGestureIds = tempIds.ToArray(); + allGestureLabels = tempContent.ToArray(); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) { return; } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Gesture Input", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("This gesture map is any and all movements of part the user's body, especially a hand or the head, that raise actions through the input system.\n\nNote: Defined controllers can look up the list of gestures and raise the events based on specific criteria.", MessageType.Info); + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + EditorGUILayout.HelpBox("No input actions found, please specify a input action profile in the main configuration.", MessageType.Error); + return; + } + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Defined Recognizable Gestures", EditorStyles.boldLabel); + RenderList(gestures); + serializedObject.ApplyModifiedProperties(); + } + + private void RenderList(SerializedProperty list) + { + EditorGUILayout.Space(); + GUILayout.BeginVertical(); + + if (GUILayout.Button(AddButtonContent, EditorStyles.miniButton)) + { + list.arraySize += 1; + var speechCommand = list.GetArrayElementAtIndex(list.arraySize - 1); + var keyword = speechCommand.FindPropertyRelative("description"); + keyword.stringValue = string.Empty; + var gestureType = speechCommand.FindPropertyRelative("gestureType"); + gestureType.intValue = (int)GestureInputType.None; + var action = speechCommand.FindPropertyRelative("action"); + var actionId = action.FindPropertyRelative("id"); + actionId.intValue = 0; + var actionDescription = action.FindPropertyRelative("description"); + actionDescription.stringValue = string.Empty; + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + actionConstraint.intValue = 0; + } + + GUILayout.Space(12f); + + if (list == null || list.arraySize == 0) + { + EditorGUILayout.HelpBox("Define a new Gesture.", MessageType.Warning); + GUILayout.EndVertical(); + UpdateGestureLabels(); + return; + } + + GUILayout.BeginVertical(); + + GUILayout.BeginHorizontal(); + var labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 24f; + EditorGUILayout.LabelField(DescriptionContent, GUILayout.ExpandWidth(true)); + EditorGUILayout.LabelField(GestureTypeContent, GUILayout.Width(80f)); + EditorGUILayout.LabelField(ActionContent, GUILayout.Width(64f)); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(24f)); + EditorGUIUtility.labelWidth = labelWidth; + GUILayout.EndHorizontal(); + + for (int i = 0; i < list.arraySize; i++) + { + EditorGUILayout.BeginHorizontal(); + SerializedProperty gesture = list.GetArrayElementAtIndex(i); + var keyword = gesture.FindPropertyRelative("description"); + var gestureType = gesture.FindPropertyRelative("gestureType"); + var action = gesture.FindPropertyRelative("action"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + + EditorGUILayout.PropertyField(keyword, GUIContent.none, GUILayout.ExpandWidth(true)); + + Debug.Assert(allGestureLabels.Length == allGestureIds.Length); + + var gestureLabels = new GUIContent[allGestureLabels.Length + 1]; + var gestureIds = new int[allGestureIds.Length + 1]; + + gestureLabels[0] = new GUIContent(((GestureInputType)gestureType.intValue).ToString()); + gestureIds[0] = gestureType.intValue; + + for (int j = 0; j < allGestureLabels.Length; j++) + { + gestureLabels[j + 1] = allGestureLabels[j]; + gestureIds[j + 1] = allGestureIds[j]; + } + + EditorGUI.BeginChangeCheck(); + gestureType.intValue = EditorGUILayout.IntPopup(GUIContent.none, gestureType.intValue, gestureLabels, gestureIds, GUILayout.Width(80f)); + + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + UpdateGestureLabels(); + } + + EditorGUI.BeginChangeCheck(); + actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, actionLabels, actionIds, GUILayout.Width(64f)); + + if (EditorGUI.EndChangeCheck()) + { + MixedRealityInputAction inputAction = actionId.intValue == 0 ? MixedRealityInputAction.None : MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; + actionDescription.stringValue = inputAction.Description; + actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + serializedObject.ApplyModifiedProperties(); + } + + if (GUILayout.Button(MinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + list.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + UpdateGestureLabels(); + } + + EditorGUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + GUILayout.EndVertical(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs.meta new file mode 100644 index 000000000..8e5f9971e --- /dev/null +++ b/Inspectors/Profiles/MixedRealityGesturesProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95bcce148a934c7fa24513b319d6617c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs b/Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs new file mode 100644 index 000000000..4237e134a --- /dev/null +++ b/Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs @@ -0,0 +1,568 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Inspectors; +using XRTK.Inspectors.Profiles; +using XRTK.Inspectors.Utilities; +using XRTK.Services; +using System.Linq; +using UnityEditor; +using UnityEngine; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityInputActionRulesProfile))] + public class MixedRealityInputActionRulesInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent RuleAddButtonContent = new GUIContent("+ Add a New Rule Definition"); + private static readonly GUIContent RuleMinusButtonContent = new GUIContent("-", "Remove Rule Definition"); + private static readonly GUIContent BaseActionContent = new GUIContent("Base Input Action:", "The Action that will raise new actions based on the criteria met"); + private static readonly GUIContent RuleActionContent = new GUIContent("Rule Input Action:", "The Action that will be raised when the criteria is met"); + private static readonly GUIContent CriteriaContent = new GUIContent("Action Criteria:", "The Criteria that must be met in order to raise the new Action"); + + private SerializedProperty inputActionRulesDigital; + private SerializedProperty inputActionRulesSingleAxis; + private SerializedProperty inputActionRulesDualAxis; + private SerializedProperty inputActionRulesVectorAxis; + private SerializedProperty inputActionRulesQuaternionAxis; + private SerializedProperty inputActionRulesPoseAxis; + + private int[] baseActionIds; + private string[] baseActionLabels; + private static int[] ruleActionIds = new int[0]; + private static string[] ruleActionLabels = new string[0]; + + private int selectedBaseActionId = 0; + private int selectedRuleActionId = 0; + + private static MixedRealityInputAction currentBaseAction = MixedRealityInputAction.None; + private static MixedRealityInputAction currentRuleAction = MixedRealityInputAction.None; + + private bool currentBoolCriteria; + private float currentSingleAxisCriteria; + private Vector2 currentDualAxisCriteria; + private Vector3 currentVectorCriteria; + private Quaternion currentQuaternionCriteria; + private MixedRealityPose currentPoseCriteria; + + private bool[] digitalFoldouts; + private bool[] singleAxisFoldouts; + private bool[] dualAxisFoldouts; + private bool[] vectorFoldouts; + private bool[] quaternionFoldouts; + private bool[] poseFoldouts; + + private MixedRealityInputActionRulesProfile thisProfile; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false) || + !MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled || + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + return; + } + + inputActionRulesDigital = serializedObject.FindProperty("inputActionRulesDigital"); + inputActionRulesSingleAxis = serializedObject.FindProperty("inputActionRulesSingleAxis"); + inputActionRulesDualAxis = serializedObject.FindProperty("inputActionRulesDualAxis"); + inputActionRulesVectorAxis = serializedObject.FindProperty("inputActionRulesVectorAxis"); + inputActionRulesQuaternionAxis = serializedObject.FindProperty("inputActionRulesQuaternionAxis"); + inputActionRulesPoseAxis = serializedObject.FindProperty("inputActionRulesPoseAxis"); + + baseActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(action => action.AxisConstraint != AxisType.None && action.AxisConstraint != AxisType.Raw) + .Select(action => action.Description) + .ToArray(); + + baseActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(action => action.AxisConstraint != AxisType.None && action.AxisConstraint != AxisType.Raw) + .Select(action => (int)action.Id) + .ToArray(); + + thisProfile = target as MixedRealityInputActionRulesProfile; + + ResetCriteria(); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + EditorGUILayout.HelpBox("No Input Actions profile was specified.", MessageType.Error); + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Input Action Rules Profile", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Input Action Rules help define alternative Actions that will be raised based on specific criteria.\n\n" + + "You can create new rules by assigning a base Input Action below, then assigning the criteria you'd like to meet. When the criteria is met, the Rule's Action will be raised with the criteria value.\n\n" + + "Note: Rules can only be created for the same axis constraints.", MessageType.Info); + + EditorGUILayout.Space(); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + var isGuiLocked = !(MixedRealityPreferences.LockProfiles && !((BaseMixedRealityProfile)target).IsCustomProfile); + GUI.enabled = isGuiLocked; + + serializedObject.Update(); + + selectedBaseActionId = RenderBaseInputAction(selectedBaseActionId, out currentBaseAction); + GUI.enabled = isGuiLocked && currentBaseAction != MixedRealityInputAction.None; + RenderCriteriaField(currentBaseAction); + + if (selectedBaseActionId == selectedRuleActionId) + { + selectedRuleActionId = 0; + } + + selectedRuleActionId = RenderRuleInputAction(selectedRuleActionId, out currentRuleAction); + + EditorGUILayout.Space(); + + GUI.enabled = isGuiLocked && + !RuleExists() && + currentBaseAction != MixedRealityInputAction.None && + currentRuleAction != MixedRealityInputAction.None && + currentBaseAction.AxisConstraint != AxisType.None && + currentBaseAction.AxisConstraint != AxisType.Raw; + + if (GUILayout.Button(RuleAddButtonContent, EditorStyles.miniButton)) + { + AddRule(); + ResetCriteria(); + } + + GUI.enabled = isGuiLocked; + + EditorGUILayout.Space(); + + var isWideMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + + RenderList(inputActionRulesDigital, digitalFoldouts); + RenderList(inputActionRulesSingleAxis, singleAxisFoldouts); + RenderList(inputActionRulesDualAxis, dualAxisFoldouts); + RenderList(inputActionRulesVectorAxis, vectorFoldouts); + RenderList(inputActionRulesQuaternionAxis, quaternionFoldouts); + RenderList(inputActionRulesPoseAxis, poseFoldouts); + + EditorGUIUtility.wideMode = isWideMode; + serializedObject.ApplyModifiedProperties(); + } + + private bool RuleExists() + { + switch (currentBaseAction.AxisConstraint) + { + default: + return false; + case AxisType.Digital: + return thisProfile.InputActionRulesDigital.Any(digitalRule => digitalRule.BaseAction == currentBaseAction && digitalRule.RuleAction == currentRuleAction && digitalRule.Criteria == currentBoolCriteria); + case AxisType.SingleAxis: + return thisProfile.InputActionRulesSingleAxis.Any(singleAxisRule => singleAxisRule.BaseAction == currentBaseAction && singleAxisRule.RuleAction == currentRuleAction && singleAxisRule.Criteria.Equals(currentSingleAxisCriteria)); + case AxisType.DualAxis: + return thisProfile.InputActionRulesDualAxis.Any(dualAxisRule => dualAxisRule.BaseAction == currentBaseAction && dualAxisRule.RuleAction == currentRuleAction && dualAxisRule.Criteria == currentDualAxisCriteria); + case AxisType.ThreeDofPosition: + return thisProfile.InputActionRulesVectorAxis.Any(vectorAxisRule => vectorAxisRule.BaseAction == currentBaseAction && vectorAxisRule.RuleAction == currentRuleAction && vectorAxisRule.Criteria == currentVectorCriteria); + case AxisType.ThreeDofRotation: + return thisProfile.InputActionRulesQuaternionAxis.Any(quaternionRule => quaternionRule.BaseAction == currentBaseAction && quaternionRule.RuleAction == currentRuleAction && quaternionRule.Criteria == currentQuaternionCriteria); + case AxisType.SixDof: + return thisProfile.InputActionRulesPoseAxis.Any(poseRule => poseRule.BaseAction == currentBaseAction && poseRule.RuleAction == currentRuleAction && poseRule.Criteria == currentPoseCriteria); + } + } + + private void ResetCriteria() + { + selectedBaseActionId = 0; + selectedRuleActionId = 0; + currentBaseAction = MixedRealityInputAction.None; + currentRuleAction = MixedRealityInputAction.None; + currentBoolCriteria = false; + currentSingleAxisCriteria = 0f; + currentDualAxisCriteria = Vector2.zero; + currentVectorCriteria = Vector3.zero; + currentQuaternionCriteria = Quaternion.identity; + currentPoseCriteria = MixedRealityPose.ZeroIdentity; + + digitalFoldouts = new bool[inputActionRulesDigital.arraySize]; + singleAxisFoldouts = new bool[inputActionRulesSingleAxis.arraySize]; + dualAxisFoldouts = new bool[inputActionRulesDualAxis.arraySize]; + vectorFoldouts = new bool[inputActionRulesVectorAxis.arraySize]; + quaternionFoldouts = new bool[inputActionRulesQuaternionAxis.arraySize]; + poseFoldouts = new bool[inputActionRulesPoseAxis.arraySize]; + } + + private static void GetCompatibleActions(MixedRealityInputAction baseAction) + { + ruleActionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == baseAction.AxisConstraint && inputAction.Id != baseAction.Id) + .Select(action => action.Description) + .ToArray(); + + ruleActionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions + .Where(inputAction => inputAction.AxisConstraint == baseAction.AxisConstraint && inputAction.Id != baseAction.Id) + .Select(action => (int)action.Id) + .ToArray(); + } + + private void RenderCriteriaField(MixedRealityInputAction action, SerializedProperty criteriaValue = null) + { + var isWideMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + if (action != MixedRealityInputAction.None) + { + switch (action.AxisConstraint) + { + default: + EditorGUILayout.HelpBox("Base rule must have a valid axis constraint.", MessageType.Warning); + break; + case AxisType.Digital: + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(CriteriaContent, GUILayout.Width(128)); + EditorGUI.BeginChangeCheck(); + var boolValue = EditorGUILayout.Toggle(GUIContent.none, criteriaValue?.boolValue ?? currentBoolCriteria, GUILayout.Width(64), GUILayout.ExpandWidth(true)); + + if (EditorGUI.EndChangeCheck()) + { + if (criteriaValue != null) + { + criteriaValue.boolValue = boolValue; + } + else + { + currentBoolCriteria = boolValue; + } + } + + EditorGUILayout.EndHorizontal(); + break; + case AxisType.SingleAxis: + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(CriteriaContent, GUILayout.Width(128)); + EditorGUI.BeginChangeCheck(); + var floatValue = EditorGUILayout.FloatField(GUIContent.none, criteriaValue?.floatValue ?? currentSingleAxisCriteria, GUILayout.Width(64), GUILayout.ExpandWidth(true)); + + if (EditorGUI.EndChangeCheck()) + { + if (criteriaValue != null) + { + criteriaValue.floatValue = floatValue; + } + else + { + currentSingleAxisCriteria = floatValue; + } + } + + EditorGUILayout.EndHorizontal(); + break; + case AxisType.DualAxis: + EditorGUILayout.LabelField(CriteriaContent, GUILayout.Width(128)); + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + var dualAxisValue = EditorGUILayout.Vector2Field("Position", criteriaValue?.vector2Value ?? currentDualAxisCriteria, GUILayout.Width(64), GUILayout.ExpandWidth(true)); + + if (EditorGUI.EndChangeCheck()) + { + if (criteriaValue != null) + { + criteriaValue.vector2Value = dualAxisValue; + } + else + { + currentDualAxisCriteria = dualAxisValue; + } + } + + EditorGUI.indentLevel--; + break; + case AxisType.ThreeDofPosition: + EditorGUILayout.LabelField(CriteriaContent, GUILayout.Width(128)); + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + var positionValue = EditorGUILayout.Vector3Field("Position", criteriaValue?.vector3Value ?? currentVectorCriteria, GUILayout.ExpandWidth(true)); + + if (EditorGUI.EndChangeCheck()) + { + if (criteriaValue != null) + { + criteriaValue.vector3Value = positionValue; + } + else + { + currentVectorCriteria = positionValue; + } + } + + EditorGUI.indentLevel--; + break; + case AxisType.ThreeDofRotation: + EditorGUILayout.LabelField(CriteriaContent, GUILayout.Width(128)); + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + var rotationValue = EditorGUILayout.Vector3Field("Rotation", criteriaValue?.quaternionValue.eulerAngles ?? currentQuaternionCriteria.eulerAngles, GUILayout.ExpandWidth(true)); + + if (EditorGUI.EndChangeCheck()) + { + if (criteriaValue != null) + { + criteriaValue.quaternionValue = Quaternion.Euler(rotationValue); + } + else + { + currentQuaternionCriteria = Quaternion.Euler(rotationValue); + } + } + + EditorGUI.indentLevel--; + break; + case AxisType.SixDof: + EditorGUILayout.LabelField(CriteriaContent, GUILayout.Width(128)); + EditorGUI.indentLevel++; + + var posePosition = currentPoseCriteria.Position; + var poseRotation = currentPoseCriteria.Rotation; + + if (criteriaValue != null) + { + posePosition = criteriaValue.FindPropertyRelative("position").vector3Value; + poseRotation = criteriaValue.FindPropertyRelative("rotation").quaternionValue; + } + + EditorGUI.BeginChangeCheck(); + posePosition = EditorGUILayout.Vector3Field("Position", posePosition); + + poseRotation.eulerAngles = EditorGUILayout.Vector3Field("Rotation", poseRotation.eulerAngles); + + if (EditorGUI.EndChangeCheck()) + { + if (criteriaValue != null) + { + criteriaValue.FindPropertyRelative("position").vector3Value = posePosition; + criteriaValue.FindPropertyRelative("rotation").quaternionValue = poseRotation; + } + else + { + currentPoseCriteria.Position = posePosition; + currentPoseCriteria.Rotation = poseRotation; + } + } + + EditorGUI.indentLevel--; + break; + } + + EditorGUIUtility.wideMode = isWideMode; + } + } + + private void AddRule() + { + SerializedProperty rule; + switch (currentBaseAction.AxisConstraint) + { + case AxisType.Digital: + inputActionRulesDigital.arraySize += 1; + rule = inputActionRulesDigital.GetArrayElementAtIndex(inputActionRulesDigital.arraySize - 1); + rule.FindPropertyRelative("criteria").boolValue = currentBoolCriteria; + break; + case AxisType.SingleAxis: + inputActionRulesSingleAxis.arraySize += 1; + rule = inputActionRulesSingleAxis.GetArrayElementAtIndex(inputActionRulesSingleAxis.arraySize - 1); + rule.FindPropertyRelative("criteria").floatValue = currentSingleAxisCriteria; + break; + case AxisType.DualAxis: + inputActionRulesDualAxis.arraySize += 1; + rule = inputActionRulesDualAxis.GetArrayElementAtIndex(inputActionRulesDualAxis.arraySize - 1); + rule.FindPropertyRelative("criteria").vector2Value = currentDualAxisCriteria; + break; + case AxisType.ThreeDofPosition: + inputActionRulesVectorAxis.arraySize += 1; + rule = inputActionRulesVectorAxis.GetArrayElementAtIndex(inputActionRulesVectorAxis.arraySize - 1); + rule.FindPropertyRelative("criteria").vector3Value = currentVectorCriteria; + break; + case AxisType.ThreeDofRotation: + inputActionRulesQuaternionAxis.arraySize += 1; + rule = inputActionRulesQuaternionAxis.GetArrayElementAtIndex(inputActionRulesQuaternionAxis.arraySize - 1); + rule.FindPropertyRelative("criteria").quaternionValue = currentQuaternionCriteria; + break; + case AxisType.SixDof: + inputActionRulesPoseAxis.arraySize += 1; + rule = inputActionRulesPoseAxis.GetArrayElementAtIndex(inputActionRulesPoseAxis.arraySize - 1); + var criteria = rule.FindPropertyRelative("criteria"); + criteria.FindPropertyRelative("position").vector3Value = currentPoseCriteria.Position; + criteria.FindPropertyRelative("rotation").quaternionValue = currentPoseCriteria.Rotation; + break; + default: + Debug.LogError("Invalid Axis Constraint!"); + return; + } + + var baseAction = rule.FindPropertyRelative("baseAction"); + var baseActionId = baseAction.FindPropertyRelative("id"); + var baseActionDescription = baseAction.FindPropertyRelative("description"); + var baseActionConstraint = baseAction.FindPropertyRelative("axisConstraint"); + + baseActionId.intValue = (int)currentBaseAction.Id; + baseActionDescription.stringValue = currentBaseAction.Description; + baseActionConstraint.intValue = (int)currentBaseAction.AxisConstraint; + + var ruleAction = rule.FindPropertyRelative("ruleAction"); + var ruleActionId = ruleAction.FindPropertyRelative("id"); + var ruleActionDescription = ruleAction.FindPropertyRelative("description"); + var ruleActionConstraint = ruleAction.FindPropertyRelative("axisConstraint"); + + ruleActionId.intValue = (int)currentRuleAction.Id; + ruleActionDescription.stringValue = currentRuleAction.Description; + ruleActionConstraint.intValue = (int)currentRuleAction.AxisConstraint; + } + + private int RenderBaseInputAction(int baseActionId, out MixedRealityInputAction action, bool isLocked = false) + { + action = MixedRealityInputAction.None; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(BaseActionContent, GUILayout.Width(128)); + EditorGUI.BeginChangeCheck(); + + if (!isLocked) + { + baseActionId = EditorGUILayout.IntPopup(baseActionId, baseActionLabels, baseActionIds, GUILayout.ExpandWidth(true)); + } + + for (int i = 0; i < MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions.Length; i++) + { + if (baseActionId == (int)MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[i].Id) + { + action = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[i]; + } + } + + if (action != MixedRealityInputAction.None) + { + GetCompatibleActions(action); + } + + if (isLocked) + { + EditorGUILayout.LabelField(action.Description, EditorStyles.boldLabel, GUILayout.ExpandWidth(true)); + } + + EditorGUILayout.EndHorizontal(); + return baseActionId; + } + + private int RenderRuleInputAction(int ruleActionId, out MixedRealityInputAction action) + { + action = MixedRealityInputAction.None; + EditorGUILayout.BeginHorizontal(); + EditorGUILayout.LabelField(RuleActionContent, GUILayout.Width(128)); + EditorGUI.BeginChangeCheck(); + ruleActionId = EditorGUILayout.IntPopup(ruleActionId, ruleActionLabels, ruleActionIds, GUILayout.ExpandWidth(true)); + + for (int i = 0; i < MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions.Length; i++) + { + if (ruleActionId == (int)MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[i].Id) + { + action = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[i]; + } + } + + EditorGUILayout.EndHorizontal(); + return ruleActionId; + } + + private void RenderList(SerializedProperty list, bool[] foldouts) + { + for (int i = 0; i < list?.arraySize; i++) + { + var rule = list.GetArrayElementAtIndex(i); + var criteria = rule.FindPropertyRelative("criteria"); + + var baseAction = rule.FindPropertyRelative("baseAction"); + var baseActionId = baseAction.FindPropertyRelative("id"); + var baseActionDescription = baseAction.FindPropertyRelative("description"); + var baseActionConstraint = baseAction.FindPropertyRelative("axisConstraint"); + + var ruleAction = rule.FindPropertyRelative("ruleAction"); + var ruleActionId = ruleAction.FindPropertyRelative("id"); + var ruleActionDescription = ruleAction.FindPropertyRelative("description"); + var ruleActionConstraint = ruleAction.FindPropertyRelative("axisConstraint"); + + EditorGUILayout.BeginHorizontal(); + foldouts[i] = EditorGUILayout.Foldout(foldouts[i], new GUIContent($"{baseActionDescription.stringValue} -> {ruleActionDescription.stringValue}"), true); + + if (GUILayout.Button(RuleMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + list.DeleteArrayElementAtIndex(i); + EditorGUILayout.EndHorizontal(); + return; + } + + EditorGUILayout.EndHorizontal(); + + if (foldouts[i]) + { + EditorGUI.indentLevel++; + + baseActionId.intValue = RenderBaseInputAction(baseActionId.intValue, out MixedRealityInputAction newBaseAction, true); + baseActionDescription.stringValue = newBaseAction.Description; + baseActionConstraint.intValue = (int)newBaseAction.AxisConstraint; + + if (baseActionId.intValue == ruleActionId.intValue || newBaseAction == MixedRealityInputAction.None || baseActionConstraint.intValue != ruleActionConstraint.intValue) + { + criteria.Reset(); + ruleActionId.intValue = (int)MixedRealityInputAction.None.Id; + ruleActionDescription.stringValue = MixedRealityInputAction.None.Description; + ruleActionConstraint.intValue = (int)MixedRealityInputAction.None.AxisConstraint; + } + + RenderCriteriaField(newBaseAction, criteria); + + ruleActionId.intValue = RenderRuleInputAction(ruleActionId.intValue, out MixedRealityInputAction newRuleAction); + ruleActionDescription.stringValue = newRuleAction.Description; + ruleActionConstraint.intValue = (int)newRuleAction.AxisConstraint; + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs.meta b/Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs.meta new file mode 100644 index 000000000..90fc2e79a --- /dev/null +++ b/Inspectors/Profiles/MixedRealityInputActionRulesInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 22a2bb279c214a0199d830d71fc35497 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs b/Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs new file mode 100644 index 000000000..7aaaa7d76 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityInputActionsProfile))] + public class MixedRealityInputActionsProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent MinusButtonContent = new GUIContent("-", "Remove Action"); + private static readonly GUIContent AddButtonContent = new GUIContent("+ Add a New Action", "Add New Action"); + private static readonly GUIContent ActionContent = new GUIContent("Action", "The Name of the Action."); + private static readonly GUIContent AxisConstraintContent = new GUIContent("Axis Constraint", "Optional Axis Constraint for this input source."); + + private static Vector2 scrollPosition = Vector2.zero; + + private SerializedProperty inputActionList; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + inputActionList = serializedObject.FindProperty("inputActions"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Input Actions", EditorStyles.boldLabel); + + EditorGUILayout.HelpBox("Input Actions are any/all actions your users will be able to make when interacting with your application.\n\n" + + "After defining all your actions, you can then wire up these actions to hardware sensors, controllers, and other input devices.", MessageType.Info); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + RenderList(inputActionList); + serializedObject.ApplyModifiedProperties(); + } + + private static void RenderList(SerializedProperty list) + { + EditorGUILayout.Space(); + GUILayout.BeginVertical(); + if (GUILayout.Button(AddButtonContent, EditorStyles.miniButton)) + { + list.arraySize += 1; + var inputAction = list.GetArrayElementAtIndex(list.arraySize - 1); + var inputActionId = inputAction.FindPropertyRelative("id"); + var inputActionDescription = inputAction.FindPropertyRelative("description"); + var inputActionConstraint = inputAction.FindPropertyRelative("axisConstraint"); + inputActionConstraint.intValue = 0; + inputActionDescription.stringValue = $"New Action {inputActionId.intValue = list.arraySize}"; + } + + GUILayout.Space(12f); + + GUILayout.BeginVertical(); + + GUILayout.BeginHorizontal(); + var labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 36f; + EditorGUILayout.LabelField(ActionContent, GUILayout.ExpandWidth(true)); + EditorGUILayout.LabelField(AxisConstraintContent, GUILayout.Width(96f)); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(24f)); + EditorGUIUtility.labelWidth = labelWidth; + GUILayout.EndHorizontal(); + + scrollPosition = EditorGUILayout.BeginScrollView(scrollPosition); + + for (int i = 0; i < list.arraySize; i++) + { + EditorGUILayout.BeginHorizontal(); + var previousLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 64f; + SerializedProperty inputAction = list.GetArrayElementAtIndex(i); + SerializedProperty inputActionDescription = inputAction.FindPropertyRelative("description"); + var inputActionConstraint = inputAction.FindPropertyRelative("axisConstraint"); + EditorGUILayout.PropertyField(inputActionDescription, GUIContent.none); + EditorGUILayout.PropertyField(inputActionConstraint, GUIContent.none, GUILayout.Width(96f)); + EditorGUIUtility.labelWidth = previousLabelWidth; + + if (GUILayout.Button(MinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + list.DeleteArrayElementAtIndex(i); + } + + EditorGUILayout.EndHorizontal(); + } + + EditorGUILayout.EndScrollView(); + GUILayout.EndVertical(); + GUILayout.EndVertical(); + } + } +} diff --git a/Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs.meta new file mode 100644 index 000000000..a5608796f --- /dev/null +++ b/Inspectors/Profiles/MixedRealityInputActionsProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d9f4435a0173498bbe484a747632b78f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs b/Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs new file mode 100644 index 000000000..60887a295 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs @@ -0,0 +1,94 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityInputSystemProfile))] + public class MixedRealityInputSystemProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty focusProviderType; + private SerializedProperty inputActionsProfile; + private SerializedProperty inputActionRulesProfile; + private SerializedProperty pointerProfile; + private SerializedProperty gesturesProfile; + private SerializedProperty speechCommandsProfile; + private SerializedProperty controllerVisualizationProfile; + private SerializedProperty controllerDataProvidersProfile; + private SerializedProperty controllerMappingProfiles; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + focusProviderType = serializedObject.FindProperty("focusProviderType"); + inputActionsProfile = serializedObject.FindProperty("inputActionsProfile"); + inputActionRulesProfile = serializedObject.FindProperty("inputActionRulesProfile"); + pointerProfile = serializedObject.FindProperty("pointerProfile"); + gesturesProfile = serializedObject.FindProperty("gesturesProfile"); + speechCommandsProfile = serializedObject.FindProperty("speechCommandsProfile"); + controllerVisualizationProfile = serializedObject.FindProperty("controllerVisualizationProfile"); + controllerDataProvidersProfile = serializedObject.FindProperty("controllerDataProvidersProfile"); + controllerMappingProfiles = serializedObject.FindProperty("controllerMappingProfiles"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Input System Profile", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("The Input System Profile helps developers configure input no matter what platform you're building for.", MessageType.Info); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + bool changed = false; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(focusProviderType); + + if (EditorGUI.EndChangeCheck()) + { + changed = true; + } + + changed |= RenderProfile(inputActionsProfile); + changed |= RenderProfile(inputActionRulesProfile); + changed |= RenderProfile(pointerProfile); + changed |= RenderProfile(gesturesProfile); + changed |= RenderProfile(speechCommandsProfile); + changed |= RenderProfile(controllerVisualizationProfile); + changed |= RenderProfile(controllerDataProvidersProfile); + changed |= RenderProfile(controllerMappingProfiles); + + serializedObject.ApplyModifiedProperties(); + + if (changed) + { + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(MixedRealityToolkit.Instance.ActiveProfile); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs.meta new file mode 100644 index 000000000..e6374dac6 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityInputSystemProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9b158aff2b654cfbb1f91b97d250f867 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs b/Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs new file mode 100644 index 000000000..dfaff8220 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.NetworkingSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityNetworkSystemProfile))] + public class MixedRealityNetworkSystemProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty registeredNetworkDataProviders; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + registeredNetworkDataProviders = serializedObject.FindProperty("registeredNetworkDataProviders"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Network System Profile", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("The Network System Profile helps developers configure networking messages no matter what platform you're building for.", MessageType.Info); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(registeredNetworkDataProviders, true); + + if (EditorGUI.EndChangeCheck()) + { + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(MixedRealityToolkit.Instance.ActiveProfile); + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs.meta new file mode 100644 index 000000000..ce2f03914 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityNetworkSystemProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 206d21dd8e434edaa9692a74518fe045 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs b/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs new file mode 100644 index 000000000..5cc95856c --- /dev/null +++ b/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs @@ -0,0 +1,151 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; +using XRTK.Utilities; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityPointerProfile))] + public class MixedRealityPointerProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent ControllerTypeContent = new GUIContent("Controller Type", "The type of Controller this pointer will attach itself to at runtime."); + + private SerializedProperty pointingExtent; + private SerializedProperty pointingRaycastLayerMasks; + private SerializedProperty debugDrawPointingRays; + private SerializedProperty debugDrawPointingRayColors; + private SerializedProperty gazeCursorPrefab; + private SerializedProperty gazeProviderType; + private SerializedProperty pointerOptions; + private ReorderableList pointerOptionList; + + private int currentlySelectedPointerOption = -1; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + pointingExtent = serializedObject.FindProperty("pointingExtent"); + pointingRaycastLayerMasks = serializedObject.FindProperty("pointingRaycastLayerMasks"); + debugDrawPointingRays = serializedObject.FindProperty("debugDrawPointingRays"); + debugDrawPointingRayColors = serializedObject.FindProperty("debugDrawPointingRayColors"); + gazeCursorPrefab = serializedObject.FindProperty("gazeCursorPrefab"); + gazeProviderType = serializedObject.FindProperty("gazeProviderType"); + pointerOptions = serializedObject.FindProperty("pointerOptions"); + + pointerOptionList = new ReorderableList(serializedObject, pointerOptions, false, false, true, true) + { + elementHeight = EditorGUIUtility.singleLineHeight * 4 + }; + + pointerOptionList.drawElementCallback += DrawPointerOptionElement; + pointerOptionList.onAddCallback += OnPointerOptionAdded; + pointerOptionList.onRemoveCallback += OnPointerOptionRemoved; + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Pointer Options", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Pointers attach themselves onto controllers as they are initialized.", MessageType.Info); + EditorGUILayout.Space(); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + serializedObject.Update(); + currentlySelectedPointerOption = -1; + + EditorGUILayout.PropertyField(pointingExtent); + EditorGUILayout.PropertyField(pointingRaycastLayerMasks, true); + EditorGUILayout.PropertyField(debugDrawPointingRays); + EditorGUILayout.PropertyField(debugDrawPointingRayColors, true); + + EditorGUILayout.Space(); + EditorGUILayout.HelpBox("The gaze provider uses the default settings above, but further customization of the gaze can be done on the Gaze Provider.", MessageType.Info); + + EditorGUILayout.Space(); + EditorGUILayout.PropertyField(gazeCursorPrefab); + EditorGUILayout.PropertyField(gazeProviderType); + + EditorGUILayout.Space(); + if (GUILayout.Button("Customize Gaze Provider Settings")) + { + Selection.activeObject = CameraCache.Main.gameObject; + } + + EditorGUILayout.Space(); + pointerOptionList.DoLayoutList(); + serializedObject.ApplyModifiedProperties(); + } + + private void DrawPointerOptionElement(Rect rect, int index, bool isActive, bool isFocused) + { + if (isFocused) + { + currentlySelectedPointerOption = index; + } + + bool lastMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + + var halfFieldHeight = EditorGUIUtility.singleLineHeight * 0.25f; + var controllerTypeRect = new Rect(rect.x, rect.y + halfFieldHeight, rect.width, EditorGUIUtility.singleLineHeight); + var handednessControlRect = new Rect(rect.x, rect.y + halfFieldHeight * 6, rect.width, EditorGUIUtility.singleLineHeight); + var pointerPrefabRect = new Rect(rect.x, rect.y + halfFieldHeight * 11, rect.width, EditorGUIUtility.singleLineHeight); + + var pointerOption = pointerOptions.GetArrayElementAtIndex(index); + var controllerType = pointerOption.FindPropertyRelative("controllerType"); + var handedness = pointerOption.FindPropertyRelative("handedness"); + var prefab = pointerOption.FindPropertyRelative("pointerPrefab"); + + EditorGUI.PropertyField(controllerTypeRect, controllerType, ControllerTypeContent); + EditorGUI.PropertyField(handednessControlRect, handedness); + EditorGUI.PropertyField(pointerPrefabRect, prefab); + + EditorGUIUtility.wideMode = lastMode; + } + + private void OnPointerOptionAdded(ReorderableList list) + { + pointerOptions.arraySize += 1; + var pointerOption = pointerOptions.GetArrayElementAtIndex(pointerOptions.arraySize - 1); + var controllerType = pointerOption.FindPropertyRelative("controllerType"); + var referenceType = controllerType.FindPropertyRelative("reference"); + referenceType.stringValue = string.Empty; + var handedness = pointerOption.FindPropertyRelative("handedness"); + handedness.enumValueIndex = 0; + var prefab = pointerOption.FindPropertyRelative("pointerPrefab"); + prefab.objectReferenceValue = null; + } + + private void OnPointerOptionRemoved(ReorderableList list) + { + if (currentlySelectedPointerOption >= 0) + { + pointerOptions.DeleteArrayElementAtIndex(currentlySelectedPointerOption); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs.meta new file mode 100644 index 000000000..b1b35ae42 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityPointerProfileInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 67e17ecc3d6845508cf14d3f3c005e83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - logo: {instanceID: 0} + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs b/Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs new file mode 100644 index 000000000..ddd08a2ef --- /dev/null +++ b/Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs @@ -0,0 +1,148 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityRegisteredServiceProvidersProfile))] + public class MixedRealityRegisteredServiceProviderProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty configurations; + private ReorderableList configurationList; + private int currentlySelectedConfigurationOption; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + configurations = serializedObject.FindProperty("configurations"); + + configurationList = new ReorderableList(serializedObject, configurations, true, false, true, true) + { + elementHeight = EditorGUIUtility.singleLineHeight * 5.5f + }; + + configurationList.drawElementCallback += DrawConfigurationOptionElement; + configurationList.onAddCallback += OnConfigurationOptionAdded; + configurationList.onRemoveCallback += OnConfigurationOptionRemoved; + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Registered Service Providers Profile", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("This profile defines any additional Services like systems, features, and managers to register with the Mixed Reality Toolkit.\n\n" + + "Note: The order of the list determines the order these services get created.", MessageType.Info); + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + serializedObject.Update(); + EditorGUILayout.Space(); + configurationList.DoLayoutList(); + EditorGUILayout.Space(); + + if (configurations == null || configurations.arraySize == 0) + { + EditorGUILayout.HelpBox("Register a new Service Provider.", MessageType.Warning); + } + + serializedObject.ApplyModifiedProperties(); + } + + private void DrawConfigurationOptionElement(Rect rect, int index, bool isActive, bool isFocused) + { + if (isFocused) + { + currentlySelectedConfigurationOption = index; + } + + var lastMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + + var halfFieldHeight = EditorGUIUtility.singleLineHeight * 0.25f; + var nameRect = new Rect(rect.x, rect.y + halfFieldHeight, rect.width, EditorGUIUtility.singleLineHeight); + var typeRect = new Rect(rect.x, rect.y + halfFieldHeight * 6, rect.width, EditorGUIUtility.singleLineHeight); + var runtimeRect = new Rect(rect.x, rect.y + halfFieldHeight * 11, rect.width, EditorGUIUtility.singleLineHeight); + var profileRect = new Rect(rect.x, rect.y + halfFieldHeight * 16, rect.width, EditorGUIUtility.singleLineHeight); + + var managerConfig = configurations.GetArrayElementAtIndex(index); + var componentName = managerConfig.FindPropertyRelative("componentName"); + var componentType = managerConfig.FindPropertyRelative("componentType"); + var priority = managerConfig.FindPropertyRelative("priority"); + var runtimePlatform = managerConfig.FindPropertyRelative("runtimePlatform"); + var configurationProfile = managerConfig.FindPropertyRelative("configurationProfile"); + + EditorGUI.BeginChangeCheck(); + + EditorGUI.PropertyField(nameRect, componentName); + EditorGUI.PropertyField(typeRect, componentType); + priority.intValue = index; + EditorGUI.PropertyField(runtimeRect, runtimePlatform); + EditorGUI.PropertyField(profileRect, configurationProfile); + + if (EditorGUI.EndChangeCheck()) + { + serializedObject.ApplyModifiedProperties(); + + if (!string.IsNullOrEmpty(componentType.FindPropertyRelative("reference").stringValue)) + { + MixedRealityToolkit.Instance.ResetConfiguration(MixedRealityToolkit.Instance.ActiveProfile); + } + } + + EditorGUIUtility.wideMode = lastMode; + } + + private void OnConfigurationOptionAdded(ReorderableList list) + { + configurations.arraySize += 1; + var index = configurations.arraySize - 1; + var managerConfig = configurations.GetArrayElementAtIndex(index); + var componentName = managerConfig.FindPropertyRelative("componentName"); + componentName.stringValue = $"New Configuration {index}"; + var priority = managerConfig.FindPropertyRelative("priority"); + priority.intValue = index; + var runtimePlatform = managerConfig.FindPropertyRelative("runtimePlatform"); + runtimePlatform.intValue = 0; + var configurationProfile = managerConfig.FindPropertyRelative("configurationProfile"); + configurationProfile.objectReferenceValue = null; + serializedObject.ApplyModifiedProperties(); + var componentType = ((MixedRealityRegisteredServiceProvidersProfile)serializedObject.targetObject).Configurations[index].ComponentType; + componentType.Type = null; + } + + private void OnConfigurationOptionRemoved(ReorderableList list) + { + if (currentlySelectedConfigurationOption >= 0) + { + configurations.DeleteArrayElementAtIndex(currentlySelectedConfigurationOption); + } + + serializedObject.ApplyModifiedProperties(); + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(MixedRealityToolkit.Instance.ActiveProfile); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs.meta new file mode 100644 index 000000000..a0e7022c2 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityRegisteredServiceProviderProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6566e9d194d94db391286beea3c27356 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs b/Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs new file mode 100644 index 000000000..2405fa885 --- /dev/null +++ b/Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs @@ -0,0 +1,169 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Linq; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.InputSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealitySpeechCommandsProfile))] + public class MixedRealitySpeechCommandsProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent MinusButtonContent = new GUIContent("-", "Remove Speech Command"); + private static readonly GUIContent AddButtonContent = new GUIContent("+ Add a New Speech Command", "Add Speech Command"); + private static readonly GUIContent KeywordContent = new GUIContent("Keyword", "Spoken word that will trigger the action."); + private static readonly GUIContent KeyCodeContent = new GUIContent("KeyCode", "The keyboard key that will trigger the action."); + private static readonly GUIContent ActionContent = new GUIContent("Action", "The action to trigger when a keyboard key is pressed or keyword is recognized."); + + private SerializedProperty recognizerStartBehaviour; + private SerializedProperty recognitionConfidenceLevel; + private SerializedProperty speechCommands; + private static GUIContent[] actionLabels; + private static int[] actionIds; + + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled || + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) { return; } + + recognizerStartBehaviour = serializedObject.FindProperty("startBehavior"); + recognitionConfidenceLevel = serializedObject.FindProperty("recognitionConfidenceLevel"); + speechCommands = serializedObject.FindProperty("speechCommands"); + actionLabels = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions.Select(action => new GUIContent(action.Description)).Prepend(new GUIContent("None")).ToArray(); + actionIds = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions.Select(action => (int)action.Id).Prepend(0).ToArray(); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + EditorGUILayout.HelpBox("No input system is enabled, or you need to specify the type in the main configuration profile.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Input Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile; + } + + (target as BaseMixedRealityProfile).CheckProfileLock(); + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Speech Commands", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Speech Commands are any/all spoken keywords your users will be able say to raise an Input Action in your application.", MessageType.Info); + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile == null) + { + EditorGUILayout.HelpBox("No input actions found, please specify a input action profile in the main configuration.", MessageType.Error); + return; + } + + serializedObject.Update(); + + EditorGUILayout.PropertyField(recognizerStartBehaviour); + EditorGUILayout.PropertyField(recognitionConfidenceLevel); + + RenderList(speechCommands); + serializedObject.ApplyModifiedProperties(); + } + + private static void RenderList(SerializedProperty list) + { + EditorGUILayout.Space(); + GUILayout.BeginVertical(); + + if (GUILayout.Button(AddButtonContent, EditorStyles.miniButton)) + { + list.arraySize += 1; + var speechCommand = list.GetArrayElementAtIndex(list.arraySize - 1); + var keyword = speechCommand.FindPropertyRelative("keyword"); + keyword.stringValue = string.Empty; + var keyCode = speechCommand.FindPropertyRelative("keyCode"); + keyCode.intValue = (int)KeyCode.None; + var action = speechCommand.FindPropertyRelative("action"); + var actionId = action.FindPropertyRelative("id"); + actionId.intValue = 0; + } + + GUILayout.Space(12f); + + if (list == null || list.arraySize == 0) + { + EditorGUILayout.HelpBox("Create a new Speech Command.", MessageType.Warning); + GUILayout.EndVertical(); + return; + } + + GUILayout.BeginVertical(); + + GUILayout.BeginHorizontal(); + var labelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 36f; + EditorGUILayout.LabelField(KeywordContent, GUILayout.ExpandWidth(true)); + EditorGUILayout.LabelField(KeyCodeContent, GUILayout.Width(64f)); + EditorGUILayout.LabelField(ActionContent, GUILayout.Width(64f)); + EditorGUILayout.LabelField(string.Empty, GUILayout.Width(24f)); + EditorGUIUtility.labelWidth = labelWidth; + GUILayout.EndHorizontal(); + + for (int i = 0; i < list.arraySize; i++) + { + EditorGUILayout.BeginHorizontal(); + SerializedProperty speechCommand = list.GetArrayElementAtIndex(i); + var keyword = speechCommand.FindPropertyRelative("keyword"); + EditorGUILayout.PropertyField(keyword, GUIContent.none, GUILayout.ExpandWidth(true)); + var keyCode = speechCommand.FindPropertyRelative("keyCode"); + EditorGUILayout.PropertyField(keyCode, GUIContent.none, GUILayout.Width(64f)); + var action = speechCommand.FindPropertyRelative("action"); + var actionId = action.FindPropertyRelative("id"); + var actionDescription = action.FindPropertyRelative("description"); + var actionConstraint = action.FindPropertyRelative("axisConstraint"); + + EditorGUI.BeginChangeCheck(); + actionId.intValue = EditorGUILayout.IntPopup(GUIContent.none, actionId.intValue, actionLabels, actionIds, GUILayout.Width(64f)); + + if (EditorGUI.EndChangeCheck()) + { + MixedRealityInputAction inputAction = actionId.intValue == 0 ? MixedRealityInputAction.None : MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions[actionId.intValue - 1]; + actionDescription.stringValue = inputAction.Description; + actionConstraint.enumValueIndex = (int)inputAction.AxisConstraint; + } + + if (GUILayout.Button(MinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + list.DeleteArrayElementAtIndex(i); + } + + EditorGUILayout.EndHorizontal(); + } + + GUILayout.EndVertical(); + GUILayout.EndVertical(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs.meta new file mode 100644 index 000000000..a296e5fba --- /dev/null +++ b/Inspectors/Profiles/MixedRealitySpeechCommandsProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3080750d6f1e4007a317f63ea068827e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs b/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs new file mode 100644 index 000000000..56ef31973 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs @@ -0,0 +1,232 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEditor.Experimental.SceneManagement; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Extensions.EditorClassExtensions; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles +{ + [CustomEditor(typeof(MixedRealityToolkitConfigurationProfile))] + public class MixedRealityToolkitConfigurationProfileInspector : BaseMixedRealityProfileInspector + { + // Camera properties + private SerializedProperty enableCameraSystem; + private SerializedProperty cameraSystemType; + private SerializedProperty cameraProfile; + // Input system properties + private SerializedProperty enableInputSystem; + private SerializedProperty inputSystemType; + private SerializedProperty inputSystemProfile; + // Boundary system properties + private SerializedProperty enableBoundarySystem; + private SerializedProperty boundarySystemType; + private SerializedProperty boundaryVisualizationProfile; + // Teleport system properties + private SerializedProperty enableTeleportSystem; + private SerializedProperty teleportSystemType; + // Spatial Awareness system properties + private SerializedProperty enableSpatialAwarenessSystem; + private SerializedProperty spatialAwarenessSystemType; + private SerializedProperty spatialAwarenessProfile; + // Networking system properties + private SerializedProperty enableNetworkingSystem; + private SerializedProperty networkingSystemType; + private SerializedProperty networkingSystemProfile; + // Diagnostic system properties + private SerializedProperty enableDiagnosticsSystem; + private SerializedProperty diagnosticsSystemType; + private SerializedProperty diagnosticsSystemProfile; + + // Additional registered components profile + private SerializedProperty registeredServiceProvidersProfile; + + private MixedRealityToolkitConfigurationProfile configurationProfile; + + protected override void OnEnable() + { + base.OnEnable(); + + configurationProfile = target as MixedRealityToolkitConfigurationProfile; + + var prefabStage = PrefabStageUtility.GetCurrentPrefabStage(); + + // Create The MR Manager if none exists. + if (!MixedRealityToolkit.IsInitialized && prefabStage == null) + { + // Search for all instances, in case we've just hot reloaded the assembly. + var managerSearch = FindObjectsOfType(); + + if (managerSearch.Length == 0) + { + if (EditorUtility.DisplayDialog( + "Attention!", + "There is no active Mixed Reality Toolkit in your scene!\n\nWould you like to create one now?", + "Yes", + "Later")) + { + var playspace = MixedRealityToolkit.Instance.MixedRealityPlayspace; + Debug.Assert(playspace != null); + MixedRealityToolkit.Instance.ActiveProfile = configurationProfile; + } + else + { + Debug.LogWarning("No Mixed Reality Toolkit in your scene."); + return; + } + } + } + + if (!MixedRealityToolkit.ConfirmInitialized() || + !MixedRealityToolkit.HasActiveProfile) + { + return; + } + + // Camera configuration + enableCameraSystem = serializedObject.FindProperty("enableCameraSystem"); + cameraSystemType = serializedObject.FindProperty("cameraSystemType"); + cameraProfile = serializedObject.FindProperty("cameraProfile"); + // Input system configuration + enableInputSystem = serializedObject.FindProperty("enableInputSystem"); + inputSystemType = serializedObject.FindProperty("inputSystemType"); + inputSystemProfile = serializedObject.FindProperty("inputSystemProfile"); + // Boundary system configuration + enableBoundarySystem = serializedObject.FindProperty("enableBoundarySystem"); + boundarySystemType = serializedObject.FindProperty("boundarySystemType"); + boundaryVisualizationProfile = serializedObject.FindProperty("boundaryVisualizationProfile"); + // Teleport system configuration + enableTeleportSystem = serializedObject.FindProperty("enableTeleportSystem"); + teleportSystemType = serializedObject.FindProperty("teleportSystemType"); + // Spatial Awareness system configuration + enableSpatialAwarenessSystem = serializedObject.FindProperty("enableSpatialAwarenessSystem"); + spatialAwarenessSystemType = serializedObject.FindProperty("spatialAwarenessSystemType"); + spatialAwarenessProfile = serializedObject.FindProperty("spatialAwarenessProfile"); + // Networking system configuration + enableNetworkingSystem = serializedObject.FindProperty("enableNetworkingSystem"); + networkingSystemType = serializedObject.FindProperty("networkingSystemType"); + networkingSystemProfile = serializedObject.FindProperty("networkingSystemProfile"); + // Diagnostics system configuration + enableDiagnosticsSystem = serializedObject.FindProperty("enableDiagnosticsSystem"); + diagnosticsSystemType = serializedObject.FindProperty("diagnosticsSystemType"); + diagnosticsSystemProfile = serializedObject.FindProperty("diagnosticsSystemProfile"); + + // Additional registered components configuration + registeredServiceProvidersProfile = serializedObject.FindProperty("registeredServiceProvidersProfile"); + } + + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + serializedObject.Update(); + + if (!MixedRealityToolkit.IsInitialized) + { + EditorGUILayout.HelpBox("Unable to find Mixed Reality Toolkit!", MessageType.Error); + return; + } + + if (!configurationProfile.IsCustomProfile) + { + EditorGUILayout.HelpBox("The Mixed Reality Toolkit's core SDK profiles can be used to get up and running quickly.\n\n" + + "You can use the default profiles provided, copy and customize the default profiles, or create your own.", MessageType.Warning); + EditorGUILayout.BeginHorizontal(); + + if (GUILayout.Button("Clone & Customize")) + { + CreateCloneProfile(); + } + + if (GUILayout.Button("Create new profiles")) + { + var profile = CreateInstance(nameof(MixedRealityToolkitConfigurationProfile)); + var newProfile = profile.CreateAsset("Assets/XRTK.Generated/CustomProfiles") as MixedRealityToolkitConfigurationProfile; + MixedRealityToolkit.Instance.ActiveProfile = newProfile; + Selection.activeObject = newProfile; + } + + EditorGUILayout.EndHorizontal(); + } + + // We don't call the CheckLock method so won't get a duplicate message. + if (MixedRealityPreferences.LockProfiles && !((BaseMixedRealityProfile)target).IsCustomProfile) + { + GUI.enabled = false; + } + + var previousLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 160f; + EditorGUI.BeginChangeCheck(); + bool changed = false; + + // Camera System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Camera System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableCameraSystem); + EditorGUILayout.PropertyField(cameraSystemType); + changed |= RenderProfile(cameraProfile); + + // Input System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Input System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableInputSystem); + EditorGUILayout.PropertyField(inputSystemType); + changed |= RenderProfile(inputSystemProfile); + + // Boundary System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Boundary System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableBoundarySystem); + EditorGUILayout.PropertyField(boundarySystemType); + changed |= RenderProfile(boundaryVisualizationProfile); + + // Teleport System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Teleport System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableTeleportSystem); + EditorGUILayout.PropertyField(teleportSystemType); + + // Spatial Awareness System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Spatial Awareness System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableSpatialAwarenessSystem); + EditorGUILayout.PropertyField(spatialAwarenessSystemType); + changed |= RenderProfile(spatialAwarenessProfile); + + // Networking System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Networking System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableNetworkingSystem); + EditorGUILayout.PropertyField(networkingSystemType); + changed |= RenderProfile(networkingSystemProfile); + + // Diagnostics System configuration + GUILayout.Space(12f); + EditorGUILayout.LabelField("Diagnostics System Settings", EditorStyles.boldLabel); + EditorGUILayout.PropertyField(enableDiagnosticsSystem); + EditorGUILayout.PropertyField(diagnosticsSystemType); + changed |= RenderProfile(diagnosticsSystemProfile); + + GUILayout.Space(12f); + EditorGUILayout.LabelField("Additional Service Providers", EditorStyles.boldLabel); + changed |= RenderProfile(registeredServiceProvidersProfile); + + if (!changed) + { + changed |= EditorGUI.EndChangeCheck(); + } + + EditorGUIUtility.labelWidth = previousLabelWidth; + serializedObject.ApplyModifiedProperties(); + + if (changed) + { + EditorApplication.delayCall += () => MixedRealityToolkit.Instance.ResetConfiguration(configurationProfile); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs.meta b/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs.meta new file mode 100644 index 000000000..313db2c70 --- /dev/null +++ b/Inspectors/Profiles/MixedRealityToolkitConfigurationProfileInspector.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0ec6ed89a5784de4b72f2279c919a28f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - logo: {instanceID: 0} + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/SpatialAwareness.meta b/Inspectors/Profiles/SpatialAwareness.meta new file mode 100644 index 000000000..9449b9e85 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b6ee3752993e4409b73b4a7d82cfb51e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs new file mode 100644 index 000000000..7cc777395 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Providers.SpatialObservers; +using XRTK.Inspectors.Utilities; + +namespace XRTK.Inspectors.Profiles.SpatialAwareness +{ + [CustomEditor(typeof(BaseMixedRealitySpatialMeshObserverProfile))] + public abstract class BaseMixedRealitySpatialMeshObserverProfileInspector : BaseMixedRealitySpatialObserverProfileInspector + { + private SerializedProperty meshPhysicsLayerOverride; + private SerializedProperty meshLevelOfDetail; + private SerializedProperty meshTrianglesPerCubicMeter; + private SerializedProperty meshRecalculateNormals; + private SerializedProperty meshDisplayOption; + private SerializedProperty meshVisibleMaterial; + private SerializedProperty meshOcclusionMaterial; + private SerializedProperty additionalComponents; + private SerializedProperty meshObjectPrefab; + + private static bool foldout = true; + + /// + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + meshPhysicsLayerOverride = serializedObject.FindProperty("meshPhysicsLayerOverride"); + meshLevelOfDetail = serializedObject.FindProperty("meshLevelOfDetail"); + meshTrianglesPerCubicMeter = serializedObject.FindProperty("meshTrianglesPerCubicMeter"); + meshRecalculateNormals = serializedObject.FindProperty("meshRecalculateNormals"); + meshDisplayOption = serializedObject.FindProperty("meshDisplayOption"); + meshVisibleMaterial = serializedObject.FindProperty("meshVisibleMaterial"); + meshOcclusionMaterial = serializedObject.FindProperty("meshOcclusionMaterial"); + additionalComponents = serializedObject.FindProperty("additionalComponents"); + meshObjectPrefab = serializedObject.FindProperty("meshObjectPrefab"); + } + + /// + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + serializedObject.Update(); + + foldout = EditorGUILayout.Foldout(foldout, "Spatial Mesh Settings", true); + + if (foldout) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(meshPhysicsLayerOverride); + EditorGUILayout.PropertyField(meshLevelOfDetail); + EditorGUILayout.PropertyField(meshTrianglesPerCubicMeter); + EditorGUILayout.PropertyField(meshRecalculateNormals); + EditorGUILayout.PropertyField(meshDisplayOption); + EditorGUILayout.PropertyField(meshVisibleMaterial); + EditorGUILayout.PropertyField(meshOcclusionMaterial); + EditorGUILayout.PropertyField(additionalComponents, true); + EditorGUILayout.HelpBox("Note: MeshFilter, MeshRenderer, and MeshCollider are already added automatically as they're required components for a mesh object.", MessageType.Info); + EditorGUILayout.PropertyField(meshObjectPrefab); + EditorGUILayout.HelpBox("The mesh object is procedurally generated, but you can also use an empty prefab object as well with predefined components and data.", MessageType.Info); + EditorGUI.indentLevel--; + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs.meta b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs.meta new file mode 100644 index 000000000..454944ea7 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialMeshObserverProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b60d1a1c362145c4be48c5bb9f8459f7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs new file mode 100644 index 000000000..5f275d2d2 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs @@ -0,0 +1,96 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Providers.SpatialObservers; +using XRTK.Definitions; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles.SpatialAwareness +{ + [CustomEditor(typeof(BaseMixedRealitySpatialObserverProfile))] + public abstract class BaseMixedRealitySpatialObserverProfileInspector : BaseMixedRealityProfileInspector + { + private SerializedProperty startupBehavior; + private SerializedProperty observationExtents; + private SerializedProperty isStationaryObserver; + private SerializedProperty updateInterval; + private SerializedProperty physicsLayer; + + private static bool foldout = true; + + /// + protected override void OnEnable() + { + base.OnEnable(); + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + startupBehavior = serializedObject.FindProperty("startupBehavior"); + observationExtents = serializedObject.FindProperty("observationExtents"); + isStationaryObserver = serializedObject.FindProperty("isStationaryObserver"); + updateInterval = serializedObject.FindProperty("updateInterval"); + physicsLayer = serializedObject.FindProperty("physicsLayer"); + } + + /// + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsSpatialAwarenessSystemEnabled) + { + EditorGUILayout.HelpBox("The Spatial Awareness Observer Data Provider requires that the spatial awareness system be enabled.", MessageType.Error); + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + return; + } + + if (GUILayout.Button("Back to Spatial Awareness Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile.SpatialAwarenessProfile; + } + + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Spatial Observer Options", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("The Spatial Awareness Observer Data Provider supplies the Spatial Awareness system with all the data it needs to understand the world around you.", MessageType.Info); + EditorGUILayout.Space(); + + if (MixedRealityPreferences.LockProfiles && !((BaseMixedRealityProfile)target).IsCustomProfile) + { + GUI.enabled = false; + } + + serializedObject.Update(); + + foldout = EditorGUILayout.Foldout(foldout, "General Settings", true); + + if (foldout) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(startupBehavior); + EditorGUILayout.PropertyField(observationExtents); + EditorGUILayout.PropertyField(isStationaryObserver); + EditorGUILayout.PropertyField(updateInterval); + EditorGUILayout.PropertyField(physicsLayer); + EditorGUI.indentLevel--; + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs.meta b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs.meta new file mode 100644 index 000000000..8582ced8f --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySpatialObserverProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d1bdd90a3c2a4f40a1643acae7338010 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs new file mode 100644 index 000000000..2189a6fd3 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs @@ -0,0 +1,88 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Providers.SpatialObservers; +using XRTK.Inspectors.Utilities; + +namespace XRTK.Inspectors.Profiles.SpatialAwareness +{ + [CustomEditor(typeof(BaseMixedRealitySurfaceObserverProfile))] + public abstract class BaseMixedRealitySurfaceObserverProfileInspector : BaseMixedRealitySpatialObserverProfileInspector + { + private SerializedProperty surfacePhysicsLayerOverride; + private SerializedProperty surfaceFindingMinimumArea; + private SerializedProperty displayFloorSurfaces; + private SerializedProperty floorSurfaceMaterial; + private SerializedProperty displayCeilingSurfaces; + private SerializedProperty ceilingSurfaceMaterial; + private SerializedProperty displayWallSurfaces; + private SerializedProperty wallSurfaceMaterial; + private SerializedProperty displayPlatformSurfaces; + private SerializedProperty platformSurfaceMaterial; + + private readonly GUIContent ceilingMaterialContent = new GUIContent("Ceiling Material"); + private readonly GUIContent floorMaterialContent = new GUIContent("Floor Material"); + private readonly GUIContent platformMaterialContent = new GUIContent("Platform Material"); + private readonly GUIContent wallMaterialContent = new GUIContent("Wall Material"); + private readonly GUIContent minimumAreaContent = new GUIContent("Minimum Area"); + + private bool foldout = true; + + /// + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + surfacePhysicsLayerOverride = serializedObject.FindProperty("surfacePhysicsLayerOverride"); + surfaceFindingMinimumArea = serializedObject.FindProperty("surfaceFindingMinimumArea"); + displayFloorSurfaces = serializedObject.FindProperty("displayFloorSurfaces"); + floorSurfaceMaterial = serializedObject.FindProperty("floorSurfaceMaterial"); + displayCeilingSurfaces = serializedObject.FindProperty("displayCeilingSurfaces"); + ceilingSurfaceMaterial = serializedObject.FindProperty("ceilingSurfaceMaterial"); + displayWallSurfaces = serializedObject.FindProperty("displayWallSurfaces"); + wallSurfaceMaterial = serializedObject.FindProperty("wallSurfaceMaterial"); + displayPlatformSurfaces = serializedObject.FindProperty("displayPlatformSurfaces"); + platformSurfaceMaterial = serializedObject.FindProperty("platformSurfaceMaterial"); + } + + /// + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + serializedObject.Update(); + + foldout = EditorGUILayout.Foldout(foldout, "Surface Finding Settings", true); + + if (foldout) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(surfacePhysicsLayerOverride); + EditorGUILayout.PropertyField(surfaceFindingMinimumArea, minimumAreaContent); + EditorGUILayout.PropertyField(displayFloorSurfaces); + EditorGUILayout.PropertyField(floorSurfaceMaterial, floorMaterialContent); + EditorGUILayout.PropertyField(displayCeilingSurfaces); + EditorGUILayout.PropertyField(ceilingSurfaceMaterial, ceilingMaterialContent); + EditorGUILayout.PropertyField(displayWallSurfaces); + EditorGUILayout.PropertyField(wallSurfaceMaterial, wallMaterialContent); + EditorGUILayout.PropertyField(displayPlatformSurfaces); + EditorGUILayout.PropertyField(platformSurfaceMaterial, platformMaterialContent); + EditorGUI.indentLevel--; + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs.meta b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs.meta new file mode 100644 index 000000000..39619b41d --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/BaseMixedRealitySurfaceObserverProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7052291bd6684f0b88835c08ed3937ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs b/Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs new file mode 100644 index 000000000..4c7084388 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs @@ -0,0 +1,131 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Definitions.SpatialAwarenessSystem; +using XRTK.Inspectors.Utilities; +using XRTK.Services; + +namespace XRTK.Inspectors.Profiles.SpatialAwareness +{ + [CustomEditor(typeof(MixedRealitySpatialAwarenessSystemProfile))] + public class MixedRealitySpatialAwarenessSystemProfileInspector : BaseMixedRealityProfileInspector + { + private static readonly GUIContent SpatialObserverAddButtonContent = new GUIContent("+ Add a New Spatial Observer"); + private static readonly GUIContent SpatialObserverMinusButtonContent = new GUIContent("-", "Remove Spatial Observer"); + + private SerializedProperty registeredSpatialObserverDataProviders; + + private bool[] foldouts = null; + + /// + protected override void OnEnable() + { + base.OnEnable(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured(false)) + { + return; + } + + registeredSpatialObserverDataProviders = serializedObject.FindProperty("registeredSpatialObserverDataProviders"); + foldouts = new bool[registeredSpatialObserverDataProviders.arraySize]; + } + + /// + public override void OnInspectorGUI() + { + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + + if (!MixedRealityInspectorUtility.CheckMixedRealityConfigured()) + { + return; + } + + if (GUILayout.Button("Back to Configuration Profile")) + { + Selection.activeObject = MixedRealityToolkit.Instance.ActiveProfile; + } + + EditorGUILayout.Space(); + EditorGUILayout.LabelField("Spatial Awareness System Settings", EditorStyles.boldLabel); + EditorGUILayout.HelpBox("Spatial Awareness can enhance your experience by enabling objects to interact with the real world.\n\nBelow is a list of registered Spatial Observers that can gather data about your environment.", MessageType.Info); + EditorGUILayout.Space(); + serializedObject.Update(); + + if (MixedRealityPreferences.LockProfiles && !((BaseMixedRealityProfile)target).IsCustomProfile) + { + GUI.enabled = false; + } + + EditorGUILayout.Space(); + + if (GUILayout.Button(SpatialObserverAddButtonContent, EditorStyles.miniButton)) + { + registeredSpatialObserverDataProviders.arraySize++; + var spatialObserverConfiguration = registeredSpatialObserverDataProviders.GetArrayElementAtIndex(registeredSpatialObserverDataProviders.arraySize - 1); + var spatialObserverType = spatialObserverConfiguration.FindPropertyRelative("spatialObserverType"); + var spatialObserverName = spatialObserverConfiguration.FindPropertyRelative("spatialObserverName"); + var priority = spatialObserverConfiguration.FindPropertyRelative("priority"); + var runtimePlatform = spatialObserverConfiguration.FindPropertyRelative("runtimePlatform"); + var profile = spatialObserverConfiguration.FindPropertyRelative("profile"); + + spatialObserverType.FindPropertyRelative("reference").stringValue = string.Empty; + spatialObserverName.stringValue = "New Spatial Observer Data Provider"; + priority.intValue = 5; + runtimePlatform.intValue = 0; + profile.objectReferenceValue = null; + serializedObject.ApplyModifiedProperties(); + foldouts = new bool[registeredSpatialObserverDataProviders.arraySize]; + return; + } + + EditorGUILayout.Space(); + EditorGUILayout.BeginVertical(); + + for (int i = 0; i < registeredSpatialObserverDataProviders?.arraySize; i++) + { + var spatialObserverConfiguration = registeredSpatialObserverDataProviders.GetArrayElementAtIndex(i); + var spatialObserverType = spatialObserverConfiguration.FindPropertyRelative("spatialObserverType"); + var spatialObserverName = spatialObserverConfiguration.FindPropertyRelative("spatialObserverName"); + var priority = spatialObserverConfiguration.FindPropertyRelative("priority"); + var runtimePlatform = spatialObserverConfiguration.FindPropertyRelative("runtimePlatform"); + var profile = spatialObserverConfiguration.FindPropertyRelative("profile"); + + EditorGUILayout.BeginHorizontal(); + foldouts[i] = EditorGUILayout.Foldout(foldouts[i], spatialObserverName.stringValue, true); + + if (GUILayout.Button(SpatialObserverMinusButtonContent, EditorStyles.miniButtonRight, GUILayout.Width(24f))) + { + registeredSpatialObserverDataProviders.DeleteArrayElementAtIndex(i); + serializedObject.ApplyModifiedProperties(); + foldouts = new bool[registeredSpatialObserverDataProviders.arraySize]; + EditorGUILayout.EndHorizontal(); + EditorGUILayout.EndVertical(); + return; + } + + EditorGUILayout.EndHorizontal(); + + if (foldouts[i]) + { + EditorGUI.indentLevel++; + EditorGUILayout.PropertyField(spatialObserverType); + EditorGUILayout.PropertyField(spatialObserverName); + EditorGUILayout.PropertyField(priority); + EditorGUILayout.PropertyField(runtimePlatform); + RenderProfile(profile, false); + EditorGUI.indentLevel--; + } + + EditorGUILayout.Space(); + } + + EditorGUILayout.EndVertical(); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs.meta b/Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs.meta new file mode 100644 index 000000000..651d7cfa9 --- /dev/null +++ b/Inspectors/Profiles/SpatialAwareness/MixedRealitySpatialAwarenessSystemProfileInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 04221c08803841039e2565acde6fee74 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers.meta b/Inspectors/PropertyDrawers.meta new file mode 100644 index 000000000..750849297 --- /dev/null +++ b/Inspectors/PropertyDrawers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 132b725108f94dc0a1be1ced4a7d32a9 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs b/Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs new file mode 100644 index 000000000..240e80dc0 --- /dev/null +++ b/Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Attributes; + +namespace XRTK.Inspectors.PropertyDrawers +{ + /// + /// Renders enum flags on fields with the attribute. + /// From https://answers.unity.com/questions/486694/default-editor-enum-as-flags-.html + /// + [CustomPropertyDrawer(typeof(EnumFlagsAttribute))] + public sealed class EnumFlagsAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + property.intValue = EditorGUI.MaskField(position, label, property.intValue, property.enumDisplayNames); + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs.meta b/Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs.meta new file mode 100644 index 000000000..a333114ab --- /dev/null +++ b/Inspectors/PropertyDrawers/EnumFlagsAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8cb092fb83f8431794ac61fe5ceace3d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs b/Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs new file mode 100644 index 000000000..23e2c7492 --- /dev/null +++ b/Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs @@ -0,0 +1,90 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Extensions; +using System.Linq; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.InputSystem; +using XRTK.Services; + +namespace XRTK.Inspectors.PropertyDrawers +{ + [CustomPropertyDrawer(typeof(MixedRealityInputAction))] + public class InputActionPropertyDrawer : PropertyDrawer + { + private static MixedRealityInputActionsProfile profile = null; + private static GUIContent[] actionLabels = { new GUIContent("Missing Input Action Profile") }; + private static int[] actionIds = { 0 }; + + public override void OnGUI(Rect rect, SerializedProperty property, GUIContent content) + { + if (!MixedRealityToolkit.IsInitialized || !MixedRealityToolkit.HasActiveProfile) + { + profile = null; + actionLabels = new[] { new GUIContent("Missing Mixed Reality Toolkit") }; + actionIds = new[] { 0 }; + } + + if (profile == null || + (MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + profile.InputActions != null && + profile.InputActions != MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile.InputActions)) + { + profile = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionsProfile; + + if (profile != null) + { + actionLabels = profile.InputActions.Select(action => new GUIContent(action.Description)).Prepend(new GUIContent("None")).ToArray(); + actionIds = profile.InputActions.Select(action => (int)action.Id).Prepend(0).ToArray(); + } + else + { + actionLabels = new[] { new GUIContent("No input action profile found") }; + actionIds = new[] { 0 }; + } + } + + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) + { + profile = null; + actionLabels = new[] { new GUIContent("Input System Disabled") }; + actionIds = new[] { 0 }; + } + + var label = EditorGUI.BeginProperty(rect, content, property); + var inputActionId = property.FindPropertyRelative("id"); + + if (profile == null || profile.InputActions == null || actionLabels == null || actionIds == null) + { + GUI.enabled = false; + EditorGUI.IntPopup(rect, label, inputActionId.intValue.ResetIfGreaterThan(0), actionLabels, actionIds); + GUI.enabled = true; + } + else + { + EditorGUI.BeginChangeCheck(); + inputActionId.intValue = EditorGUI.IntPopup(rect, label, inputActionId.intValue.ResetIfGreaterThan(profile.InputActions.Length), actionLabels, actionIds); + + if (EditorGUI.EndChangeCheck()) + { + var description = property.FindPropertyRelative("description"); + var axisConstraint = property.FindPropertyRelative("axisConstraint"); + + if (inputActionId.intValue > 0) + { + description.stringValue = profile.InputActions[inputActionId.intValue - 1].Description; + axisConstraint.intValue = (int)profile.InputActions[inputActionId.intValue - 1].AxisConstraint; + } + else + { + description.stringValue = "None"; + axisConstraint.intValue = 0; + } + } + } + + EditorGUI.EndProperty(); + } + } +} diff --git a/Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs.meta b/Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs.meta new file mode 100644 index 000000000..b90e1d3b9 --- /dev/null +++ b/Inspectors/PropertyDrawers/InputActionPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f2b6c43b37545acac3e31d1ec45b6ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs b/Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs new file mode 100644 index 000000000..245ac2444 --- /dev/null +++ b/Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Inspectors.PropertyDrawers +{ + [CustomPropertyDrawer(typeof(MixedRealityPose))] + public class MixedRealityPosePropertyDrawer : PropertyDrawer + { + private readonly GUIContent positionContent = new GUIContent("Position"); + private readonly GUIContent rotationContent = new GUIContent("Rotation"); + private const int NumberOfLines = 3; + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.singleLineHeight * NumberOfLines; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + bool lastMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + EditorGUI.BeginProperty(position, label, property); + EditorGUI.PrefixLabel(position, GUIUtility.GetControlID(FocusType.Passive), label); + EditorGUI.indentLevel++; + + var fieldHeight = position.height / NumberOfLines; + var positionRect = new Rect(position.x, position.y + fieldHeight, position.width, fieldHeight); + var rotationRect = new Rect(position.x, position.y + fieldHeight * 2, position.width, fieldHeight); + + EditorGUI.PropertyField(positionRect, property.FindPropertyRelative("position"), positionContent); + + EditorGUI.BeginChangeCheck(); + var rotationProperty = property.FindPropertyRelative("rotation"); + var newEulerRotation = EditorGUI.Vector3Field(rotationRect, rotationContent, rotationProperty.quaternionValue.eulerAngles); + + if (EditorGUI.EndChangeCheck()) + { + rotationProperty.quaternionValue = Quaternion.Euler(newEulerRotation); + } + + EditorGUI.indentLevel--; + EditorGUIUtility.wideMode = lastMode; + EditorGUI.EndProperty(); + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs.meta b/Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs.meta new file mode 100644 index 000000000..2f55b2def --- /dev/null +++ b/Inspectors/PropertyDrawers/MixedRealityPosePropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a8766ee4cc3043e2ac1508da4b674af4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs b/Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs new file mode 100644 index 000000000..7f0800f5a --- /dev/null +++ b/Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs @@ -0,0 +1,40 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEditor; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Extensions; + +namespace XRTK.Inspectors.PropertyDrawers +{ + /// + /// Renders the physics layer dropdown based on the current layers set in the Tag Manager. + /// + [CustomPropertyDrawer(typeof(PhysicsLayerAttribute))] + public sealed class PhysicsLayerAttributeDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var guiContents = new List(); + var layerIds = new List(); + + guiContents.Add(new GUIContent("(None)")); + layerIds.Add(-1); + + for (int i = 0; i < LayerExtensions.TagManagerLayers.arraySize; i++) + { + var layer = LayerExtensions.TagManagerLayers.GetArrayElementAtIndex(i); + + if (!string.IsNullOrWhiteSpace(layer.stringValue)) + { + guiContents.Add(new GUIContent($"{i}: {layer.stringValue}")); + layerIds.Add(i); + } + } + + property.intValue = EditorGUI.IntPopup(position, label, property.intValue, guiContents.ToArray(), layerIds.ToArray()); + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs.meta b/Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs.meta new file mode 100644 index 000000000..c620bddbc --- /dev/null +++ b/Inspectors/PropertyDrawers/PhysicsLayerAttributeDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55106da5220f4347bc9b288f4bfc480e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs b/Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs new file mode 100644 index 000000000..87cad34eb --- /dev/null +++ b/Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs @@ -0,0 +1,51 @@ +using UnityEditor; +using UnityEngine; +using XRTK.Attributes; + +namespace XRTK.Inspectors.PropertyDrawers +{ + /// + /// Custom property drawer for decorated values rendered in the inspector. + /// + [CustomPropertyDrawer(typeof(PrefabAttribute))] + public class PrefabPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var prefabAttribute = attribute as PrefabAttribute; + + if (property.propertyType == SerializedPropertyType.ObjectReference && + (property.objectReferenceValue is GameObject || property.objectReferenceValue == null)) + { + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(position, property); + + if (!EditorGUI.EndChangeCheck()) { return; } + if (property.objectReferenceValue == null) { return; } + + PrefabAssetType prefabAssetType = PrefabUtility.GetPrefabAssetType(property.objectReferenceValue); + + if (prefabAssetType != PrefabAssetType.Regular && prefabAssetType != PrefabAssetType.Variant) + { + property.objectReferenceValue = null; + Debug.LogWarning("Assigned GameObject must be a prefab"); + } + + if (prefabAttribute.Constraint != null) + { + var constraint = (property.objectReferenceValue as GameObject).GetComponent(prefabAttribute.Constraint); + + if (constraint == null) + { + property.objectReferenceValue = null; + Debug.LogWarning($"Assigned GameObject must have {prefabAttribute.Constraint.Name} component"); + } + } + } + else + { + EditorGUI.LabelField(position, label.text, "Use PrefabAttribute with GameObject fields only."); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs.meta b/Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs.meta new file mode 100644 index 000000000..6c720a752 --- /dev/null +++ b/Inspectors/PropertyDrawers/PrefabPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd69f2f62c3a4edd9d4a9a6a69200fd1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs b/Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs new file mode 100644 index 000000000..73326c151 --- /dev/null +++ b/Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs @@ -0,0 +1,30 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.InputSystem; + +namespace XRTK.Inspectors.PropertyDrawers +{ + [CustomPropertyDrawer(typeof(SpeechCommands))] + public class SpeechCommandPropertyDrawer : PropertyDrawer + { + public override void OnGUI(Rect rect, SerializedProperty property, GUIContent content) + { + EditorGUI.BeginProperty(rect, content, property); + + // calculate field rectangle with half of total drawer length for each + var fieldWidth = rect.width * 0.5f; + var keywordRect = new Rect(rect.x, rect.y, fieldWidth, rect.height); + var keyCodeRect = new Rect(rect.x + fieldWidth, rect.y, fieldWidth, rect.height); + + // the Keyword field without label + EditorGUI.PropertyField(keywordRect, property.FindPropertyRelative("keyword"), GUIContent.none); + // the KeyCode field without label + EditorGUI.PropertyField(keyCodeRect, property.FindPropertyRelative("keyCode"), GUIContent.none); + + EditorGUI.EndProperty(); + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs.meta b/Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs.meta new file mode 100644 index 000000000..4ebde517e --- /dev/null +++ b/Inspectors/PropertyDrawers/SpeechCommandPropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 74369f58bc254e2fb0f7a55b6af3eb41 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs b/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs new file mode 100644 index 000000000..a096ee120 --- /dev/null +++ b/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs @@ -0,0 +1,414 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Utilities; +using Assembly = System.Reflection.Assembly; + +namespace XRTK.Inspectors.PropertyDrawers +{ + /// + /// Custom property drawer for properties. + /// + [CustomPropertyDrawer(typeof(SystemType))] + [CustomPropertyDrawer(typeof(SystemTypeAttribute), true)] + public class TypeReferencePropertyDrawer : PropertyDrawer + { + private static int selectionControlId; + private static string selectedReference; + private static readonly Dictionary TypeMap = new Dictionary(); + private static readonly int ControlHint = typeof(TypeReferencePropertyDrawer).GetHashCode(); + private static readonly GUIContent TempContent = new GUIContent(); + private static readonly Color EnabledColor = Color.white; + private static readonly Color DisabledColor = Color.Lerp(Color.white, Color.clear, 0.5f); + + #region Type Filtering + + /// + /// Gets or sets a function that returns a collection of types that are + /// to be excluded from drop-down. A value of null specifies that + /// no types are to be excluded. + /// + /// + /// This property must be set immediately before presenting a class + /// type reference property field using + /// or since the value of this + /// property is reset to null each time the control is drawn. + /// Since filtering makes extensive use of + /// it is recommended to use a collection that is optimized for fast + /// look ups such as for better performance. + /// + /// + /// Exclude a specific type from being selected: + /// GetExcludedTypeCollection() { + /// var set = new HashSet(); + /// set.Add(typeof(SpecialClassToHideInDropdown)); + /// return set; + /// } + /// ]]> + /// + public static Func> ExcludedTypeCollectionGetter { get; set; } + + private static List GetFilteredTypes(SystemTypeAttribute filter) + { + var types = new List(); + var assemblies = CompilationPipeline.GetAssemblies(); + var excludedTypes = ExcludedTypeCollectionGetter?.Invoke(); + + foreach (var assembly in assemblies) + { + Assembly compiledAssembly = Assembly.Load(assembly.name); + FilterTypes(compiledAssembly, filter, excludedTypes, types); + } + + types.Sort((a, b) => string.Compare(a.FullName, b.FullName, StringComparison.Ordinal)); + return types; + } + + private static void FilterTypes(Assembly assembly, SystemTypeAttribute filter, ICollection excludedTypes, List output) + { + foreach (var type in assembly.GetTypes()) + { + bool isValid = type.IsValueType && !type.IsEnum || type.IsClass; + + if (!type.IsVisible || !isValid) + { + continue; + } + + if (filter != null && !filter.IsConstraintSatisfied(type)) + { + continue; + } + + if (excludedTypes != null && excludedTypes.Contains(type)) + { + continue; + } + + output.Add(type); + } + } + + #endregion Type Filtering + + #region Type Utility + + private static Type ResolveType(string classRef) + { + if (!TypeMap.TryGetValue(classRef, out Type type)) + { + type = !string.IsNullOrEmpty(classRef) ? Type.GetType(classRef) : null; + TypeMap[classRef] = type; + } + + return type; + } + + #endregion Type Utility + + #region Control Drawing / Event Handling + + /// + /// Draws the selection control for the type. + /// + /// + /// + /// + /// + /// True, if the class reference was successfully resolved. + private static void DrawTypeSelectionControl(Rect position, GUIContent label, ref string classRef, + SystemTypeAttribute filter) + { + if (label != null && label != GUIContent.none) + { + position = EditorGUI.PrefixLabel(position, label); + } + + int controlId = GUIUtility.GetControlID(ControlHint, FocusType.Keyboard, position); + + bool triggerDropDown = false; + + switch (Event.current.GetTypeForControl(controlId)) + { + case EventType.ExecuteCommand: + if (Event.current.commandName == "TypeReferenceUpdated") + { + if (selectionControlId == controlId) + { + if (classRef != selectedReference) + { + classRef = selectedReference; + GUI.changed = true; + } + + selectionControlId = 0; + selectedReference = null; + } + } + + break; + + case EventType.MouseDown: + if (GUI.enabled && position.Contains(Event.current.mousePosition)) + { + GUIUtility.keyboardControl = controlId; + triggerDropDown = true; + Event.current.Use(); + } + + break; + + case EventType.KeyDown: + if (GUI.enabled && GUIUtility.keyboardControl == controlId) + { + if (Event.current.keyCode == KeyCode.Return || Event.current.keyCode == KeyCode.Space) + { + triggerDropDown = true; + Event.current.Use(); + } + } + + break; + + case EventType.Repaint: + // Remove assembly name and namespace from content of popup control. + var classRefParts = classRef.Split(','); + var className = classRefParts[0].Trim(); + className = className.Substring(className.LastIndexOf(".", StringComparison.Ordinal) + 1); + TempContent.text = className; + + if (TempContent.text == string.Empty) + { + TempContent.text = "(None)"; + } + + EditorStyles.popup.Draw(position, TempContent, controlId); + break; + } + + if (triggerDropDown) + { + selectionControlId = controlId; + selectedReference = classRef; + + DisplayDropDown(position, GetFilteredTypes(filter), ResolveType(classRef), filter?.Grouping ?? TypeGrouping.ByNamespaceFlat); + } + } + + /// + /// Draws the selection control for the type. + /// + /// + /// + /// + /// + /// True, if the class reference was resolved successfully. + private static void DrawTypeSelectionControl(Rect position, SerializedProperty property, GUIContent label, SystemTypeAttribute filter) + { + try + { + var referenceProperty = property.FindPropertyRelative("reference"); + + EditorGUI.showMixedValue = referenceProperty.hasMultipleDifferentValues; + + var restoreColor = GUI.color; + var reference = referenceProperty.stringValue; + var restoreShowMixedValue = EditorGUI.showMixedValue; + var isValidClassRef = string.IsNullOrEmpty(reference) || ResolveType(reference) != null; + + if (!isValidClassRef) + { + isValidClassRef = TypeSearch(referenceProperty, ref reference, filter, false); + + if (isValidClassRef) + { + Debug.LogWarning($"Fixed missing class reference for property '{label.text}' on {property.serializedObject.targetObject.name}"); + } + else + { + if (!reference.Contains(" {missing}")) + { + reference += " {missing}"; + } + } + } + + if (isValidClassRef) + { + GUI.color = EnabledColor; + DrawTypeSelectionControl(position, label, ref reference, filter); + } + else + { + if (SystemTypeRepairWindow.WindowOpen) + { + GUI.color = DisabledColor; + DrawTypeSelectionControl(position, label, ref reference, filter); + } + else + { + var errorContent = EditorGUIUtility.IconContent("d_console.erroricon.sml"); + GUI.Label(new Rect(position.width, position.y, position.width, position.height), errorContent); + + var dropdownPosition = new Rect(position.x, position.y, position.width - 90, position.height); + var buttonPosition = new Rect(position.width - 75, position.y, 75, position.height); + + DrawTypeSelectionControl(dropdownPosition, label, ref reference, filter); + + if (GUI.Button(buttonPosition, "Try Repair", EditorStyles.miniButton)) + { + TypeSearch(referenceProperty, ref reference, filter, true); + } + } + } + + GUI.color = restoreColor; + referenceProperty.stringValue = reference; + referenceProperty.serializedObject.ApplyModifiedProperties(); + EditorGUI.showMixedValue = restoreShowMixedValue; + } + finally + { + ExcludedTypeCollectionGetter = null; + } + } + + private static bool TypeSearch(SerializedProperty property, ref string typeName, SystemTypeAttribute filter, bool showPickerWindow) + { + if (typeName.Contains(" {missing}")) { return false; } + + var typeNameWithoutAssembly = typeName.Split(new[] { "," }, StringSplitOptions.None)[0]; + var typeNameWithoutNamespace = System.Text.RegularExpressions.Regex.Replace(typeNameWithoutAssembly, @"[.\w]+\.(\w+)", "$1"); + var repairedTypeOptions = FindTypesByName(typeNameWithoutNamespace, filter); + + switch (repairedTypeOptions.Length) + { + case 0: + if (showPickerWindow) + { + EditorApplication.delayCall += () => + EditorUtility.DisplayDialog("No types found", $"No types with the name '{typeNameWithoutNamespace}' were found.", "OK"); + } + + return false; + case 1: + typeName = SystemType.GetReference(repairedTypeOptions[0]); + return true; + default: + if (showPickerWindow) + { + EditorApplication.delayCall += () => + SystemTypeRepairWindow.Display(repairedTypeOptions, property); + } + + return false; + } + } + + private static Type[] FindTypesByName(string typeName, SystemTypeAttribute filter) + { + var types = new List(); + var filteredTypes = GetFilteredTypes(filter); + + foreach (var type in filteredTypes) + { + if (type.Name.Equals(typeName)) + { + types.Add(type); + } + } + + return types.ToArray(); + } + + private static void DisplayDropDown(Rect position, List types, Type selectedType, TypeGrouping grouping) + { + var menu = new GenericMenu(); + menu.AddItem(new GUIContent("(None)"), selectedType == null, OnSelectedTypeName, null); + menu.AddSeparator(string.Empty); + + foreach (var type in types) + { + var menuLabel = FormatGroupedTypeName(type, grouping); + + if (string.IsNullOrEmpty(menuLabel)) { continue; } + + var content = new GUIContent(menuLabel); + menu.AddItem(content, type == selectedType, OnSelectedTypeName, type); + } + + menu.DropDown(position); + } + + private static string FormatGroupedTypeName(Type type, TypeGrouping grouping) + { + var name = type.FullName; + + switch (grouping) + { + case TypeGrouping.None: + return name; + case TypeGrouping.ByNamespace: + return string.IsNullOrEmpty(name) ? string.Empty : name.Replace('.', '/'); + case TypeGrouping.ByNamespaceFlat: + int lastPeriodIndex = string.IsNullOrEmpty(name) ? -1 : name.LastIndexOf('.'); + if (lastPeriodIndex != -1) + { + name = string.IsNullOrEmpty(name) + ? string.Empty + : $"{name.Substring(0, lastPeriodIndex)}/{name.Substring(lastPeriodIndex + 1)}"; + } + + return name; + case TypeGrouping.ByAddComponentMenu: + var addComponentMenuAttributes = type.GetCustomAttributes(typeof(AddComponentMenu), false); + if (addComponentMenuAttributes.Length == 1) + { + return ((AddComponentMenu)addComponentMenuAttributes[0]).componentMenu; + } + + Debug.Assert(type.FullName != null); + return $"Scripts/{type.FullName.Replace('.', '/')}"; + default: + throw new ArgumentOutOfRangeException(nameof(grouping), grouping, null); + } + } + + private static void OnSelectedTypeName(object userData) + { + selectedReference = SystemType.GetReference(userData as Type); + var typeReferenceUpdatedEvent = EditorGUIUtility.CommandEvent("TypeReferenceUpdated"); + EditorWindow.focusedWindow.SendEvent(typeReferenceUpdatedEvent); + } + + #endregion Control Drawing / Event Handling + + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorStyles.popup.CalcHeight(GUIContent.none, 0); + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + DrawTypeSelectionControl(position, property, label, attribute as SystemTypeAttribute); + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs.meta b/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs.meta new file mode 100644 index 000000000..4da3a096c --- /dev/null +++ b/Inspectors/PropertyDrawers/TypeReferencePropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 881b1f945d2842df896abeedcf337580 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs b/Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs new file mode 100644 index 000000000..fa3702da9 --- /dev/null +++ b/Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs @@ -0,0 +1,48 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Attributes; + +namespace XRTK.Inspectors.PropertyDrawers +{ + /// + /// Custom property drawer for decorated values rendered in the inspector. + /// + [CustomPropertyDrawer(typeof(Vector3RangeAttribute))] + public class Vector3RangePropertyDrawer : PropertyDrawer + { + public override float GetPropertyHeight(SerializedProperty property, GUIContent label) + { + return EditorGUIUtility.wideMode ? EditorGUIUtility.singleLineHeight : EditorGUIUtility.singleLineHeight * 2; + } + + public override void OnGUI(Rect position, SerializedProperty property, GUIContent label) + { + var range = (Vector3RangeAttribute)attribute; + + if (property.propertyType == SerializedPropertyType.Vector3) + { + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(position, property); + + if (EditorGUI.EndChangeCheck()) + { + var vectorData = property.vector3Value; + + vectorData.x = Mathf.Clamp(vectorData.x, range.Min, range.Max); + vectorData.y = Mathf.Clamp(vectorData.y, range.Min, range.Max); + vectorData.z = Mathf.Clamp(vectorData.z, range.Min, range.Max); + + property.vector3Value = vectorData; + property.serializedObject.ApplyModifiedProperties(); + } + } + else + { + EditorGUI.LabelField(position, label.text, "Use Vector3Range with Vector3 fields only."); + } + } + } +} \ No newline at end of file diff --git a/Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs.meta b/Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs.meta new file mode 100644 index 000000000..5a1fcf9f1 --- /dev/null +++ b/Inspectors/PropertyDrawers/Vector3RangePropertyDrawer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 296d4a7360124acbab2064c2526d57a4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/SystemTypeRepairWindow.cs b/Inspectors/SystemTypeRepairWindow.cs new file mode 100644 index 000000000..0d1af6d50 --- /dev/null +++ b/Inspectors/SystemTypeRepairWindow.cs @@ -0,0 +1,55 @@ +using System; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Inspectors +{ + /// + /// Popup window to help facilitate fixing broken serialized references. + /// + public class SystemTypeRepairWindow : EditorWindow + { + public static bool WindowOpen => window != null; + + private static Type[] repairedTypeOptions; + private static SerializedProperty property; + private static SystemTypeRepairWindow window; + private static readonly GUIContent WindowTitleContent = new GUIContent("Select repaired type"); + + /// + /// Displays a list of available types to use to repair the reference. + /// + /// The types that the user can choose from to repair the reference. + /// The serialized property that's missing the reference. + public static void Display(Type[] typeOptions, SerializedProperty serializedTypeProperty) + { + if (window != null) { window.Close(); } + + repairedTypeOptions = typeOptions; + property = serializedTypeProperty; + + window = CreateInstance(typeof(SystemTypeRepairWindow)) as SystemTypeRepairWindow; + Debug.Assert(window != null); + window.titleContent = WindowTitleContent; + window.ShowUtility(); + } + + private void OnGUI() + { + for (int i = 0; i < repairedTypeOptions.Length; i++) + { + if (GUILayout.Button(repairedTypeOptions[i].FullName, EditorStyles.miniButton)) + { + property.stringValue = SystemType.GetReference(repairedTypeOptions[i]); + property.serializedObject.ApplyModifiedProperties(); + Close(); + } + } + } + + private void OnDisable() => window = null; + + private void OnInspectorUpdate() => Repaint(); + } +} \ No newline at end of file diff --git a/Inspectors/SystemTypeRepairWindow.cs.meta b/Inspectors/SystemTypeRepairWindow.cs.meta new file mode 100644 index 000000000..ae57c173d --- /dev/null +++ b/Inspectors/SystemTypeRepairWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b35a275b079f4f8398c76cf69a9c390d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities.meta b/Inspectors/Utilities.meta new file mode 100644 index 000000000..341c22826 --- /dev/null +++ b/Inspectors/Utilities.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 68917077c74b464faf38902f5216f221 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs b/Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs new file mode 100644 index 000000000..cdfaaf240 --- /dev/null +++ b/Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs @@ -0,0 +1,396 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.IO; +using System.Linq; +using UnityEditor; +using UnityEditor.Compilation; +using UnityEditorInternal; +using UnityEngine; + +namespace XRTK.Inspectors.Utilities +{ + public static class AssemblyDefinitionEditorExtension + { + private const string DLL = ".dll"; + private const string META = ".meta"; + private const string JSON = ".json"; + private const string ASMDEF = ".asmdef"; + + #region Serialzied Data Objects + + [Serializable] + internal class AsmDefSourceFiles + { + public string[] Files = null; + } + + [Serializable] + internal class CustomScriptAssemblyData + { + public string name = null; + public string[] references = null; + public string[] optionalUnityReferences = null; + public string[] includePlatforms = null; + public string[] excludePlatforms = null; + public bool allowUnsafeCode = false; + + public AsmDefSourceFiles Source { get; set; } = new AsmDefSourceFiles(); + + public static CustomScriptAssemblyData FromJson(string json) + { + var scriptAssemblyData = JsonUtility.FromJson(json); + if (scriptAssemblyData == null) { throw new Exception("Json file does not contain an assembly definition"); } + if (string.IsNullOrEmpty(scriptAssemblyData.name)) { throw new Exception("Required property 'name' not set"); } + if (scriptAssemblyData.excludePlatforms != null && scriptAssemblyData.excludePlatforms.Length > 0 && + (scriptAssemblyData.includePlatforms != null && scriptAssemblyData.includePlatforms.Length > 0)) + { + throw new Exception("Both 'excludePlatforms' and 'includePlatforms' are set."); + } + + return scriptAssemblyData; + } + + public static string ToJson(CustomScriptAssemblyData data) + { + return JsonUtility.ToJson(data, true); + } + } + + #endregion Serialzied Data Objects + + [MenuItem("CONTEXT/AssemblyDefinitionImporter/Replace Source with Assembly", true, 99)] + public static bool ReplaceWithAssemblyValidation() + { + if (Selection.activeObject == null) { return false; } + return !AssetDatabase.GetAssetPath(Selection.activeObject).GetAssetPathSiblings().Any(path => path.Contains(DLL)); + } + + [MenuItem("CONTEXT/AssemblyDefinitionImporter/Replace Source with Assembly", false, 99)] + public static void ReplaceWithAssembly() + { + Debug.Assert(Selection.activeObject != null); + + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Getting things ready...", 0); + + var assetPath = AssetDatabase.GetAssetPath(Selection.activeObject); + var directoryPath = new FileInfo(assetPath).Directory?.FullName; + var assemblyDefinitionText = AssetDatabase.LoadAssetAtPath(assetPath).text; + var scriptAssemblyData = CustomScriptAssemblyData.FromJson(assemblyDefinitionText); + var fromAssemblyName = CompilationPipeline.GetAssemblyDefinitionFilePathFromAssemblyName(scriptAssemblyData.name); + + Debug.Assert(!string.IsNullOrEmpty(scriptAssemblyData.name)); + Debug.Assert(fromAssemblyName == assetPath, "Failed to get the proper assembly name!"); + + if (CompilationPipeline.GetAssemblies(AssembliesType.Editor).ReplaceSourceWithAssembly(ref scriptAssemblyData, directoryPath) || + CompilationPipeline.GetAssemblies(AssembliesType.Player).ReplaceSourceWithAssembly(ref scriptAssemblyData, directoryPath)) + { + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Saving source meta data for later...", 0.95f); + File.WriteAllText(assetPath, CustomScriptAssemblyData.ToJson(scriptAssemblyData)); + File.WriteAllText($"{Path.GetFullPath(assetPath).Hide()}{JSON}", JsonUtility.ToJson(scriptAssemblyData.Source, true)); + } + else + { + Debug.LogError("Failed to replace source code with assembly!"); + } + + AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); + EditorUtility.ClearProgressBar(); + } + + private static bool ReplaceSourceWithAssembly(this Assembly[] assemblies, ref CustomScriptAssemblyData assemblyData, string directoryPath) + { + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Gathering assembly information...", 0.1f); + + for (var i = 0; i < assemblies.Length; i++) + { + Assembly assembly = assemblies[i]; + EditorUtility.DisplayProgressBar("Replacing source with assembly", $"Processing assembly {assembly.name}", i / (float)assemblies.Length); + + if (assembly.name != assemblyData.name) { continue; } + + Debug.Assert(assembly.sourceFiles != null); + Debug.Assert(assembly.sourceFiles.Length > 0); + Debug.Assert(File.Exists(assembly.outputPath)); + + assemblyData.Source.Files = assembly.sourceFiles; + AssetDatabase.ReleaseCachedFileHandles(); + + for (var j = 0; j < assembly.sourceFiles.Length; j++) + { + var fullPath = Path.GetFullPath(assembly.sourceFiles[j]); + var newPath = fullPath.Hide(); + + EditorUtility.DisplayProgressBar("Replacing source with assembly", $"Processing file {Path.GetFileName(fullPath)}", j / (float)assembly.sourceFiles.Length); + + File.Move(fullPath, newPath); + File.Move($"{fullPath}{META}", $"{newPath}{META}"); + } + + var assemblyPath = $"{directoryPath}\\{assembly.name}{DLL}"; + + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Copying assembly into project...", 0.5f); + + File.Copy(assembly.outputPath, assemblyPath); + + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Importing plugin...", 0.625f); + + AssetDatabase.ImportAsset(assemblyPath.GetUnityProjectRelativePath()); + + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Updating plugin settings...", 0.75f); + + var importedAssembly = (PluginImporter)AssetImporter.GetAtPath(assemblyPath.GetUnityProjectRelativePath()); + + if (importedAssembly == null) + { + Debug.LogError("Failed to get plugin importer!"); + return true; + } + + if (assemblyData.excludePlatforms != null && assemblyData.excludePlatforms.Length > 0 && + assemblyData.includePlatforms != null && assemblyData.includePlatforms.Length > 0) + { + Selection.activeObject = importedAssembly; + Debug.LogError("Unable to update plugin import settings, as both exclude and include platforms have been enabled."); + return true; + } + + BuildTarget buildTarget; + importedAssembly.SetCompatibleWithAnyPlatform(assemblyData.includePlatforms == null || assemblyData.includePlatforms.Length == 0); + + if (assemblyData.includePlatforms != null && assemblyData.includePlatforms.Length > 0) + { + importedAssembly.SetCompatibleWithEditor(assemblyData.includePlatforms.Contains("Editor")); + + for (int j = 0; j < assemblyData.includePlatforms?.Length; j++) + { + if (assemblyData.includePlatforms[j].TryGetBuildTarget(out buildTarget)) + { + importedAssembly.SetCompatibleWithPlatform(buildTarget, true); + } + } + } + + if (assemblyData.excludePlatforms != null && assemblyData.excludePlatforms.Length > 0) + { + importedAssembly.SetCompatibleWithEditor(!assemblyData.excludePlatforms.Contains("Editor")); + + for (int j = 0; j < assemblyData.excludePlatforms?.Length; j++) + { + if (assemblyData.excludePlatforms[j].TryGetBuildTarget(out buildTarget)) + { + importedAssembly.SetExcludeFromAnyPlatform(buildTarget, true); + } + } + } + + EditorUtility.DisplayProgressBar("Replacing source with assembly", "Saving and re-importing with updated settings...", 0.8f); + + importedAssembly.SaveAndReimport(); + Selection.activeObject = importedAssembly; + + return true; + } + + return false; + } + + [MenuItem("CONTEXT/PluginImporter/Replace Assembly with Source", true, 99)] + [MenuItem("CONTEXT/AssemblyDefinitionImporter/Replace Assembly with Source", true, 99)] + public static bool ReplaceWithSourceValidation() + { + if (Selection.activeObject == null) { return false; } + + string assetPath = AssetDatabase.GetAssetPath(Selection.activeObject); + return assetPath.GetAssetPathSiblings().Any(path => assetPath.Contains(DLL) && path.Contains(ASMDEF) || assetPath.Contains(ASMDEF) && path.Contains(DLL)); + } + + [MenuItem("CONTEXT/PluginImporter/Replace Assembly with Source", false, 99)] + [MenuItem("CONTEXT/AssemblyDefinitionImporter/Replace Assembly with Source", false, 99)] + public static void ReplaceWithSource() + { + Debug.Assert(Selection.activeObject != null); + + EditorUtility.DisplayProgressBar("Replacing assembly with source", "Getting things ready...", 0); + + var builtAssemblyPath = string.Empty; + var assemblyDefinitionPath = string.Empty; + var assetPath = AssetDatabase.GetAssetPath(Selection.activeObject); + + if (assetPath.Contains(DLL)) + { + builtAssemblyPath = assetPath; + assemblyDefinitionPath = assetPath.FindSiblingFileByExtension(ASMDEF); + } + else if (assetPath.Contains(ASMDEF)) + { + assemblyDefinitionPath = assetPath; + builtAssemblyPath = assetPath.FindSiblingFileByExtension(DLL); + } + + EditorUtility.DisplayProgressBar("Replacing assembly with source", "Getting source file data...", .25f); + + Debug.Assert(!string.IsNullOrEmpty(builtAssemblyPath), "No Assembly found for this Assembly Definition!"); + Debug.Assert(!string.IsNullOrEmpty(assemblyDefinitionPath), "No Assembly Definition found for this Assembly!"); + var assemblyDefinitionAsset = AssetDatabase.LoadAssetAtPath(assemblyDefinitionPath); + Debug.Assert(assemblyDefinitionAsset != null, $"Failed to load assembly def asset at {assemblyDefinitionPath}"); + var assemblyDefinitionText = assemblyDefinitionAsset.text; + var scriptAssemblyData = CustomScriptAssemblyData.FromJson(assemblyDefinitionText); + var assemblySourcePath = $"{Path.GetFullPath(assemblyDefinitionPath).Hide()}{JSON}"; + Debug.Assert(File.Exists(assemblySourcePath), "Fatal Error: Missing meta data to re-import source files. You'll need to manually do it by removing the '.' in front of each file."); + string sourceFilesText = File.ReadAllText(assemblySourcePath); + File.Delete(assemblySourcePath); + scriptAssemblyData.Source = JsonUtility.FromJson(sourceFilesText); + + Debug.Assert(scriptAssemblyData != null); + Debug.Assert(scriptAssemblyData.Source?.Files != null, "Fatal Error: Missing meta data to re-import source files. You'll need to manually do it by removing the '.' in front of each file."); + + for (var i = 0; i < scriptAssemblyData.Source.Files.Length; i++) + { + var sourceFile = scriptAssemblyData.Source.Files[i]; + var fullHiddenPath = Path.GetFullPath(sourceFile).Hide(); + + if (!File.Exists(fullHiddenPath)) + { + Debug.LogError($"Failed to find source file for {scriptAssemblyData.name}.{Path.GetFileNameWithoutExtension(sourceFile)}"); + continue; + } + + var sourcePath = fullHiddenPath.UnHide(); + + EditorUtility.DisplayProgressBar("Replacing assembly with source", $"Processing file {Path.GetFileName(fullHiddenPath).UnHide()}", i / (float)scriptAssemblyData.Source.Files.Length); + + File.Move(fullHiddenPath, sourcePath); + File.Move($"{fullHiddenPath}{META}", $"{sourcePath}{META}"); + } + + EditorUtility.DisplayProgressBar("Replacing assembly with source", "Deleting assembly...", .75f); + + File.Delete(builtAssemblyPath); + File.Delete($"{builtAssemblyPath}{META}"); + + AssetDatabase.Refresh(ImportAssetOptions.ForceUpdate); + EditorUtility.ClearProgressBar(); + } + + private static string Hide(this string path) + { + var index = path.LastIndexOf("\\", StringComparison.Ordinal); + + if (index == 0) + { + index = path.LastIndexOf("/", StringComparison.Ordinal); + } + + if (index == 0) + { + return $".{path}"; + } + + return path.Insert(index + 1, "."); + } + + private static string UnHide(this string path) + { + string fileName = Path.GetFileName(path); + + if (string.IsNullOrEmpty(fileName)) { return path; } + if (!fileName.Contains(".")) { return path; } + + if (fileName.IndexOf(".", StringComparison.Ordinal) == 0) + { + fileName = fileName.TrimStart('.'); + } + + return path.Replace($"\\.{fileName}", $"\\{fileName}"); + } + + private static string GetUnityProjectRelativePath(this string path) + { + return path.Replace(Path.GetFullPath(Application.dataPath), "Assets").Replace("\\", "/"); + } + + private static string[] GetAssetPathSiblings(this string assetPath) + { + Debug.Assert(!string.IsNullOrEmpty(assetPath), $"Invalid asset path {assetPath}"); + string directoryPath = new FileInfo(assetPath).Directory?.FullName; + Debug.Assert(!string.IsNullOrEmpty(directoryPath), $"Invalid root path {directoryPath}"); + return Directory.GetFiles(directoryPath); + } + + private static string FindSiblingFileByExtension(this string path, string extension) + { + var directoryPath = new FileInfo(path).Directory?.FullName; + Debug.Assert(!string.IsNullOrEmpty(directoryPath)); + var files = Directory.GetFiles(directoryPath); + + for (var i = 0; i < files.Length; i++) + { + if (Path.GetExtension(files[i]) == extension) + { + return files[i].GetUnityProjectRelativePath(); + } + } + + return string.Empty; + } + + private static bool TryGetBuildTarget(this string platform, out BuildTarget buildTarget) + { + switch (platform) + { + case "Editor": + buildTarget = BuildTarget.NoTarget; + return false; + case "Android": + buildTarget = BuildTarget.Android; + return true; + case "iOS": + buildTarget = BuildTarget.iOS; + return true; + case "LinuxStandalone32": + buildTarget = BuildTarget.StandaloneLinux; + return true; + case "LinuxStandalone64": + buildTarget = BuildTarget.StandaloneLinux64; + return true; + case "LinuxStandaloneUniversal": + buildTarget = BuildTarget.StandaloneLinuxUniversal; + return true; + case "macOSStandalone": + buildTarget = BuildTarget.StandaloneOSX; + return true; + case "PS4": + buildTarget = BuildTarget.PS4; + return true; + case "Switch": + buildTarget = BuildTarget.Switch; + return true; + case "tvOS": + buildTarget = BuildTarget.tvOS; + return true; + case "WSA": + buildTarget = BuildTarget.WSAPlayer; + return true; + case "WebGL": + buildTarget = BuildTarget.WebGL; + return true; + case "WindowsStandalone32": + buildTarget = BuildTarget.StandaloneWindows; + return true; + case "WindowsStandalone64": + buildTarget = BuildTarget.StandaloneWindows64; + return true; + case "XboxOne": + buildTarget = BuildTarget.XboxOne; + return true; + default: + // If unsupported then it needs to be added to the switch statement above. + Debug.LogError($"{platform} unsupported!"); + buildTarget = BuildTarget.NoTarget; + return false; + } + } + } +} diff --git a/Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs.meta b/Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs.meta new file mode 100644 index 000000000..eaa1c8430 --- /dev/null +++ b/Inspectors/Utilities/AssemblyDefinitionEditorExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 39f248ff01cf4bf7b8327a7819be5649 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/AutoSceneSwitcher.cs b/Inspectors/Utilities/AutoSceneSwitcher.cs new file mode 100644 index 000000000..e666bc83c --- /dev/null +++ b/Inspectors/Utilities/AutoSceneSwitcher.cs @@ -0,0 +1,87 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEditor.Experimental.SceneManagement; +using UnityEditor.SceneManagement; +using UnityEngine.SceneManagement; +using XRTK.Inspectors.Utilities.SymbolicLinks; + +namespace XRTK.Inspectors.Utilities +{ + /// + /// Ensures that the is always loaded + /// so that the runs correctly in the editor. + /// + [InitializeOnLoad] + public static class AutoSceneSwitcher + { + static AutoSceneSwitcher() + { + EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + + if (MixedRealityPreferences.StartSceneAsset == null && + EditorBuildSettings.scenes.Length > 0 && + !EditorBuildSettings.scenes[0].path.Contains("SampleScene")) + { + MixedRealityPreferences.StartSceneAsset = AssetDatabase.LoadAssetAtPath(EditorBuildSettings.scenes[0].path); + } + } + + private static void OnPlayModeStateChanged(PlayModeStateChange playModeState) + { + if (SymbolicLinker.IsSyncing || + EditorApplication.isPlaying || + !EditorApplication.isPlayingOrWillChangePlaymode || + PrefabStageUtility.GetCurrentPrefabStage() != null) + { + return; + } + + var startSceneAsset = MixedRealityPreferences.StartSceneAsset; + var startSceneLoaded = false; + + if (startSceneAsset != null) + { + for (int i = 0; i < SceneManager.sceneCount; i++) + { + var scene = SceneManager.GetSceneAt(i); + + if (scene.name == startSceneAsset.name && + SceneManager.GetActiveScene().name != startSceneAsset.name) + { + SceneManager.SetActiveScene(scene); + startSceneLoaded = true; + break; + } + } + + if (!startSceneLoaded && startSceneAsset != null) + { + var startScene = EditorSceneManager.OpenScene(AssetDatabase.GetAssetOrScenePath(startSceneAsset), OpenSceneMode.Additive); + SceneManager.SetActiveScene(startScene); + } + } + + if (startSceneAsset != null && SceneManager.GetActiveScene().name == startSceneAsset.name) { return; } + + var dialogResult = EditorUtility.DisplayDialogComplex( + title: "Missing the MixedRealityToolkit", + message: "Would you like to configure the Mixed Reality Toolkit now?", + "No, play anyway", + "Configure, then play", + "Cancel"); + + switch (dialogResult) + { + case 1: + MixedRealityToolkitInspector.CreateMixedRealityToolkitGameObject(); + EditorApplication.isPlaying = true; + break; + case 2: + EditorApplication.isPlaying = false; + break; + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/AutoSceneSwitcher.cs.meta b/Inspectors/Utilities/AutoSceneSwitcher.cs.meta new file mode 100644 index 000000000..ac590e3b0 --- /dev/null +++ b/Inspectors/Utilities/AutoSceneSwitcher.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5ff9c1e4edad4fb6a1ba37e00f5b2575 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/CanvasEditorExtension.cs b/Inspectors/Utilities/CanvasEditorExtension.cs new file mode 100644 index 000000000..53a6a751b --- /dev/null +++ b/Inspectors/Utilities/CanvasEditorExtension.cs @@ -0,0 +1,139 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Extensions; +using UnityEditor; +using UnityEngine; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; +using XRTK.Utilities; + +namespace XRTK.Inspectors.Utilities +{ + /// + /// Helper class to assign the UIRaycastCamera when creating a new canvas object and assigning the world space render mode. + /// + [CustomEditor(typeof(Canvas))] + public class CanvasEditorExtension : Editor + { + private const string DialogText = "Hi there, we noticed that you've changed this canvas to use WorldSpace.\n\n" + + "In order for the InputManager to work properly with uGUI raycasting we'd like to update this canvas' " + + "WorldCamera to use the FocusProvider's UIRaycastCamera.\n"; + + private Canvas canvas; + + private bool hasUtility = false; + + private static bool IsUtilityValid + { + get + { + var isInputSystemValid = MixedRealityToolkit.GetService(false) != null; + return MixedRealityToolkit.Instance != null && + MixedRealityToolkit.HasActiveProfile && + MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + isInputSystemValid; + } + } + + private void OnEnable() + { + if (!MixedRealityToolkit.IsInitialized || !MixedRealityPreferences.ShowCanvasUtilityPrompt) { return; } + + canvas = (Canvas)target; + + var utility = canvas.GetComponent(); + + hasUtility = utility != null; + + if (hasUtility && !IsUtilityValid || + !hasUtility && IsUtilityValid) + { + UpdateCanvasSettings(); + } + } + + public override void OnInspectorGUI() + { + EditorGUI.BeginChangeCheck(); + base.OnInspectorGUI(); + + if (EditorGUI.EndChangeCheck() && + MixedRealityToolkit.IsInitialized && + MixedRealityPreferences.ShowCanvasUtilityPrompt) + { + UpdateCanvasSettings(); + } + } + + private void UpdateCanvasSettings() + { + bool removeUtility = false; + + // Update the world camera if we need to. + if (IsUtilityValid && + canvas.isRootCanvas && + canvas.renderMode == RenderMode.WorldSpace && + canvas.worldCamera != MixedRealityToolkit.InputSystem.FocusProvider.UIRaycastCamera) + { + var selection = EditorUtility.DisplayDialogComplex("Attention!", DialogText, "OK", "Cancel", "Dismiss Forever"); + switch (selection) + { + case 0: + canvas.worldCamera = MixedRealityToolkit.InputSystem.FocusProvider.UIRaycastCamera; + break; + case 1: + removeUtility = true; + break; + case 2: + MixedRealityPreferences.ShowCanvasUtilityPrompt = false; + removeUtility = true; + break; + } + } + + // Add the Canvas Helper if we need it. + if (IsUtilityValid && + canvas.isRootCanvas && + canvas.renderMode == RenderMode.WorldSpace && + canvas.worldCamera == MixedRealityToolkit.InputSystem.FocusProvider.UIRaycastCamera) + { + var helper = canvas.gameObject.EnsureComponent(); + helper.Canvas = canvas; + } + + // Reset the world canvas if we need to. + if (IsUtilityValid && + canvas.isRootCanvas && + canvas.renderMode != RenderMode.WorldSpace && + canvas.worldCamera == MixedRealityToolkit.InputSystem.FocusProvider.UIRaycastCamera) + { + // Sets it back to MainCamera default. + canvas.worldCamera = null; + removeUtility = true; + } + + var utility = canvas.GetComponent(); + + // Remove the helper if we don't need it. + if (removeUtility || !IsUtilityValid) + { + if (utility != null) + { + canvas.worldCamera = null; + EditorApplication.delayCall += () => DestroyImmediate(utility); + } + + hasUtility = false; + } + else + { + if (canvas.renderMode == RenderMode.WorldSpace) + { + Debug.Assert(utility != null); + hasUtility = true; + } + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/CanvasEditorExtension.cs.meta b/Inspectors/Utilities/CanvasEditorExtension.cs.meta new file mode 100644 index 000000000..dc684e70b --- /dev/null +++ b/Inspectors/Utilities/CanvasEditorExtension.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 770a343a3cd84213b38c59298a68c9c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/ChannelPackerWindow.cs b/Inspectors/Utilities/ChannelPackerWindow.cs new file mode 100644 index 000000000..0925f4664 --- /dev/null +++ b/Inspectors/Utilities/ChannelPackerWindow.cs @@ -0,0 +1,262 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.IO; +using UnityEditor; +using UnityEngine; + +namespace XRTK.Inspectors +{ + public class ChannelPackerWindow : EditorWindow + { + private enum Channel + { + Red = 0, + Green = 1, + Blue = 2, + Alpha = 3, + RGBAverage = 4 + } + + private const float DEFAULT_UNIFORM_VALUE = -0.01f; + private const string StandardShaderName = "Standard"; + private const string StandardRoughnessShaderName = "Standard (Roughness setup)"; + private const string StandardSpecularShaderName = "Standard (Specular setup)"; + + + private static readonly GUIContent metallicUniformContent = new GUIContent("Metallic Uniform"); + private static readonly GUIContent occlusionUniformContent = new GUIContent("Occlusion Uniform"); + private static readonly GUIContent smoothnessUniformContent = new GUIContent("Smoothness Uniform"); + private static readonly GUIContent emissionUniformContent = new GUIContent("Emission Uniform"); + + private static readonly int OcclusionMap = Shader.PropertyToID("_OcclusionMap"); + private static readonly int EmissionMap = Shader.PropertyToID("_EmissionMap"); + private static readonly int MetallicGlossMap = Shader.PropertyToID("_MetallicGlossMap"); + private static readonly int SmoothnessTextureChannel = Shader.PropertyToID("_SmoothnessTextureChannel"); + private static readonly int SpecGlossMap = Shader.PropertyToID("_SpecGlossMap"); + private static readonly int MainTex = Shader.PropertyToID("_MainTex"); + private static readonly int MetallicMap = Shader.PropertyToID("_MetallicMap"); + private static readonly int MetallicMapChannel = Shader.PropertyToID("_MetallicMapChannel"); + private static readonly int MetallicUniform = Shader.PropertyToID("_MetallicUniform"); + private static readonly int OcclusionMapChannel = Shader.PropertyToID("_OcclusionMapChannel"); + private static readonly int OcclusionUniform = Shader.PropertyToID("_OcclusionUniform"); + private static readonly int EmissionMapChannel = Shader.PropertyToID("_EmissionMapChannel"); + private static readonly int EmissionUniform = Shader.PropertyToID("_EmissionUniform"); + private static readonly int SmoothnessMap = Shader.PropertyToID("_SmoothnessMap"); + private static readonly int SmoothnessMapChannel = Shader.PropertyToID("_SmoothnessMapChannel"); + private static readonly int SmoothnessUniform = Shader.PropertyToID("_SmoothnessUniform"); + + private Texture2D metallicMap; + private Channel metallicMapChannel = Channel.Red; + private float metallicUniform = DEFAULT_UNIFORM_VALUE; + private Texture2D occlusionMap; + private Channel occlusionMapChannel = Channel.Green; + private float occlusionUniform = DEFAULT_UNIFORM_VALUE; + private Texture2D emissionMap; + private Channel emissionMapChannel = Channel.RGBAverage; + private float emissionUniform = DEFAULT_UNIFORM_VALUE; + private Texture2D smoothnessMap; + private Channel smoothnessMapChannel = Channel.Alpha; + private float smoothnessUniform = DEFAULT_UNIFORM_VALUE; + private Material standardMaterial; + + [MenuItem("Mixed Reality Toolkit/Tools/Channel Packer", false, 20)] + private static void ShowWindow() + { + var window = GetWindow(); + window.titleContent = new GUIContent("Channel Packer"); + window.minSize = new Vector2(380.0f, 680.0f); + window.Show(); + } + + private void OnGUI() + { + GUILayout.Label("Import", EditorStyles.boldLabel); + GUI.enabled = metallicUniform < 0.0f; + metallicMap = (Texture2D)EditorGUILayout.ObjectField("Metallic Map", metallicMap, typeof(Texture2D), false); + metallicMapChannel = (Channel)EditorGUILayout.EnumPopup("Input Channel", metallicMapChannel); + GUI.enabled = true; + metallicUniform = EditorGUILayout.Slider(metallicUniformContent, metallicUniform, DEFAULT_UNIFORM_VALUE, 1.0f); + GUILayout.Box("Output Channel: Red", EditorStyles.helpBox); + EditorGUILayout.Separator(); + GUI.enabled = occlusionUniform < 0.0f; + occlusionMap = (Texture2D)EditorGUILayout.ObjectField("Occlusion Map", occlusionMap, typeof(Texture2D), false); + occlusionMapChannel = (Channel)EditorGUILayout.EnumPopup("Input Channel", occlusionMapChannel); + GUI.enabled = true; + occlusionUniform = EditorGUILayout.Slider(occlusionUniformContent, occlusionUniform, DEFAULT_UNIFORM_VALUE, 1.0f); + GUILayout.Box("Output Channel: Green", EditorStyles.helpBox); + EditorGUILayout.Separator(); + GUI.enabled = emissionUniform < 0.0f; + emissionMap = (Texture2D)EditorGUILayout.ObjectField("Emission Map", emissionMap, typeof(Texture2D), false); + emissionMapChannel = (Channel)EditorGUILayout.EnumPopup("Input Channel", emissionMapChannel); + GUI.enabled = true; + emissionUniform = EditorGUILayout.Slider(emissionUniformContent, emissionUniform, DEFAULT_UNIFORM_VALUE, 1.0f); + GUILayout.Box("Output Channel: Blue", EditorStyles.helpBox); + EditorGUILayout.Separator(); + GUI.enabled = smoothnessUniform < 0.0f; + smoothnessMap = (Texture2D)EditorGUILayout.ObjectField("Smoothness Map", smoothnessMap, typeof(Texture2D), false); + smoothnessMapChannel = (Channel)EditorGUILayout.EnumPopup("Input Channel", smoothnessMapChannel); + GUI.enabled = true; + smoothnessUniform = EditorGUILayout.Slider(smoothnessUniformContent, smoothnessUniform, DEFAULT_UNIFORM_VALUE, 1.0f); + GUILayout.Box("Output Channel: Alpha", EditorStyles.helpBox); + EditorGUILayout.Separator(); + + standardMaterial = (Material)EditorGUILayout.ObjectField("Standard Material", standardMaterial, typeof(Material), false); + + GUI.enabled = standardMaterial != null && IsUnityStandardMaterial(standardMaterial); + + if (GUILayout.Button("Auto populate from Standard Material")) + { + AutoPopulate(); + } + + GUI.enabled = CanSave(); + + EditorGUILayout.Separator(); + + GUILayout.Label("Export", EditorStyles.boldLabel); + + if (GUILayout.Button("Save Channel Map")) + { + Save(); + } + + GUILayout.Box("Metallic (Red), Occlusion (Green), Emission (Blue), Smoothness (Alpha)", EditorStyles.helpBox); + } + + private void AutoPopulate() + { + metallicUniform = DEFAULT_UNIFORM_VALUE; + occlusionUniform = DEFAULT_UNIFORM_VALUE; + emissionUniform = DEFAULT_UNIFORM_VALUE; + smoothnessUniform = DEFAULT_UNIFORM_VALUE; + + occlusionMap = (Texture2D)standardMaterial.GetTexture(OcclusionMap); + occlusionMapChannel = occlusionMap != null ? Channel.Green : occlusionMapChannel; + emissionMap = (Texture2D)standardMaterial.GetTexture(EmissionMap); + emissionMapChannel = emissionMap != null ? Channel.RGBAverage : emissionMapChannel; + + switch (standardMaterial.shader.name) + { + case StandardShaderName: + metallicMap = (Texture2D)standardMaterial.GetTexture(MetallicGlossMap); + metallicMapChannel = metallicMap != null ? Channel.Red : metallicMapChannel; + smoothnessMap = ((int)standardMaterial.GetFloat(SmoothnessTextureChannel) == 0) + ? metallicMap + : (Texture2D)standardMaterial.GetTexture(MainTex); + smoothnessMapChannel = smoothnessMap != null ? Channel.Alpha : smoothnessMapChannel; + break; + case StandardRoughnessShaderName: + metallicMap = (Texture2D)standardMaterial.GetTexture(MetallicGlossMap); + metallicMapChannel = metallicMap != null ? Channel.Red : metallicMapChannel; + smoothnessMap = (Texture2D)standardMaterial.GetTexture(SpecGlossMap); + smoothnessMapChannel = smoothnessMap != null ? Channel.Red : smoothnessMapChannel; + break; + default: + smoothnessMap = ((int)standardMaterial.GetFloat(SmoothnessTextureChannel) == 0) + ? (Texture2D)standardMaterial.GetTexture(SpecGlossMap) + : (Texture2D)standardMaterial.GetTexture(MainTex); + + smoothnessMapChannel = smoothnessMap != null ? Channel.Alpha : smoothnessMapChannel; + break; + } + } + + private void Save() + { + var textures = new Texture[] { metallicMap, occlusionMap, emissionMap, smoothnessMap }; + CalculateChannelMapSize(textures, out int width, out int height); + var channelMap = new Texture2D(width, height); + + RenderTexture renderTexture = RenderTexture.GetTemporary(width, height, 0, RenderTextureFormat.Default, RenderTextureReadWrite.Linear); + + // Use the GPU to pack the various texture maps into a single texture. + var channelPacker = new Material(Shader.Find("Hidden/ChannelPacker")); + + channelPacker.SetTexture(MetallicMap, metallicMap); + channelPacker.SetInt(MetallicMapChannel, (int)metallicMapChannel); + channelPacker.SetFloat(MetallicUniform, metallicUniform); + channelPacker.SetTexture(OcclusionMap, occlusionMap); + channelPacker.SetInt(OcclusionMapChannel, (int)occlusionMapChannel); + channelPacker.SetFloat(OcclusionUniform, occlusionUniform); + channelPacker.SetTexture(EmissionMap, emissionMap); + channelPacker.SetInt(EmissionMapChannel, (int)emissionMapChannel); + channelPacker.SetFloat(EmissionUniform, emissionUniform); + channelPacker.SetTexture(SmoothnessMap, smoothnessMap); + channelPacker.SetInt(SmoothnessMapChannel, (int)smoothnessMapChannel); + channelPacker.SetFloat(SmoothnessUniform, smoothnessUniform); + Graphics.Blit(null, renderTexture, channelPacker); + DestroyImmediate(channelPacker); + + // Save the last render texture to a texture. + RenderTexture previous = RenderTexture.active; + RenderTexture.active = renderTexture; + channelMap.ReadPixels(new Rect(0.0f, 0.0f, width, height), 0, 0); + channelMap.Apply(); + RenderTexture.active = previous; + RenderTexture.ReleaseTemporary(renderTexture); + + // Save the texture to disk. + string filename = string.Format("{0}{1}.png", GetChannelMapName(textures), "_Channel"); + string path = EditorUtility.SaveFilePanel("Save Channel Map", "", filename, "png"); + + if (path.Length == 0) { return; } + + byte[] pngData = channelMap.EncodeToPNG(); + + if (pngData != null) + { + File.WriteAllBytes(path, pngData); + Debug.LogFormat("Saved channel map to: {0}", path); + } + } + + private bool CanSave() + { + return metallicMap != null || occlusionMap != null || emissionMap != null || smoothnessMap != null || + metallicUniform >= 0.0f || occlusionUniform >= 0.0f || emissionUniform >= 0.0f || smoothnessUniform >= 0.0f; + } + + private static bool IsUnityStandardMaterial(Material material) + { + if (material != null) + { + if (material.shader.name == StandardShaderName || + material.shader.name == StandardRoughnessShaderName || + material.shader.name == StandardSpecularShaderName) + { + return true; + } + } + + return false; + } + + private static string GetChannelMapName(Texture[] textures) + { + // Use the first named texture as the channel map name. + foreach (Texture texture in textures) + { + if (texture != null && !string.IsNullOrEmpty(texture.name)) + { + return texture.name; + } + } + + return string.Empty; + } + + private static void CalculateChannelMapSize(Texture[] textures, out int width, out int height) + { + width = 1; + height = 1; + + // Find the max extents of all texture maps. + foreach (Texture texture in textures) + { + width = texture != null ? Mathf.Max(texture.width, width) : width; + height = texture != null ? Mathf.Max(texture.height, height) : height; + } + } + } +} diff --git a/Inspectors/Utilities/ChannelPackerWindow.cs.meta b/Inspectors/Utilities/ChannelPackerWindow.cs.meta new file mode 100644 index 000000000..0037e6af8 --- /dev/null +++ b/Inspectors/Utilities/ChannelPackerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: de594dcc0691c3f4cb9a8a1ce5905342 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/GitUtilities.cs b/Inspectors/Utilities/GitUtilities.cs new file mode 100644 index 000000000..161a11dba --- /dev/null +++ b/Inspectors/Utilities/GitUtilities.cs @@ -0,0 +1,147 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using UnityEditor; +using UnityEngine; +using XRTK.Extensions; +using XRTK.Inspectors.Utilities.SymbolicLinks; +using Debug = UnityEngine.Debug; + +namespace XRTK.Inspectors.Utilities +{ + public static class GitUtilities + { + /// + /// Returns the root directory of this repository. + /// + /// + /// If Git is not installed or cannot be found, then the project's root directory is returned. + /// + public static string RepositoryRootDir + { + get + { + if (!string.IsNullOrEmpty(projectRootDir)) { return projectRootDir; } + + if (new Process().Run($@"/C cd {Application.dataPath} && git rev-parse --show-toplevel", out var rootDir)) + { + return projectRootDir = rootDir.ToBackSlashes().Replace("\n", string.Empty); + } + + return projectRootDir = Directory.GetParent(Application.dataPath).FullName; + } + } + + private static string projectRootDir; + + [MenuItem("Assets/Submodules/Force update all submodules", false, 23)] + public static void ForceUpdateSubmodules() + { + UpdateSubmodules(); + SymbolicLinker.RunSync(true); + } + + /// + /// Writes the specified path to the projects git ignore file located at the root of the repository. + /// + /// + public static void WritePathToGitIgnore(string ignoredPath) + { + if (string.IsNullOrEmpty(ignoredPath)) + { + Debug.LogError("You cannot pass null or empty parameter."); + return; + } + + var rootDir = RepositoryRootDir; + ignoredPath = ignoredPath.Replace($"{rootDir.ToBackSlashes()}/", string.Empty); + var ignoreFilePath = $"{rootDir}\\.gitignore"; + + if (File.Exists(ignoreFilePath)) + { + bool addPath = true; + + try + { + // Create a new StreamReader, tell it which file to read and what encoding the file was saved as + // Immediately clean up the reader after this block of code is done. + using (var reader = new StreamReader(ignoreFilePath)) + { + // While there's lines left in the text file, do this: + string line; + do + { + line = reader.ReadLine(); + + if (!string.IsNullOrEmpty(line) && line.Equals(ignoredPath)) + { + // Don't add the line if it already exists. + addPath = false; + } + } + while (line != null); + + // Done reading, close the reader and return true to broadcast success. + reader.Close(); + } + } + // If anything broke in the try block, we throw an exception with information on what didn't work. + catch (Exception e) + { + Debug.LogException(e); + } + + if (addPath) + { + File.AppendAllText(ignoreFilePath, $"{ignoredPath}{Environment.NewLine}", Encoding.UTF8); + } + } + else + { + File.WriteAllText(ignoreFilePath, $"{ignoredPath}{Environment.NewLine}", Encoding.UTF8); + } + } + + /// + /// Manually update the git submodules for this project. + /// + /// True, if update was successful. + internal static bool UpdateSubmodules() + { + EditorUtility.DisplayProgressBar("Updating Submodules...", "Please wait...", 0.5f); + var success = new Process().Run($"/C cd \"{RepositoryRootDir}\" && git submodule update --init --all", out _); + EditorUtility.ClearProgressBar(); + // TODO we need to ensure that we return true if git isn't installed. + return success; + } + + /// + /// Gets all the tags from a remote repository. + /// + /// The address of the remote repository. + /// A list of tags from the remote repository. + public static async Task> GetAllTagsFromRemoteAsync(string url) + { + var result = await new Process().RunAsync($"/C git ls-remote --tags {url}"); + + if (result.ExitCode != 0) + { + throw new Exception("Failed to get remote tags"); + } + + return from tag in result.Output + select Regex.Match(tag, "(\\d*\\.\\d*\\.\\d*)") + into match + where match.Success + select match.Value; + } + } +} diff --git a/Inspectors/Utilities/GitUtilities.cs.meta b/Inspectors/Utilities/GitUtilities.cs.meta new file mode 100644 index 000000000..873aa0291 --- /dev/null +++ b/Inspectors/Utilities/GitUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 60b8f3fb4ae50094ba98cd42f1c4e8f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/HoverLightInspector.cs b/Inspectors/Utilities/HoverLightInspector.cs new file mode 100644 index 000000000..d63c331c7 --- /dev/null +++ b/Inspectors/Utilities/HoverLightInspector.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities; + +namespace XRTK.Inspectors +{ + [CustomEditor(typeof(HoverLight))] + public class HoverLightInspector : Editor + { + private bool HasFrameBounds() { return true; } + + private Bounds OnGetFrameBounds() + { + var light = target as HoverLight; + Debug.Assert(light != null); + return new Bounds(light.transform.position, Vector3.one * light.Radius); + } + } +} diff --git a/Inspectors/Utilities/HoverLightInspector.cs.meta b/Inspectors/Utilities/HoverLightInspector.cs.meta new file mode 100644 index 000000000..9c3fdbbaa --- /dev/null +++ b/Inspectors/Utilities/HoverLightInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8df507d10694450194945b4d2793c921 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines.meta b/Inspectors/Utilities/Lines.meta new file mode 100644 index 000000000..b11f4cdd3 --- /dev/null +++ b/Inspectors/Utilities/Lines.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 471c7f5c13c44faa9641578dcce6e97c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders.meta b/Inspectors/Utilities/Lines/DataProviders.meta new file mode 100644 index 000000000..468bfc0cd --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a51eb1cb714b485192bf9a69a9ca812f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs new file mode 100644 index 000000000..424e01e37 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs @@ -0,0 +1,368 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using XRTK.Utilities.Lines.DataProviders; +using XRTK.Utilities.Lines.Renderers; +using XRTK.Utilities.Physics.Distorters; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(BaseMixedRealityLineDataProvider))] + public class BaseMixedRealityLineDataProviderInspector : Editor + { + private const string DrawLinePointsKey = "XRTK_Line_Inspector_DrawLinePoints"; + private const string BasicSettingsFoldoutKey = "XRTK_Line_Inspector_BasicSettings"; + private const string DrawLineRotationsKey = "XRTK_Line_Inspector_DrawLineRotations"; + private const string EditorSettingsFoldoutKey = "XRTK_Line_Inspector_EditorSettings"; + private const string RotationArrowLengthKey = "XRTK_Line_Inspector_RotationArrowLength"; + private const string RotationSettingsFoldoutKey = "XRTK_Line_Inspector_RotationSettings"; + private const string ManualUpVectorLengthKey = "XRTK_Line_Inspector_ManualUpVectorLength"; + private const string LinePreviewResolutionKey = "XRTK_Line_Inspector_LinePreviewResolution"; + private const string DistortionSettingsFoldoutKey = "XRTK_Line_Inspector_DistortionSettings"; + private const string DrawLineManualUpVectorsKey = "XRTK_Line_Inspector_DrawLineManualUpVectors"; + + private const float ManualUpVectorHandleSizeModifier = 0.1f; + + private static readonly GUIContent BasicSettingsContent = new GUIContent("Basic Settings"); + private static readonly GUIContent EditorSettingsContent = new GUIContent("Editor Settings"); + private static readonly GUIContent ManualUpVectorContent = new GUIContent("Manual Up Vectors"); + private static readonly GUIContent RotationSettingsContent = new GUIContent("Rotation Settings"); + private static readonly GUIContent DistortionSettingsContent = new GUIContent("Distortion Settings"); + + private static bool basicSettingsFoldout = true; + private static bool editorSettingsFoldout = false; + private static bool rotationSettingsFoldout = true; + private static bool distortionSettingsFoldout = true; + + protected static int LinePreviewResolution = 16; + + protected static bool DrawLinePoints = false; + protected static bool DrawLineRotations = false; + protected static bool DrawLineManualUpVectors = false; + + protected static float ManualUpVectorLength = 1f; + protected static float RotationArrowLength = 0.5f; + + private SerializedProperty transformMode; + private SerializedProperty customLineTransform; + private SerializedProperty lineStartClamp; + private SerializedProperty lineEndClamp; + private SerializedProperty loops; + private SerializedProperty rotationType; + private SerializedProperty flipUpVector; + private SerializedProperty originOffset; + private SerializedProperty manualUpVectorBlend; + private SerializedProperty manualUpVectors; + private SerializedProperty velocitySearchRange; + private SerializedProperty distorters; + private SerializedProperty distortionMode; + private SerializedProperty distortionStrength; + private SerializedProperty uniformDistortionStrength; + + private ReorderableList manualUpVectorList; + + protected BaseMixedRealityLineDataProvider LineData; + protected bool RenderLinePreview = true; + + protected virtual void OnEnable() + { + basicSettingsFoldout = SessionState.GetBool(BasicSettingsFoldoutKey, basicSettingsFoldout); + editorSettingsFoldout = SessionState.GetBool(EditorSettingsFoldoutKey, editorSettingsFoldout); + rotationSettingsFoldout = SessionState.GetBool(RotationSettingsFoldoutKey, rotationSettingsFoldout); + distortionSettingsFoldout = SessionState.GetBool(DistortionSettingsFoldoutKey, distortionSettingsFoldout); + + LinePreviewResolution = SessionState.GetInt(LinePreviewResolutionKey, LinePreviewResolution); + DrawLinePoints = SessionState.GetBool(DrawLinePointsKey, DrawLinePoints); + DrawLineRotations = SessionState.GetBool(DrawLineRotationsKey, DrawLineRotations); + RotationArrowLength = SessionState.GetFloat(RotationArrowLengthKey, RotationArrowLength); + DrawLineManualUpVectors = SessionState.GetBool(DrawLineManualUpVectorsKey, DrawLineManualUpVectors); + ManualUpVectorLength = SessionState.GetFloat(ManualUpVectorLengthKey, ManualUpVectorLength); + + LineData = (BaseMixedRealityLineDataProvider)target; + transformMode = serializedObject.FindProperty("transformMode"); + customLineTransform = serializedObject.FindProperty("customLineTransform"); + lineStartClamp = serializedObject.FindProperty("lineStartClamp"); + lineEndClamp = serializedObject.FindProperty("lineEndClamp"); + loops = serializedObject.FindProperty("loops"); + rotationType = serializedObject.FindProperty("rotationMode"); + flipUpVector = serializedObject.FindProperty("flipUpVector"); + originOffset = serializedObject.FindProperty("originOffset"); + manualUpVectorBlend = serializedObject.FindProperty("manualUpVectorBlend"); + manualUpVectors = serializedObject.FindProperty("manualUpVectors"); + velocitySearchRange = serializedObject.FindProperty("velocitySearchRange"); + distorters = serializedObject.FindProperty("distorters"); + distortionMode = serializedObject.FindProperty("distortionMode"); + distortionStrength = serializedObject.FindProperty("distortionStrength"); + uniformDistortionStrength = serializedObject.FindProperty("uniformDistortionStrength"); + + manualUpVectorList = new ReorderableList(serializedObject, manualUpVectors, false, true, true, true); + manualUpVectorList.drawElementCallback += DrawManualUpVectorListElement; + manualUpVectorList.drawHeaderCallback += DrawManualUpVectorHeader; + + RenderLinePreview = LineData.gameObject.GetComponent() == null; + + var newDistorters = LineData.gameObject.GetComponents(); + distorters.arraySize = newDistorters.Length; + + for (int i = 0; i < newDistorters.Length; i++) + { + var distorterProperty = distorters.GetArrayElementAtIndex(i); + distorterProperty.objectReferenceValue = newDistorters[i]; + } + + serializedObject.ApplyModifiedProperties(); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + editorSettingsFoldout = EditorGUILayout.Foldout(editorSettingsFoldout, EditorSettingsContent, true); + SessionState.SetBool(EditorSettingsFoldoutKey, editorSettingsFoldout); + + if (editorSettingsFoldout) + { + EditorGUI.indentLevel++; + EditorGUI.BeginChangeCheck(); + + GUI.enabled = RenderLinePreview; + EditorGUI.BeginChangeCheck(); + LinePreviewResolution = EditorGUILayout.IntSlider("Preview Resolution", LinePreviewResolution, 2, 128); + + if (EditorGUI.EndChangeCheck()) + { + SessionState.SetInt(LinePreviewResolutionKey, LinePreviewResolution); + } + + EditorGUI.BeginChangeCheck(); + DrawLinePoints = EditorGUILayout.Toggle("Draw Line Points", DrawLinePoints); + + if (EditorGUI.EndChangeCheck()) + { + SessionState.SetBool(DrawLinePointsKey, DrawLinePoints); + } + + GUI.enabled = true; + EditorGUI.BeginChangeCheck(); + DrawLineRotations = EditorGUILayout.Toggle("Draw Line Rotations", DrawLineRotations); + + if (EditorGUI.EndChangeCheck()) + { + SessionState.SetBool(DrawLineRotationsKey, DrawLineRotations); + } + + if (DrawLineRotations) + { + EditorGUI.BeginChangeCheck(); + RotationArrowLength = EditorGUILayout.Slider("Rotation Arrow Length", RotationArrowLength, 0.01f, 5f); + + if (EditorGUI.EndChangeCheck()) + { + SessionState.SetFloat(RotationArrowLengthKey, RotationArrowLength); + } + } + + EditorGUI.BeginChangeCheck(); + DrawLineManualUpVectors = EditorGUILayout.Toggle("Draw Manual Up Vectors", DrawLineManualUpVectors); + + if (EditorGUI.EndChangeCheck()) + { + SessionState.SetBool(DrawLineManualUpVectorsKey, DrawLineManualUpVectors); + } + + if (DrawLineManualUpVectors) + { + EditorGUI.BeginChangeCheck(); + ManualUpVectorLength = EditorGUILayout.Slider("Manual Up Vector Length", ManualUpVectorLength, 1f, 10f); + + if (EditorGUI.EndChangeCheck()) + { + SessionState.SetFloat(ManualUpVectorLengthKey, ManualUpVectorLength); + } + } + + if (EditorGUI.EndChangeCheck()) + { + SceneView.RepaintAll(); + } + + EditorGUI.indentLevel--; + } + + basicSettingsFoldout = EditorGUILayout.Foldout(basicSettingsFoldout, BasicSettingsContent, true); + SessionState.SetBool(BasicSettingsFoldoutKey, basicSettingsFoldout); + + if (basicSettingsFoldout) + { + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(transformMode); + EditorGUILayout.PropertyField(customLineTransform); + EditorGUILayout.PropertyField(lineStartClamp); + EditorGUILayout.PropertyField(lineEndClamp); + EditorGUILayout.PropertyField(loops); + + EditorGUI.indentLevel--; + } + + rotationSettingsFoldout = EditorGUILayout.Foldout(rotationSettingsFoldout, RotationSettingsContent, true); + SessionState.SetBool(RotationSettingsFoldoutKey, rotationSettingsFoldout); + + if (rotationSettingsFoldout) + { + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(rotationType); + EditorGUILayout.PropertyField(flipUpVector); + EditorGUILayout.PropertyField(originOffset); + EditorGUILayout.PropertyField(velocitySearchRange); + + if (DrawLineManualUpVectors) + { + manualUpVectorList.DoLayoutList(); + + if (GUILayout.Button("Normalize Up Vectors")) + { + + for (int i = 0; i < manualUpVectors.arraySize; i++) + { + var manualUpVectorProperty = manualUpVectors.GetArrayElementAtIndex(i); + + Vector3 upVector = manualUpVectorProperty.vector3Value; + + if (upVector == Vector3.zero) + { + upVector = Vector3.up; + } + + manualUpVectorProperty.vector3Value = upVector.normalized; + } + } + + EditorGUILayout.PropertyField(manualUpVectorBlend); + } + + EditorGUI.indentLevel--; + } + + distortionSettingsFoldout = EditorGUILayout.Foldout(distortionSettingsFoldout, DistortionSettingsContent, true); + SessionState.SetBool(DistortionSettingsFoldoutKey, distortionSettingsFoldout); + + if (distortionSettingsFoldout) + { + if (distorters.arraySize > 0) + { + EditorGUI.indentLevel++; + + if (distorters.arraySize > 0) + { + EditorGUILayout.PropertyField(distortionMode); + EditorGUILayout.PropertyField(distortionStrength); + EditorGUILayout.PropertyField(uniformDistortionStrength); + } + + EditorGUI.indentLevel--; + } + else + { + EditorGUILayout.HelpBox("No distorters attached to this line.\nTry adding a distortion component.", MessageType.Info); + } + } + + serializedObject.ApplyModifiedProperties(); + } + + protected virtual void OnSceneGUI() + { + if (DrawLineManualUpVectors) + { + if (LineData.ManualUpVectors == null || LineData.ManualUpVectors.Length < 2) + { + LineData.ManualUpVectors = new[] { Vector3.up, Vector3.up }; + } + + for (int i = 0; i < LineData.ManualUpVectors.Length; i++) + { + float normalizedLength = (1f / (LineData.ManualUpVectors.Length - 1)) * i; + var position = LineData.GetPoint(normalizedLength); + float handleSize = HandleUtility.GetHandleSize(position); + LineData.ManualUpVectors[i] = MixedRealityInspectorUtility.VectorHandle(LineData, position, LineData.ManualUpVectors[i], false, true, ManualUpVectorLength * handleSize, handleSize * ManualUpVectorHandleSizeModifier); + } + } + + if (Application.isPlaying) + { + Handles.EndGUI(); + return; + } + + Vector3 firstPosition = LineData.FirstPoint; + Vector3 lastPosition = firstPosition; + + for (int i = 1; i < LinePreviewResolution; i++) + { + Vector3 currentPosition; + Quaternion rotation; + + if (i == LinePreviewResolution - 1) + { + currentPosition = LineData.LastPoint; + rotation = LineData.GetRotation(LineData.PointCount - 1); + } + else + { + float normalizedLength = (1f / (LinePreviewResolution - 1)) * i; + currentPosition = LineData.GetPoint(normalizedLength); + rotation = LineData.GetRotation(normalizedLength); + } + + if (RenderLinePreview) + { + Handles.color = Color.magenta; + Handles.DrawLine(lastPosition, currentPosition); + } + + if (DrawLineRotations) + { + float arrowSize = HandleUtility.GetHandleSize(currentPosition) * RotationArrowLength; + Handles.color = MixedRealityInspectorUtility.LineVelocityColor; + Handles.color = Color.Lerp(MixedRealityInspectorUtility.LineVelocityColor, Handles.zAxisColor, 0.75f); + Handles.ArrowHandleCap(0, currentPosition, Quaternion.LookRotation(rotation * Vector3.forward), arrowSize, EventType.Repaint); + Handles.color = Color.Lerp(MixedRealityInspectorUtility.LineVelocityColor, Handles.xAxisColor, 0.75f); + Handles.ArrowHandleCap(0, currentPosition, Quaternion.LookRotation(rotation * Vector3.right), arrowSize, EventType.Repaint); + Handles.color = Color.Lerp(MixedRealityInspectorUtility.LineVelocityColor, Handles.yAxisColor, 0.75f); + Handles.ArrowHandleCap(0, currentPosition, Quaternion.LookRotation(rotation * Vector3.up), arrowSize, EventType.Repaint); + } + + lastPosition = currentPosition; + } + + if (LineData.Loops && RenderLinePreview) + { + Handles.color = Color.magenta; + Handles.DrawLine(lastPosition, firstPosition); + } + } + + private static void DrawManualUpVectorHeader(Rect rect) + { + EditorGUI.LabelField(rect, ManualUpVectorContent); + } + + private void DrawManualUpVectorListElement(Rect rect, int index, bool isActive, bool isFocused) + { + EditorGUI.BeginChangeCheck(); + + var property = manualUpVectors.GetArrayElementAtIndex(index); + property.vector3Value = EditorGUI.Vector3Field(rect, GUIContent.none, property.vector3Value); + + if (EditorGUI.EndChangeCheck()) + { + EditorUtility.SetDirty(target); + } + } + } +} diff --git a/Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs.meta new file mode 100644 index 000000000..2cc18cc5f --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/BaseMixedRealityLineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c07a04e787fb43f2b37cf95cec778095 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs new file mode 100644 index 000000000..320662966 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Lines.DataProviders; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(EllipseLineDataProvider))] + public class EllipseLineDataProviderInspector : BaseMixedRealityLineDataProviderInspector + { + private SerializedProperty resolution; + private SerializedProperty radius; + private Vector2 tempRadius; + + protected override void OnEnable() + { + base.OnEnable(); + + // Bump up the resolution, in case it's too low + if (LinePreviewResolution < 32) + { + LinePreviewResolution = 32; + } + + resolution = serializedObject.FindProperty("resolution"); + radius = serializedObject.FindProperty("radius"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + serializedObject.Update(); + + EditorGUILayout.LabelField("Ellipse Settings"); + + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(resolution); + + var prevRadius = radius.vector2Value; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(radius); + + if (EditorGUI.EndChangeCheck()) + { + bool update = false; + tempRadius = radius.vector2Value; + + if (radius.vector2Value.x <= 0) + { + tempRadius.x = prevRadius.x; + update = true; + } + + if (radius.vector2Value.y <= 0) + { + tempRadius.y = prevRadius.x; + update = true; + } + + if (update) + { + radius.vector2Value = tempRadius; + } + } + + EditorGUI.indentLevel--; + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs.meta new file mode 100644 index 000000000..1260e9d5f --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/EllipseLineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 08b38eadab5f48b781ee00b91cff083d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs new file mode 100644 index 000000000..9b76860fa --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs @@ -0,0 +1,53 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using XRTK.Utilities.Lines.DataProviders; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(ParabolaPhysicalLineDataProvider))] + public class ParabolaPhysicalLineDataProviderInspector : BaseMixedRealityLineDataProviderInspector + { + private SerializedProperty gravity; + private SerializedProperty velocity; + private SerializedProperty direction; + private SerializedProperty distanceMultiplier; + private SerializedProperty useCustomGravity; + + protected override void OnEnable() + { + base.OnEnable(); + + gravity = serializedObject.FindProperty("gravity"); + velocity = serializedObject.FindProperty("velocity"); + direction = serializedObject.FindProperty("direction"); + distanceMultiplier = serializedObject.FindProperty("distanceMultiplier"); + useCustomGravity = serializedObject.FindProperty("useCustomGravity"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + serializedObject.Update(); + + EditorGUILayout.LabelField("Physical Parabola Line Settings"); + EditorGUI.indentLevel++; + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(velocity); + EditorGUILayout.PropertyField(direction); + EditorGUILayout.PropertyField(distanceMultiplier); + EditorGUILayout.PropertyField(useCustomGravity); + + if (useCustomGravity.boolValue) + { + EditorGUILayout.PropertyField(gravity); + } + + EditorGUI.indentLevel--; + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs.meta new file mode 100644 index 000000000..74bc789bc --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/ParabolaPhysicalLineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ca9fbab6df5a4c8598bdd8e84ae8ce7f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs new file mode 100644 index 000000000..233bd1bc8 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs @@ -0,0 +1,79 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Lines.DataProviders; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(ParabolaConstrainedLineDataProvider))] + public class ParabolicConstrainedLineDataProviderInspector : BaseMixedRealityLineDataProviderInspector + { + private SerializedProperty height; + private SerializedProperty endPoint; + private SerializedProperty upDirection; + private SerializedProperty endPointPosition; + + protected override void OnEnable() + { + base.OnEnable(); + + height = serializedObject.FindProperty("height"); + endPoint = serializedObject.FindProperty("endPoint"); + upDirection = serializedObject.FindProperty("upDirection"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + serializedObject.Update(); + + EditorGUILayout.LabelField("Constrained Parabola Line Settings"); + EditorGUI.indentLevel++; + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(height); + EditorGUILayout.PropertyField(upDirection); + EditorGUILayout.PropertyField(endPoint); + + EditorGUI.indentLevel--; + serializedObject.ApplyModifiedProperties(); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + serializedObject.Update(); + + var rotation = endPoint.FindPropertyRelative("rotation"); + + if (Tools.current == Tool.Move) + { + EditorGUI.BeginChangeCheck(); + Vector3 newTargetPosition = Handles.PositionHandle(LineData.GetPoint(1), Quaternion.identity); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(LineData, "Change Parabola Point Position"); + LineData.SetPoint(1, newTargetPosition); + } + } + else if (Tools.current == Tool.Rotate) + { + EditorGUI.BeginChangeCheck(); + Quaternion newTargetRotation = Handles.RotationHandle(rotation.quaternionValue, LineData.GetPoint(1)); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(LineData, "Change Parabola Point Rotation"); + rotation.quaternionValue = newTargetRotation; + } + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs.meta new file mode 100644 index 000000000..ae9a4ec4a --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/ParabolicConstrainedLineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4095e50b652f4734a32f4c8a8804c19e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs new file mode 100644 index 000000000..6848fae67 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs @@ -0,0 +1,89 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Lines.DataProviders; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(RectangleLineDataProvider))] + public class RectangleLineDataProviderInspector : BaseMixedRealityLineDataProviderInspector + { + private SerializedProperty height; + private SerializedProperty width; + private SerializedProperty zOffset; + + protected override void OnEnable() + { + base.OnEnable(); + + height = serializedObject.FindProperty("height"); + width = serializedObject.FindProperty("width"); + zOffset = serializedObject.FindProperty("zOffset"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + + // Rectangles only support 4 points, so our preview will reflect that. + LinePreviewResolution = 4; + + // Rectangle doesn't support line rotations + DrawLineRotations = false; + + serializedObject.Update(); + + EditorGUILayout.LabelField("Rectangle Settings"); + + EditorGUI.indentLevel++; + + var prevHeight = height.floatValue; + var prevWidth = width.floatValue; + + EditorGUI.BeginChangeCheck(); + EditorGUILayout.PropertyField(height); + EditorGUILayout.PropertyField(width); + EditorGUILayout.PropertyField(zOffset); + + if (EditorGUI.EndChangeCheck()) + { + if (height.floatValue <= 0) + { + height.floatValue = prevHeight; + } + + if (width.floatValue <= 0) + { + width.floatValue = prevWidth; + } + } + + EditorGUI.indentLevel--; + + serializedObject.ApplyModifiedProperties(); + } + + protected override void OnSceneGUI() + { + if (Application.isPlaying || !RenderLinePreview) + { + return; + } + + Vector3 firstPos = LineData.GetPoint(0); + Vector3 lastPos = firstPos; + Handles.color = Color.magenta; + + for (int i = 1; i < LineData.PointCount; i++) + { + Vector3 currentPos = LineData.GetPoint(i); + Handles.DrawLine(lastPos, currentPos); + lastPos = currentPos; + } + + Handles.DrawLine(lastPos, firstPos); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs.meta new file mode 100644 index 000000000..d26fef4a4 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/RectangleLineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29cff221db634a83878b9e0ad73a37ae +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs new file mode 100644 index 000000000..280bb47d3 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Lines.DataProviders; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(SimpleLineDataProvider))] + public class SimpleLineDataProviderInspector : BaseMixedRealityLineDataProviderInspector + { + private SerializedProperty endPoint; + private SerializedProperty endPointPosition; + + protected override void OnEnable() + { + base.OnEnable(); + + endPoint = serializedObject.FindProperty("endPoint"); + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + serializedObject.Update(); + + // We only have two points. + LinePreviewResolution = 2; + + EditorGUILayout.LabelField("Simple Line Settings"); + EditorGUI.indentLevel++; + + EditorGUI.BeginChangeCheck(); + + EditorGUILayout.PropertyField(endPoint); + + EditorGUI.indentLevel--; + serializedObject.ApplyModifiedProperties(); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + serializedObject.Update(); + + var rotation = endPoint.FindPropertyRelative("rotation"); + + if (Tools.current == Tool.Move) + { + EditorGUI.BeginChangeCheck(); + Vector3 newTargetPosition = Handles.PositionHandle(LineData.GetPoint(1), Quaternion.identity); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(LineData, "Change Simple Point Position"); + LineData.SetPoint(1, newTargetPosition); + } + } + else if (Tools.current == Tool.Rotate) + { + EditorGUI.BeginChangeCheck(); + Quaternion newTargetRotation = Handles.RotationHandle(rotation.quaternionValue, LineData.GetPoint(1)); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(LineData, "Change Simple Point Rotation"); + rotation.quaternionValue = newTargetRotation; + } + } + + serializedObject.ApplyModifiedProperties(); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs.meta new file mode 100644 index 000000000..46e3e6724 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/SimpleLineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ad68e32e45d5412186bc29904c2dae18 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs b/Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs new file mode 100644 index 000000000..3e3085370 --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs @@ -0,0 +1,335 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEditor; +using UnityEditorInternal; +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Utilities.Lines.DataProviders; + +namespace XRTK.Inspectors.Utilities.Lines.DataProviders +{ + [CustomEditor(typeof(SplineDataProvider))] + public class SplineDataProviderInspector : BaseMixedRealityLineDataProviderInspector + { + private const float OverlappingPointThreshold = 0.015f; + private const float HandleSizeModifier = 0.04f; + private const float PickSizeModifier = 0.06f; + + private static readonly HashSet OverlappingPointIndexes = new HashSet(); + + private static readonly Vector2 ControlPointButtonSize = new Vector2(16, 16); + private static readonly Vector2 LeftControlPointPositionOffset = Vector2.left * 12; + private static readonly Vector2 RightControlPointPositionOffset = Vector2.right * 24; + + private static readonly Vector2 ControlPointButtonHandleOffset = Vector3.up * 24; + + private static readonly GUIContent PositionContent = new GUIContent("Position"); + private static readonly GUIContent RotationContent = new GUIContent("Rotation"); + private static readonly GUIContent AddControlPointContent = new GUIContent("+", "Add a control point"); + private static readonly GUIContent RemoveControlPointContent = new GUIContent("-", "Remove a control point"); + private static readonly GUIContent ControlPointHeaderContent = new GUIContent("Spline Control Points", "The current control points for the spline."); + + private static bool controlPointFoldout = true; + + private SerializedProperty controlPoints; + private SerializedProperty alignAllControlPoints; + + private SplineDataProvider splineData; + private ReorderableList controlPointList; + + private int selectedHandleIndex = -1; + + protected override void OnEnable() + { + base.OnEnable(); + + splineData = (SplineDataProvider)target; + controlPoints = serializedObject.FindProperty("controlPoints"); + alignAllControlPoints = serializedObject.FindProperty("alignAllControlPoints"); + + controlPointList = new ReorderableList(serializedObject, controlPoints, false, false, false, false) + { + elementHeight = EditorGUIUtility.singleLineHeight * 3 + }; + + controlPointList.drawElementCallback += DrawControlPointElement; + } + + public override void OnInspectorGUI() + { + base.OnInspectorGUI(); + serializedObject.Update(); + + // We always draw line points for splines. + DrawLinePoints = true; + + EditorGUILayout.LabelField("Spline Settings"); + + EditorGUI.indentLevel++; + + EditorGUILayout.PropertyField(alignAllControlPoints); + GUILayout.BeginHorizontal(); + + if (GUILayout.Button("Add New Point", GUILayout.Width(48f), GUILayout.ExpandWidth(true))) + { + AddControlPoint(); + } + + GUI.enabled = controlPoints.arraySize > 4; + + if (GUILayout.Button("Remove Last Point", GUILayout.Width(48f), GUILayout.ExpandWidth(true))) + { + RemoveControlPoint(); + } + + GUI.enabled = true; + GUILayout.EndHorizontal(); + + controlPointFoldout = EditorGUILayout.Foldout(controlPointFoldout, ControlPointHeaderContent, true); + + if (controlPointFoldout) + { + // If we found overlapping points, provide an option to auto-separate them + if (OverlappingPointIndexes.Count > 0) + { + EditorGUILayout.HelpBox("We noticed some of your control points have the same position.", MessageType.Warning); + + if (GUILayout.Button("Fix overlapping points")) + { + // Move them slightly out of the way + foreach (int pointIndex in OverlappingPointIndexes) + { + var controlPointProperty = controlPoints.GetArrayElementAtIndex(pointIndex); + var position = controlPointProperty.FindPropertyRelative("position"); + position.vector3Value += Random.onUnitSphere * OverlappingPointThreshold * 2; + } + OverlappingPointIndexes.Clear(); + } + } + + controlPointList.DoLayoutList(); + } + + EditorGUI.indentLevel--; + + serializedObject.ApplyModifiedProperties(); + } + + protected override void OnSceneGUI() + { + base.OnSceneGUI(); + + // We skip the first point as it should always remain at the GameObject's local origin (Pose.ZeroIdentity) + for (int i = 1; i < controlPoints?.arraySize; i++) + { + bool isTangentHandle = i % 3 != 0; + + serializedObject.Update(); + + bool isLastPoint = i == controlPoints.arraySize - 1; + + var controlPointPosition = LineData.GetPoint(i); + var controlPointProperty = controlPoints.GetArrayElementAtIndex(i); + var controlPointRotation = controlPointProperty.FindPropertyRelative("rotation"); + + // Draw our tangent lines + Handles.color = Color.gray; + if (i == 1) + { + Handles.DrawLine(LineData.GetPoint(0), LineData.GetPoint(1)); + } + else if (!isTangentHandle) + { + Handles.DrawLine(LineData.GetPoint(i), LineData.GetPoint(i - 1)); + + if (!isLastPoint) + { + Handles.DrawLine(LineData.GetPoint(i), LineData.GetPoint(i + 1)); + } + } + + Handles.color = isTangentHandle ? Color.white : Color.green; + float handleSize = HandleUtility.GetHandleSize(controlPointPosition); + + if (Handles.Button(controlPointPosition, controlPointRotation.quaternionValue, handleSize * HandleSizeModifier, handleSize * PickSizeModifier, Handles.DotHandleCap)) + { + selectedHandleIndex = i; + } + + // Draw our handles + if (Tools.current == Tool.Move && selectedHandleIndex == i) + { + EditorGUI.BeginChangeCheck(); + + var newTargetPosition = Handles.PositionHandle(controlPointPosition, controlPointRotation.quaternionValue); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(LineData, "Change Spline Point Position"); + LineData.SetPoint(i, newTargetPosition); + } + + if (isLastPoint) + { + DrawSceneControlOptionButtons(controlPointPosition); + } + } + else if (Tools.current == Tool.Rotate && selectedHandleIndex == i) + { + EditorGUI.BeginChangeCheck(); + Quaternion newTargetRotation = Handles.RotationHandle(controlPointRotation.quaternionValue, controlPointPosition); + + if (EditorGUI.EndChangeCheck()) + { + Undo.RecordObject(LineData, "Change Spline Point Rotation"); + controlPointRotation.quaternionValue = newTargetRotation; + } + } + + serializedObject.ApplyModifiedProperties(); + } + + // Check for overlapping points + OverlappingPointIndexes.Clear(); + + for (int i = 0; i < splineData.ControlPoints.Length; i++) + { + for (int j = 0; j < splineData.ControlPoints.Length; j++) + { + if (i == j) + { + continue; + } + + if (Vector3.Distance(splineData.ControlPoints[i].Position, splineData.ControlPoints[j].Position) < OverlappingPointThreshold) + { + if (i != 0) + { + OverlappingPointIndexes.Add(i); + } + + if (j != 0) + { + OverlappingPointIndexes.Add(j); + } + + break; + } + } + } + } + + private void AddControlPoint() + { + serializedObject.Update(); + + Undo.RecordObject(LineData, "Add Spline Control Point"); + + var newControlPoints = new MixedRealityPose[3]; + Vector3 direction = LineData.GetVelocity(0.99f); + float distance = Mathf.Max(LineData.UnClampedWorldLength * 0.05f, OverlappingPointThreshold * 5); + newControlPoints[0].Position = LineData.LastPoint + (direction * distance); + newControlPoints[1].Position = newControlPoints[0].Position + (direction * distance); + newControlPoints[2].Position = newControlPoints[1].Position + (direction * distance); + + for (int i = 0; i < 3; i++) + { + controlPoints.arraySize = controlPoints.arraySize + 1; + var newControlPointProperty = controlPoints.GetArrayElementAtIndex(controlPoints.arraySize - 1); + newControlPointProperty.FindPropertyRelative("position").vector3Value = newControlPoints[i].Position; + newControlPointProperty.FindPropertyRelative("rotation").quaternionValue = Quaternion.identity; + } + + serializedObject.ApplyModifiedProperties(); + } + + private void RemoveControlPoint() + { + if (controlPoints.arraySize <= 4) { return; } + + serializedObject.Update(); + Undo.RecordObject(LineData, "Remove Spline Control Point"); + controlPoints.DeleteArrayElementAtIndex(controlPoints.arraySize - 1); + controlPoints.DeleteArrayElementAtIndex(controlPoints.arraySize - 1); + controlPoints.DeleteArrayElementAtIndex(controlPoints.arraySize - 1); + serializedObject.ApplyModifiedProperties(); + } + + private void DrawSceneControlOptionButtons(Vector3 position) + { + Handles.BeginGUI(); + + var buttonPosition = HandleUtility.WorldToGUIPoint(position); + var buttonRect = new Rect(buttonPosition + ControlPointButtonHandleOffset, ControlPointButtonSize); + + // Move the button slightly to the left + buttonRect.position += LeftControlPointPositionOffset; + + if (GUI.Button(buttonRect, AddControlPointContent)) + { + AddControlPoint(); + } + + if (controlPoints.arraySize > 4) + { + // Move the button slightly to the right + buttonRect.position += RightControlPointPositionOffset; + + if (GUI.Button(buttonRect, RemoveControlPointContent)) + { + RemoveControlPoint(); + } + } + + Handles.EndGUI(); + } + + private void DrawControlPointElement(Rect rect, int index, bool isActive, bool isFocused) + { + bool lastMode = EditorGUIUtility.wideMode; + EditorGUIUtility.wideMode = true; + + var lastLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 88f; + + var property = controlPoints.GetArrayElementAtIndex(index); + var fieldHeight = EditorGUIUtility.singleLineHeight * 0.5f; + var labelRect = new Rect(rect.x - 8f, rect.y + fieldHeight * 2, rect.width, EditorGUIUtility.singleLineHeight); + var positionRect = new Rect(rect.x, rect.y + fieldHeight, rect.width, EditorGUIUtility.singleLineHeight); + var rotationRect = new Rect(rect.x, rect.y + fieldHeight * 3, rect.width, EditorGUIUtility.singleLineHeight); + + EditorGUI.LabelField(labelRect, $"{index + 1}"); + + EditorGUI.indentLevel++; + + GUI.enabled = index != 0; + + EditorGUI.BeginChangeCheck(); + EditorGUI.PropertyField(positionRect, property.FindPropertyRelative("position"), PositionContent); + bool hasPositionChanged = EditorGUI.EndChangeCheck(); + + var rotationProperty = property.FindPropertyRelative("rotation"); + + EditorGUI.BeginChangeCheck(); + var newEulerRotation = EditorGUI.Vector3Field(rotationRect, RotationContent, rotationProperty.quaternionValue.eulerAngles); + bool hasRotationChanged = EditorGUI.EndChangeCheck(); + + if (hasRotationChanged) + { + rotationProperty.quaternionValue = Quaternion.Euler(newEulerRotation); + } + + if (hasPositionChanged || hasRotationChanged) + { + EditorUtility.SetDirty(target); + } + + GUI.enabled = true; + EditorGUI.indentLevel--; + EditorGUIUtility.wideMode = lastMode; + EditorGUIUtility.labelWidth = lastLabelWidth; + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs.meta b/Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs.meta new file mode 100644 index 000000000..a7f4f2f2d --- /dev/null +++ b/Inspectors/Utilities/Lines/DataProviders/SplineDataProviderInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 041fe005623c4021b7b03f8a69920893 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/MixedRealityInspectorUtility.cs b/Inspectors/Utilities/MixedRealityInspectorUtility.cs new file mode 100644 index 000000000..b524c0b6e --- /dev/null +++ b/Inspectors/Utilities/MixedRealityInspectorUtility.cs @@ -0,0 +1,480 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Reflection; +using UnityEditor; +using UnityEngine; +using XRTK.Definitions; +using XRTK.Services; +using XRTK.Utilities.Editor; +using Object = UnityEngine.Object; + +namespace XRTK.Inspectors.Utilities +{ + /// + /// This class has handy inspector utilities and functions. + /// + public static class MixedRealityInspectorUtility + { + public const float DottedLineScreenSpace = 4.65f; + + /// + /// Check and make sure we have a Mixed Reality Toolkit and an active profile. + /// + /// True if the Mixed Reality Toolkit is properly initialized. + public static bool CheckMixedRealityConfigured(bool showHelpBox = true) + { + if (!MixedRealityToolkit.IsInitialized) + { + // Search the scene for one, in case we've just hot reloaded the assembly. + var managerSearch = Object.FindObjectsOfType(); + + if (managerSearch.Length == 0) + { + if (showHelpBox) + { + EditorGUILayout.HelpBox("No Mixed Reality Toolkit found in scene.", MessageType.Error); + } + + return false; + } + + MixedRealityToolkit.ConfirmInitialized(); + } + + if (!MixedRealityToolkit.HasActiveProfile) + { + if (showHelpBox) + { + EditorGUILayout.HelpBox("No Active Profile set on the Mixed Reality Toolkit.", MessageType.Error); + } + + return false; + } + + return true; + } + + /// + /// Found at https://answers.unity.com/questions/960413/editor-window-how-to-center-a-window.html + /// + public static Rect GetEditorMainWindowPos() + { + var containerWinType = AppDomain.CurrentDomain.GetAllDerivedTypes(typeof(ScriptableObject)).FirstOrDefault(type => type.Name == "ContainerWindow"); + + if (containerWinType == null) + { + throw new MissingMemberException("Can't find internal type ContainerWindow. Maybe something has changed inside Unity"); + } + + var showModeField = containerWinType.GetField("m_ShowMode", BindingFlags.NonPublic | BindingFlags.Instance); + var positionProperty = containerWinType.GetProperty("position", BindingFlags.Public | BindingFlags.Instance); + + if (showModeField == null || positionProperty == null) + { + throw new MissingFieldException("Can't find internal fields 'm_ShowMode' or 'position'. Maybe something has changed inside Unity"); + } + + var windows = Resources.FindObjectsOfTypeAll(containerWinType); + + foreach (var win in windows) + { + var showMode = (int)showModeField.GetValue(win); + if (showMode == 4) // main window + { + var pos = (Rect)positionProperty.GetValue(win, null); + return pos; + } + } + + throw new NotSupportedException("Can't find internal main window. Maybe something has changed inside Unity"); + } + + private static IEnumerable GetAllDerivedTypes(this AppDomain appDomain, Type aType) + { + var result = new List(); + var assemblies = appDomain.GetAssemblies(); + + for (var i = 0; i < assemblies.Length; i++) + { + result.AddRange(assemblies[i].GetTypes().Where(type => type.IsSubclassOf(aType))); + } + + return result; + } + + /// + /// Centers an editor window on the main display. + /// + /// + public static void CenterOnMainWin(this EditorWindow window) + { + var main = GetEditorMainWindowPos(); + var pos = window.position; + float w = (main.width - pos.width) * 0.5f; + float h = (main.height - pos.height) * 0.5f; + pos.x = main.x + w; + pos.y = main.y + h; + window.position = pos; + } + + #region Logos + + public static Texture2D DarkThemeLogo + { + get + { + if (darkThemeLogo == null) + { + darkThemeLogo = (Texture2D)AssetDatabase.LoadAssetAtPath($"{MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}/StandardAssets/Textures/XRTK_Logo_Black.png", typeof(Texture2D)); + } + + return darkThemeLogo; + } + } + + private static Texture2D darkThemeLogo = null; + + public static Texture2D LightThemeLogo + { + get + { + if (lightThemeLogo == null) + { + lightThemeLogo = (Texture2D)AssetDatabase.LoadAssetAtPath($"{MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}/StandardAssets/Textures/XRTK_Logo_White.png", typeof(Texture2D)); + } + + return lightThemeLogo; + } + } + + private static Texture2D lightThemeLogo = null; + + + /// + /// Render the Mixed Reality Toolkit Logo. + /// + public static void RenderMixedRealityToolkitLogo() + { + GUI.enabled = true; + GUILayout.BeginHorizontal(); + GUILayout.FlexibleSpace(); + GUILayout.Label(EditorGUIUtility.isProSkin ? LightThemeLogo : DarkThemeLogo, GUILayout.MaxHeight(128f)); + GUILayout.FlexibleSpace(); + GUILayout.EndHorizontal(); + GUILayout.Space(12f); + } + + #endregion Logos + + #region Utilities + + /// + /// Checks if the profile is locked and displays a warning. + /// + /// The to check. + /// Optional value to disable the inspector if the profile is also locked. + public static void CheckProfileLock(this BaseMixedRealityProfile target, bool disableInspector = true) + { + if (MixedRealityPreferences.LockProfiles && !target.IsCustomProfile) + { + EditorGUILayout.HelpBox("This profile is part of the default set from the Mixed Reality Toolkit SDK. You can make a copy of this profile, and customize it if needed.", MessageType.Warning); + GUI.enabled = !disableInspector; + } + } + + #endregion Utilities + + #region Colors + + public static readonly Color DisabledColor = new Color(0.6f, 0.6f, 0.6f); + public static readonly Color WarningColor = new Color(1f, 0.85f, 0.6f); + public static readonly Color ErrorColor = new Color(1f, 0.55f, 0.5f); + public static readonly Color SuccessColor = new Color(0.8f, 1f, 0.75f); + public static readonly Color SectionColor = new Color(0.85f, 0.9f, 1f); + public static readonly Color DarkColor = new Color(0.1f, 0.1f, 0.1f); + public static readonly Color HandleColorSquare = new Color(0.0f, 0.9f, 1f); + public static readonly Color HandleColorCircle = new Color(1f, 0.5f, 1f); + public static readonly Color HandleColorSphere = new Color(1f, 0.5f, 1f); + public static readonly Color HandleColorAxis = new Color(0.0f, 1f, 0.2f); + public static readonly Color HandleColorRotation = new Color(0.0f, 1f, 0.2f); + public static readonly Color HandleColorTangent = new Color(0.1f, 0.8f, 0.5f, 0.7f); + public static readonly Color LineVelocityColor = new Color(0.9f, 1f, 0f, 0.8f); + + #endregion Colors + + #region Handles + + /// + /// Draw an axis move handle. + /// + /// that is undergoing the transformation. Also used for recording undo. + /// The initial position of the axis. + /// The direction the axis is facing. + /// Distance from the axis. + /// Optional handle size. + /// Optional, auto sizes the handles based on position and handle size. + /// Optional, records undo state. + /// The new value. + public static float AxisMoveHandle(Object target, Vector3 origin, Vector3 direction, float distance, float handleSize = 0.2f, bool autoSize = true, bool recordUndo = true) + { + Vector3 position = origin + (direction.normalized * distance); + + Handles.color = HandleColorAxis; + + if (autoSize) + { + handleSize = Mathf.Lerp(handleSize, HandleUtility.GetHandleSize(position) * handleSize, 0.75f); + } + + Handles.DrawDottedLine(origin, position, DottedLineScreenSpace); + Handles.ArrowHandleCap(0, position, Quaternion.LookRotation(direction), handleSize * 2, EventType.Repaint); + Vector3 newPosition = Handles.FreeMoveHandle(position, Quaternion.identity, handleSize, Vector3.zero, Handles.CircleHandleCap); + + if (recordUndo) + { + float newDistance = Vector3.Distance(origin, newPosition); + + if (!distance.Equals(newDistance)) + { + Undo.RegisterCompleteObjectUndo(target, target.name); + distance = newDistance; + } + } + + return distance; + } + + /// + /// Draw a Circle Move Handle. + /// + /// that is undergoing the transformation. Also used for recording undo. + /// The position to draw the handle. + /// Scale the new value on the x axis by this amount. + /// Scale the new value on the x axis by this amount. + /// Scale the new value on the x axis by this amount. + /// Optional handle size. + /// Optional, auto sizes the handles based on position and handle size. + /// Optional, records undo state. + /// The new value. + public static Vector3 CircleMoveHandle(Object target, Vector3 position, float xScale = 1f, float yScale = 1f, float zScale = 1f, float handleSize = 0.2f, bool autoSize = true, bool recordUndo = true) + { + Handles.color = HandleColorCircle; + + if (autoSize) + { + handleSize = Mathf.Lerp(handleSize, HandleUtility.GetHandleSize(position) * handleSize, 0.75f); + } + + Vector3 newPosition = Handles.FreeMoveHandle(position, Quaternion.identity, handleSize, Vector3.zero, Handles.CircleHandleCap); + + if (recordUndo && position != newPosition) + { + Undo.RegisterCompleteObjectUndo(target, target.name); + + position.x = Mathf.Lerp(position.x, newPosition.x, Mathf.Clamp01(xScale)); + position.y = Mathf.Lerp(position.z, newPosition.y, Mathf.Clamp01(yScale)); + position.z = Mathf.Lerp(position.y, newPosition.z, Mathf.Clamp01(zScale)); + } + + return position; + } + + /// + /// Draw a square move handle. + /// + /// that is undergoing the transformation. Also used for recording undo. + /// The position to draw the handle. + /// Scale the new value on the x axis by this amount. + /// Scale the new value on the x axis by this amount. + /// Scale the new value on the x axis by this amount. + /// Optional handle size. + /// Optional, auto sizes the handles based on position and handle size. + /// Optional, records undo state. + /// The new value. + public static Vector3 SquareMoveHandle(Object target, Vector3 position, float xScale = 1f, float yScale = 1f, float zScale = 1f, float handleSize = 0.2f, bool autoSize = true, bool recordUndo = true) + { + Handles.color = HandleColorSquare; + + if (autoSize) + { + handleSize = Mathf.Lerp(handleSize, HandleUtility.GetHandleSize(position) * handleSize, 0.75f); + } + + // Multiply square handle to match other types + Vector3 newPosition = Handles.FreeMoveHandle(position, Quaternion.identity, handleSize * 0.8f, Vector3.zero, Handles.RectangleHandleCap); + + if (recordUndo && position != newPosition) + { + Undo.RegisterCompleteObjectUndo(target, target.name); + + position.x = Mathf.Lerp(position.x, newPosition.x, Mathf.Clamp01(xScale)); + position.y = Mathf.Lerp(position.z, newPosition.y, Mathf.Clamp01(yScale)); + position.z = Mathf.Lerp(position.y, newPosition.z, Mathf.Clamp01(zScale)); + } + + return position; + } + + /// + /// Draw a sphere move handle. + /// + /// that is undergoing the transformation. Also used for recording undo. + /// The position to draw the handle. + /// Scale the new value on the x axis by this amount. + /// Scale the new value on the x axis by this amount. + /// Scale the new value on the x axis by this amount. + /// Optional handle size. + /// Optional, auto sizes the handles based on position and handle size. + /// Optional, records undo state. + /// The new value. + public static Vector3 SphereMoveHandle(Object target, Vector3 position, float xScale = 1f, float yScale = 1f, float zScale = 1f, float handleSize = 0.2f, bool autoSize = true, bool recordUndo = true) + { + Handles.color = HandleColorSphere; + + if (autoSize) + { + handleSize = Mathf.Lerp(handleSize, HandleUtility.GetHandleSize(position) * handleSize, 0.75f); + } + + // Multiply sphere handle size to match other types + Vector3 newPosition = Handles.FreeMoveHandle(position, Quaternion.identity, handleSize * 2, Vector3.zero, Handles.SphereHandleCap); + + if (recordUndo && position != newPosition) + { + Undo.RegisterCompleteObjectUndo(target, target.name); + + position.x = Mathf.Lerp(position.x, newPosition.x, Mathf.Clamp01(xScale)); + position.y = Mathf.Lerp(position.z, newPosition.y, Mathf.Clamp01(yScale)); + position.z = Mathf.Lerp(position.y, newPosition.z, Mathf.Clamp01(zScale)); + } + + return position; + } + + /// + /// Draw a vector handle. + /// + /// that is undergoing the transformation. Also used for recording undo. + /// + /// + /// Optional, Normalize the new vector value. + /// Optional, Clamp new vector's value based on the distance to the origin. + /// Optional, handle length. + /// Optional, handle size. + /// Optional, auto sizes the handles based on position and handle size. + /// Optional, records undo state. + /// The new value. + public static Vector3 VectorHandle(Object target, Vector3 origin, Vector3 vector, bool normalize = true, bool clamp = true, float handleLength = 1f, float handleSize = 0.1f, bool recordUndo = true, bool autoSize = true) + { + Handles.color = HandleColorTangent; + + if (autoSize) + { + handleSize = Mathf.Lerp(handleSize, HandleUtility.GetHandleSize(origin) * handleSize, 0.75f); + } + + Vector3 handlePosition = origin + (vector * handleLength); + float distanceToOrigin = Vector3.Distance(origin, handlePosition) / handleLength; + + if (normalize) + { + vector.Normalize(); + } + else + { + // If the handle isn't normalized, brighten based on distance to origin + Handles.color = Color.Lerp(Color.gray, HandleColorTangent, distanceToOrigin * 0.85f); + + if (clamp) + { + // To indicate that we're at the clamped limit, make the handle 'pop' slightly larger + if (distanceToOrigin >= 0.98f) + { + Handles.color = Color.Lerp(HandleColorTangent, Color.white, 0.5f); + handleSize *= 1.5f; + } + } + } + + // Draw a line from origin to origin + direction + Handles.DrawLine(origin, handlePosition); + + Quaternion rotation = Quaternion.identity; + if (vector != Vector3.zero) + { + rotation = Quaternion.LookRotation(vector); + } + + Vector3 newPosition = Handles.FreeMoveHandle(handlePosition, rotation, handleSize, Vector3.zero, Handles.DotHandleCap); + + if (recordUndo && handlePosition != newPosition) + { + Undo.RegisterCompleteObjectUndo(target, target.name); + vector = (newPosition - origin).normalized; + + // If we normalize, we're done + // Otherwise, multiply the vector by the distance between origin and target + if (!normalize) + { + distanceToOrigin = Vector3.Distance(origin, newPosition) / handleLength; + + if (clamp) + { + distanceToOrigin = Mathf.Clamp01(distanceToOrigin); + } + + vector *= distanceToOrigin; + } + } + + return vector; + } + + /// + /// Draw a rotation handle. + /// + /// that is undergoing the transformation. Also used for recording undo. + /// The position to draw the handle. + /// The rotation to draw the handle. + /// Optional, handle size. + /// Optional, auto sizes the handles based on position and handle size. + /// Optional, records undo state. + /// The new value. + public static Quaternion RotationHandle(Object target, Vector3 position, Quaternion rotation, float handleSize = 0.2f, bool autoSize = true, bool recordUndo = true) + { + Handles.color = HandleColorRotation; + + if (autoSize) + { + handleSize = Mathf.Lerp(handleSize, HandleUtility.GetHandleSize(position) * handleSize, 0.75f); + } + + // Make rotation handles larger so they can overlay movement handles + Quaternion newRotation = Handles.FreeRotateHandle(rotation, position, handleSize * 2); + + if (recordUndo) + { + Handles.color = Handles.zAxisColor; + Handles.ArrowHandleCap(0, position, Quaternion.LookRotation(newRotation * Vector3.forward), handleSize * 2, EventType.Repaint); + Handles.color = Handles.xAxisColor; + Handles.ArrowHandleCap(0, position, Quaternion.LookRotation(newRotation * Vector3.right), handleSize * 2, EventType.Repaint); + Handles.color = Handles.yAxisColor; + Handles.ArrowHandleCap(0, position, Quaternion.LookRotation(newRotation * Vector3.up), handleSize * 2, EventType.Repaint); + + if (rotation != newRotation) + { + Undo.RegisterCompleteObjectUndo(target, target.name); + rotation = newRotation; + } + } + + return rotation; + } + + #endregion Handles + } +} diff --git a/Inspectors/Utilities/MixedRealityInspectorUtility.cs.meta b/Inspectors/Utilities/MixedRealityInspectorUtility.cs.meta new file mode 100644 index 000000000..982f5c81c --- /dev/null +++ b/Inspectors/Utilities/MixedRealityInspectorUtility.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e5f2ed861ff499fad68af171ca86286 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages.meta b/Inspectors/Utilities/Packages.meta new file mode 100644 index 000000000..6ac4e8516 --- /dev/null +++ b/Inspectors/Utilities/Packages.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8b92b3aed1da0fa4db0141421f30b376 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs b/Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs new file mode 100644 index 000000000..f28a2f2ae --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs @@ -0,0 +1,105 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEditor.PackageManager; +using UnityEngine; + +namespace XRTK.Inspectors.Utilities.Packages +{ + /// + /// The container for a upm package. + /// + [Serializable] + public struct MixedRealityPackageInfo + { + /// + /// The Unity + /// + public PackageInfo PackageInfo { get; internal set; } + + [SerializeField] + [Tooltip("The package name\n\"com.company.product\"")] + private string name; + + /// + /// The package name + /// + /// + /// com.company.product + /// + public string Name + { + get => name; + internal set => name = value; + } + + [SerializeField] + [Tooltip("The package display name.")] + private string displayName; + + /// + /// "The package display name + /// + public string DisplayName + { + get => displayName; + internal set => displayName = value; + } + + [SerializeField] + [Tooltip("The package url\n\"https://githubcom/username/project.git\"")] + private string uri; + + /// + /// The package url. + /// + /// + /// https://githubcom/username/project.git + /// + public string Uri + { + get => uri; + internal set => uri = value; + } + + [SerializeField] + [Tooltip("This package is installed by the XRTK by default?")] + private bool isDefaultPackage; + + /// + /// This package is installed by the XRTK by default? + /// + public bool IsDefaultPackage + { + get => isDefaultPackage; + internal set => isDefaultPackage = value; + } + + [SerializeField] + [Tooltip("This package is required by the XRTK.")] + private bool isRequiredPackage; + + /// + /// This package is required by the xrtk. + /// + public bool IsRequiredPackage + { + get => isRequiredPackage; + internal set => isRequiredPackage = value; + } + + [SerializeField] + [Tooltip("The list of dependencies for this package.")] + private string[] dependencies; + + /// + /// The list of dependencies for this package. + /// + public string[] Dependencies + { + get => dependencies; + internal set => dependencies = value; + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs.meta b/Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs.meta new file mode 100644 index 000000000..c4bd9a7d4 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageInfo.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1a148b4bc8dd466b964eaf7fdb52f846 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset new file mode 100644 index 000000000..a7014e0ac --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset @@ -0,0 +1,39 @@ +%YAML 1.1 +%TAG !u! tag:unity3d.com,2011: +--- !u!114 &11400000 +MonoBehaviour: + m_ObjectHideFlags: 0 + m_CorrespondingSourceObject: {fileID: 0} + m_PrefabInstance: {fileID: 0} + m_PrefabAsset: {fileID: 0} + m_GameObject: {fileID: 0} + m_Enabled: 1 + m_EditorHideFlags: 0 + m_Script: {fileID: 11500000, guid: 15c83ddfe69772747b49823a06d56d32, type: 3} + m_Name: MixedRealityPackageSettings + m_EditorClassIdentifier: + mixedRealityPackages: + - name: com.xrtk.upm-git-extension + displayName: XRTK.UpmGitExtension + uri: https://github.com/XRTK/UpmGitExtension.git + isDefaultPackage: 1 + isRequiredPackage: 1 + dependencies: [] + - name: com.xrtk.wmr + displayName: XRTK.WindowsMixedReality + uri: https://github.com/XRTK/WindowsMixedReality.git + isDefaultPackage: 1 + isRequiredPackage: 0 + dependencies: [] + - name: com.xrtk.sdk + displayName: XRTK.SDK + uri: https://github.com/XRTK/SDK.git + isDefaultPackage: 1 + isRequiredPackage: 0 + dependencies: [] + - name: com.xrtk.lumin + displayName: XRTK.Lumin + uri: https://github.com/XRTK/Lumin.git + isDefaultPackage: 1 + isRequiredPackage: 0 + dependencies: [] diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset.meta b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset.meta new file mode 100644 index 000000000..5c39d7de4 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.asset.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b038179797d9a83498a64cb857bbcd84 +NativeFormatImporter: + externalObjects: {} + mainObjectFileID: 11400000 + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs new file mode 100644 index 000000000..f23f8e02a --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs @@ -0,0 +1,26 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Inspectors.Utilities.Packages +{ + /// + /// Data container for holding the settings for the upm packages associated with the XRTK. + /// + public class MixedRealityPackageSettings : ScriptableObject + { + [SerializeField] + [Tooltip("Known xrtk packages in upm.")] + private MixedRealityPackageInfo[] mixedRealityPackages = new MixedRealityPackageInfo[0]; + + /// + /// Known XRTK packages in upm. + /// + public MixedRealityPackageInfo[] MixedRealityPackages + { + get => mixedRealityPackages; + internal set => mixedRealityPackages = value; + } + } +} diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs.meta b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs.meta new file mode 100644 index 000000000..c246994fe --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 15c83ddfe69772747b49823a06d56d32 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs b/Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs new file mode 100644 index 000000000..1accf2b58 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs @@ -0,0 +1,27 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; + +namespace XRTK.Inspectors.Utilities.Packages +{ + [CustomEditor(typeof(MixedRealityPackageSettings))] + public class MixedRealityPackageSettingsInspector : Editor + { + private SerializedProperty mixedRealityPackages; + + private void OnEnable() + { + mixedRealityPackages = serializedObject.FindProperty("mixedRealityPackages"); + } + + public override void OnInspectorGUI() + { + serializedObject.Update(); + + EditorGUILayout.PropertyField(mixedRealityPackages, true); + + serializedObject.ApplyModifiedProperties(); + } + } +} diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs.meta b/Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs.meta new file mode 100644 index 000000000..afbadbbf5 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageSettingsInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 58310fd46ff58844fa2022330fd411e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs b/Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs new file mode 100644 index 000000000..40000c720 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs @@ -0,0 +1,304 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using UnityEditor; +using UnityEditor.PackageManager; +using UnityEngine; +using XRTK.Utilities.Async; +using XRTK.Utilities.Editor; +using PackageInfo = UnityEditor.PackageManager.PackageInfo; + +namespace XRTK.Inspectors.Utilities.Packages +{ + public static class MixedRealityPackageUtilities + { + /// + /// The Mixed Reality Toolkit's upm package settings. + /// + private static MixedRealityPackageSettings PackageSettings + { + get + { + if (packageSettings == null) + { + var path = $"{MixedRealityEditorSettings.MixedRealityToolkit_RelativeFolderPath}\\Inspectors\\Utilities\\Packages\\MixedRealityPackageSettings.asset"; + + packageSettings = AssetDatabase.LoadAssetAtPath(path); + + if (DebugEnabled) + { + Debug.Log($"Package Settings loaded? {packageSettings != null} | {path}"); + } + } + + return packageSettings; + } + } + + private static MixedRealityPackageSettings packageSettings; + + /// + /// Is the package utility running a check? + /// + public static bool IsRunningCheck { get; private set; } + + private static bool hasCheckedPackages = false; + + /// + /// Debug the package utility. + /// + public static bool DebugEnabled + { + get => MixedRealityPreferences.DebugPackageInfo; + set => MixedRealityPreferences.DebugPackageInfo = value; + } + + private static Tuple[] currentPackages; + + /// + /// Ensures the package manifest is up to date. + /// + public static async void CheckPackageManifest() + { + if (IsRunningCheck || + EditorApplication.isPlayingOrWillChangePlaymode || + Application.isBatchMode) + { + return; + } + + if (PackageSettings == null) + { + if (!hasCheckedPackages) + { + hasCheckedPackages = true; + EditorApplication.delayCall += CheckPackageManifest; + } + + return; + } + + IsRunningCheck = true; + + if (DebugEnabled) + { + Debug.Log("Checking packages..."); + } + + if (PackageSettings != null) + { + Tuple[] installedPackages; + + try + { + installedPackages = await GetCurrentMixedRealityPackagesAsync(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + IsRunningCheck = false; + return; + } + + foreach (var installedPackage in installedPackages) + { + CheckPackage(installedPackage); + } + } + else + { + Debug.LogWarning("Failed to find package settings."); + } + + if (DebugEnabled) + { + Debug.Log("Check complete!"); + } + + IsRunningCheck = false; + } + + private static async void CheckPackage(Tuple installedPackage) + { + (MixedRealityPackageInfo package, bool isEnabled, bool isInstalled) = installedPackage; + + if (DebugEnabled) + { + Debug.Log($"{package.Name}_enabled == {isEnabled} | Installed? {isInstalled} | Enabled? {isEnabled}"); + } + + if (package.IsRequiredPackage && !isInstalled || + (package.IsDefaultPackage && isEnabled && !isInstalled)) + { + try + { + await AddPackageAsync(package); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + else if (!isEnabled && isInstalled) + { + try + { + await RemovePackageAsync(package); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + /// + /// Validates the currently installed upm xrtk packages. + /// + internal static async void ValidatePackages() + { + try + { + await GetCurrentMixedRealityPackagesAsync(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + /// + /// Returns the currently installed upm xrtk packages. + /// + /// A can occur if the packages are not returned in 10 seconds. + internal static async Task[]> GetCurrentMixedRealityPackagesAsync() + { + var packageCount = PackageSettings.MixedRealityPackages.Length; + currentPackages = new Tuple[packageCount]; + var installedPackages = new List(); + var validationFiles = AssetDatabase.FindAssets("PackageValidation"); + var validatedPackages = new List(5); + var upmPackageListRequest = Client.List(true); + + await upmPackageListRequest.WaitUntil(request => request.IsCompleted, timeout: 30); + + foreach (var guid in validationFiles) + { + var path = AssetDatabase.GUIDToAssetPath(guid); + + if (!path.EndsWith(".asset")) { continue; } + + if (DebugEnabled) + { + Debug.Log($"Attempting to load validation at {path}"); + } + + var validation = AssetDatabase.LoadAssetAtPath(path); + + if (validation != null) + { + validatedPackages.Add(validation); + } + } + + foreach (var package in PackageSettings.MixedRealityPackages) + { + var upmPackage = upmPackageListRequest.Result?.FirstOrDefault(packageInfo => packageInfo.name.Equals(package.Name)); + var validPackages = validatedPackages.Where(validation => validation.PackageName.Equals(package.Name)).ToList(); + var validationCount = validPackages.Count; + + if (DebugEnabled) + { + Debug.Log($"{package.Name} | validation count: {validationCount} | is upm package? {upmPackage != null}"); + } + + if (validationCount > 0) + { + if (validPackages.Count == 1 && + !validPackages[0].IsMainProjectAsset) + { + continue; + } + + try + { + await RemovePackageAsync(package); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + + EditorPreferences.Set($"{package.Name}_enabled", true); + + continue; + } + + if (upmPackage != null) + { + installedPackages.Add(upmPackage); + } + } + + for (var i = 0; i < PackageSettings.MixedRealityPackages.Length; i++) + { + var package = PackageSettings.MixedRealityPackages[i]; + var isInstalled = installedPackages.Any(UpmCheck) || validatedPackages.Any(ValidationCheck); + + currentPackages[i] = new Tuple( + package, + EditorPreferences.Get($"{package.Name}_enabled", true) || package.IsRequiredPackage, + isInstalled); + + bool ValidationCheck(MixedRealityPackageValidation validation) => validation.PackageName.Equals(package.Name); + bool UpmCheck(PackageInfo packageInfo) => packageInfo != null && packageInfo.name.Equals(package.Name); + } + + return currentPackages; + } + + private static async Task AddPackageAsync(MixedRealityPackageInfo packageInfo) + { + var tag = (await GitUtilities.GetAllTagsFromRemoteAsync(packageInfo.Uri)).LastOrDefault(); + var addRequest = Client.Add($"{packageInfo.Name}@{packageInfo.Uri}#{tag}"); + + await addRequest.WaitUntil(request => request.IsCompleted, timeout: 30); + + if (addRequest.Status == StatusCode.Success) + { + if (DebugEnabled) + { + Debug.Log($"successfully added {packageInfo.Name}@{addRequest.Result.packageId}"); + } + + packageInfo.PackageInfo = addRequest.Result; + } + else + { + Debug.LogError($"Package Error({addRequest.Error?.errorCode}): {addRequest.Error?.message}"); + } + } + + private static async Task RemovePackageAsync(MixedRealityPackageInfo packageInfo) + { + var removeRequest = Client.Remove($"{packageInfo.Name}"); + await removeRequest.WaitUntil(request => request.IsCompleted, timeout: 30); + + if (removeRequest.Status == StatusCode.Success) + { + if (DebugEnabled) + { + Debug.Log($"successfully removed {packageInfo.Name}"); + } + } + else if (removeRequest.Error?.errorCode != ErrorCode.NotFound) + { + Debug.LogError($"Package Error({removeRequest.Error?.errorCode}): {removeRequest.Error?.message}"); + } + } + } +} diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs.meta b/Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs.meta new file mode 100644 index 000000000..b942b1a5d --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageUtilities.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 50b41b377b82387439b64c9a3e68ed99 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs b/Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs new file mode 100644 index 000000000..baf999577 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs @@ -0,0 +1,33 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Inspectors.Utilities.Packages +{ + /// + /// This scriptable object notifies the editor project that the package is installed and ready to use. + /// + [CreateAssetMenu(fileName = "PackageValidation", menuName = "Mixed Reality Toolkit/Settings/Package Validation", order = (int)CreateProfileMenuItemIndices.Settings)] + public class MixedRealityPackageValidation : ScriptableObject + { + [SerializeField] + private string packageName = string.Empty; + + public string PackageName => packageName; + + /// + /// Is the package located in the project's Assets folder? + /// + public bool IsMainProjectAsset + { + get + { + var localPath = AssetDatabase.GetAssetPath(this); + return localPath.StartsWith("Assets/"); + } + } + } +} diff --git a/Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs.meta b/Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs.meta new file mode 100644 index 000000000..c31b9ad24 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackageValidation.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dbe2bb3a72d815c4d9501a95c16a0e00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 6e2e9d716bbb4d8382bd53f11996b90e, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs b/Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs new file mode 100644 index 000000000..62f74d036 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs @@ -0,0 +1,137 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Linq; +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Editor; + +namespace XRTK.Inspectors.Utilities.Packages +{ + public class MixedRealityPackagesWindow : EditorWindow + { + private static MixedRealityPackagesWindow window; + private static Tuple[] packages; + private static bool[] isPackageEnabled; + private static bool[] isPackageInstalled; + private static bool isError; + + [MenuItem("Mixed Reality Toolkit/Packages...", true, 99)] + static bool OpenPackagesWindowValidation() + { + return !MixedRealityPackageUtilities.IsRunningCheck; + } + + [MenuItem("Mixed Reality Toolkit/Packages...", false, 99)] + public static async void OpenPackagesWindow() + { + if (window != null) { window.Close(); } + + window = CreateInstance(typeof(MixedRealityPackagesWindow)) as MixedRealityPackagesWindow; + Debug.Assert(window != null); + window.titleContent = new GUIContent("XRTK UPM Packages"); + window.minSize = new Vector2(288, 320); + isError = false; + window.ShowUtility(); + + try + { + packages = await MixedRealityPackageUtilities.GetCurrentMixedRealityPackagesAsync(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + isError = true; + return; + } + + isPackageEnabled = new bool[packages.Length]; + isPackageInstalled = new bool[packages.Length]; + + for (var i = 0; i < packages.Length; i++) + { + isPackageEnabled[i] = packages[i].Item2; + isPackageInstalled[i] = packages[i].Item3; + } + } + + private void OnGUI() + { + if (window == null) { Close(); } + + EditorGUILayout.BeginVertical(); + MixedRealityInspectorUtility.RenderMixedRealityToolkitLogo(); + EditorGUILayout.LabelField("Mixed Reality Toolkit Unity Package Manager"); + + if (packages == null) + { + EditorGUILayout.LabelField(isError ? "Failed to find packages!" : "Gathering Package data..."); + EditorGUILayout.EndVertical(); + return; + } + + var prevLabelWidth = EditorGUIUtility.labelWidth; + EditorGUIUtility.labelWidth = 256; + + for (var i = 0; i < packages.Length; i++) + { + (MixedRealityPackageInfo package, bool packageEnabled, bool packageInstalled) = packages[i]; + + bool CheckDependency(Tuple packageSetting) + { + (MixedRealityPackageInfo packageInfo, bool isEnabled, bool isInstalled) = packageSetting; + return packageEnabled && packageInstalled && isEnabled && isInstalled && packageInfo.Dependencies.Contains(package.Name); + } + + var hasDependency = packages.Any(CheckDependency); + GUI.enabled = !package.IsRequiredPackage && !hasDependency; + EditorGUILayout.BeginHorizontal(); + GUILayout.Space(16); + isPackageEnabled[i] = EditorGUILayout.Toggle(isPackageEnabled[i], GUILayout.Width(12)); + var packageName = package.DisplayName.Replace("XRTK.", package.IsRequiredPackage + ? " (Required) " : hasDependency + ? " (Dependency) " : ""); + EditorGUILayout.LabelField(new GUIContent(packageName)); + GUILayout.FlexibleSpace(); + EditorGUILayout.EndHorizontal(); + GUI.enabled = true; + } + + EditorGUIUtility.labelWidth = prevLabelWidth; + + if (GUILayout.Button("Apply")) + { + for (var i = 0; i < packages.Length; i++) + { + (MixedRealityPackageInfo package, bool _, bool _) = packages[i]; + + if (!isPackageEnabled[i] && isPackageInstalled[i]) + { + EditorPreferences.Set($"{package.Name}_enabled", false); + + if (MixedRealityPackageUtilities.DebugEnabled) + { + Debug.LogWarning($"{package.Name}_enabled == false"); + } + } + + if (isPackageEnabled[i] && !isPackageInstalled[i]) + { + EditorPreferences.Set($"{package.Name}_enabled", true); + + if (MixedRealityPackageUtilities.DebugEnabled) + { + Debug.LogWarning($"{package.Name}_enabled == true"); + } + } + } + + MixedRealityPackageUtilities.CheckPackageManifest(); + Close(); + } + + EditorGUILayout.EndVertical(); + } + } +} diff --git a/Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs.meta b/Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs.meta new file mode 100644 index 000000000..865da08d9 --- /dev/null +++ b/Inspectors/Utilities/Packages/MixedRealityPackagesWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 435fa24426250b5438e340644f425a00 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Rendering.meta b/Inspectors/Utilities/Rendering.meta new file mode 100644 index 000000000..aa53b5569 --- /dev/null +++ b/Inspectors/Utilities/Rendering.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7f8d3535e49742caad544c3b67ae506c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Rendering/ClippingBoxInspector.cs b/Inspectors/Utilities/Rendering/ClippingBoxInspector.cs new file mode 100644 index 000000000..b30c6bc5a --- /dev/null +++ b/Inspectors/Utilities/Rendering/ClippingBoxInspector.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Rendering; + +namespace XRTK.Inspectors +{ + [CustomEditor(typeof(ClippingBox))] + public class ClippingBoxEditor : Editor + { + private bool HasFrameBounds() { return true; } + + private Bounds OnGetFrameBounds() + { + var primitive = target as ClippingBox; + Debug.Assert(primitive != null); + return new Bounds(primitive.transform.position, primitive.transform.lossyScale * 0.5f); + } + } +} diff --git a/Inspectors/Utilities/Rendering/ClippingBoxInspector.cs.meta b/Inspectors/Utilities/Rendering/ClippingBoxInspector.cs.meta new file mode 100644 index 000000000..11fb8402f --- /dev/null +++ b/Inspectors/Utilities/Rendering/ClippingBoxInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 987771b8a4144973a30fa9721c3155db +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs b/Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs new file mode 100644 index 000000000..cb89fc450 --- /dev/null +++ b/Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Rendering; + +namespace XRTK.Inspectors +{ + [CustomEditor(typeof(ClippingPlane))] + public class ClippingPlaneEditor : Editor + { + private bool HasFrameBounds() { return true; } + + private Bounds OnGetFrameBounds() + { + var primitive = target as ClippingPlane; + Debug.Assert(primitive != null); + return new Bounds(primitive.transform.position, Vector3.one); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs.meta b/Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs.meta new file mode 100644 index 000000000..fe8e821d0 --- /dev/null +++ b/Inspectors/Utilities/Rendering/ClippingPlaneInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 68bfe0190bb64280984c30097b9fadd4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/Rendering/ClippingSphereInspector.cs b/Inspectors/Utilities/Rendering/ClippingSphereInspector.cs new file mode 100644 index 000000000..1e68a7896 --- /dev/null +++ b/Inspectors/Utilities/Rendering/ClippingSphereInspector.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using UnityEditor; +using UnityEngine; +using XRTK.Utilities.Rendering; + +namespace XRTK.Inspectors +{ + [CustomEditor(typeof(ClippingSphere))] + public class ClippingSphereEditor : Editor + { + private bool HasFrameBounds() { return true; } + + private Bounds OnGetFrameBounds() + { + var primitive = target as ClippingSphere; + Debug.Assert(primitive != null); + return new Bounds(primitive.transform.position, Vector3.one * primitive.Radius); + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/Rendering/ClippingSphereInspector.cs.meta b/Inspectors/Utilities/Rendering/ClippingSphereInspector.cs.meta new file mode 100644 index 000000000..3d4f7fa3e --- /dev/null +++ b/Inspectors/Utilities/Rendering/ClippingSphereInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b62175b408e240cbb84fe27ae67d2e48 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/SymbolicLinks.meta b/Inspectors/Utilities/SymbolicLinks.meta new file mode 100644 index 000000000..74cf60290 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: a0dabeda731a80d4b899b0d79533fa6e +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs b/Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs new file mode 100644 index 000000000..6d5087983 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs @@ -0,0 +1,39 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; + +namespace XRTK.Inspectors.Utilities.SymbolicLinks +{ + [Serializable] + public class SymbolicLink + { + [SerializeField] + private string sourceRelativePath; + + public string SourceRelativePath + { + get => sourceRelativePath; + internal set => sourceRelativePath = value; + } + + [SerializeField] + private string targetRelativePath; + + public string TargetRelativePath + { + get => targetRelativePath; + internal set => targetRelativePath = value; + } + + [SerializeField] + private bool isActive; + + public bool IsActive + { + get => isActive; + internal set => isActive = value; + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs.meta b/Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs.meta new file mode 100644 index 000000000..3698514b9 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLink.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1b73bcd320b64842ac7144f77f1f4ae8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs new file mode 100644 index 000000000..30a84ebb8 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs @@ -0,0 +1,24 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.Utilities; + +namespace XRTK.Inspectors.Utilities.SymbolicLinks +{ + /// + /// Holds the current symbolic link references in the project + /// + [CreateAssetMenu(menuName = "Mixed Reality Toolkit/Settings/Symbolic Link Settings", fileName = "SymbolicLinkSettings", order = (int)CreateProfileMenuItemIndices.Settings)] + public class SymbolicLinkSettings : ScriptableObject + { + [SerializeField] + private List symbolicLinks = new List(); + + /// + /// Returns a copy the the current symbolic links. + /// + public List SymbolicLinks => symbolicLinks; + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs.meta b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs.meta new file mode 100644 index 000000000..ed4140339 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettings.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ff8a5d57a9af497db320551240c892c2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs new file mode 100644 index 000000000..d851cf161 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs @@ -0,0 +1,19 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEditor; +using UnityEngine; + +namespace XRTK.Inspectors.Utilities.SymbolicLinks +{ + [CustomEditor(typeof(SymbolicLinkSettings))] + public class SymbolicLinkSettingsInspector : Editor + { + public override void OnInspectorGUI() + { + GUI.enabled = false; + base.OnInspectorGUI(); + GUI.enabled = true; + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs.meta b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs.meta new file mode 100644 index 000000000..cccf7e4e1 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkSettingsInspector.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 31f612492a45459bb8690552696cab55 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs b/Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs new file mode 100644 index 000000000..4cc19ef50 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs @@ -0,0 +1,461 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Diagnostics; +using System.IO; +using System.Linq; +using System.Text.RegularExpressions; +using System.Threading.Tasks; +using UnityEditor; +using UnityEditor.Callbacks; +using UnityEngine; +using XRTK.Extensions; +using XRTK.Inspectors.Utilities.Packages; +using Debug = UnityEngine.Debug; + +namespace XRTK.Inspectors.Utilities.SymbolicLinks +{ + [InitializeOnLoad] + internal static class SymbolicLinker + { + /// + /// Constructor. + /// + static SymbolicLinker() + { + RunSync(Application.isBatchMode); + EditorApplication.projectWindowItemOnGUI += OnProjectWindowItemGui; + } + + private const string LINK_ICON_TEXT = "<=link=>"; + private const string REGEX_BRACKETS = @"\{(.*?)\}"; + private const FileAttributes FOLDER_SYMLINK_ATTRIBUTES = FileAttributes.ReparsePoint; + + private static readonly Regex BracketRegex = new Regex(REGEX_BRACKETS); + + // Style used to draw the symlink indicator in the project view. + private static GUIStyle SymlinkMarkerStyle => symbolicLinkMarkerStyle ?? (symbolicLinkMarkerStyle = new GUIStyle(EditorStyles.label) + { + normal = { textColor = new Color(.2f, .8f, .2f, .8f) }, + alignment = TextAnchor.MiddleRight + }); + + private static GUIStyle symbolicLinkMarkerStyle; + + internal static string ProjectRoot => GitUtilities.RepositoryRootDir; + + private static bool isRunningSync; + + /// + /// Is the sync task running? + /// + public static bool IsSyncing => isRunningSync || MixedRealityPackageUtilities.IsRunningCheck; + + /// + /// Debug the symbolic linker utility. + /// + public static bool DebugEnabled + { + get => MixedRealityPreferences.DebugPackageInfo; + set => MixedRealityPreferences.DebugPackageInfo = value; + } + + /// + /// The current settings for the symbolic links. + /// + public static SymbolicLinkSettings Settings + { + get + { + if (settings == null && + !string.IsNullOrEmpty(MixedRealityPreferences.SymbolicLinkSettingsPath)) + { + settings = AssetDatabase.LoadAssetAtPath(MixedRealityPreferences.SymbolicLinkSettingsPath); + } + + return settings; + } + internal set => settings = value; + } + + private static SymbolicLinkSettings settings; + + [DidReloadScripts] + private static void OnScriptsReloaded() => RunSync(); + + /// + /// Synchronizes the project with any symbolic links defined in the settings. + /// + /// Bypass the auto load check and force the packages to be updated, even if they're up to date. + public static async void RunSync(bool forceUpdate = false) + { + if (IsSyncing || EditorApplication.isPlayingOrWillChangePlaymode) + { + return; + } + + if (!MixedRealityPreferences.AutoLoadSymbolicLinks && !forceUpdate) + { + MixedRealityPackageUtilities.CheckPackageManifest(); + return; + } + + if (Settings == null) + { + if (!string.IsNullOrEmpty(MixedRealityPreferences.SymbolicLinkSettingsPath)) + { + Debug.LogWarning("Symbolic link settings not found!"); + } + + MixedRealityPreferences.AutoLoadSymbolicLinks = false; + MixedRealityPackageUtilities.CheckPackageManifest(); + return; + } + + isRunningSync = true; + EditorApplication.LockReloadAssemblies(); + + if (DebugEnabled) + { + Debug.Log("Verifying project's symbolic links..."); + } + + var symbolicLinks = new List(Settings.SymbolicLinks); + + foreach (var link in symbolicLinks) + { + if (string.IsNullOrEmpty(link.SourceRelativePath)) { continue; } + + var targetAbsolutePath = $"{ProjectRoot}{link.TargetRelativePath}"; + var sourceAbsolutePath = $"{ProjectRoot}{link.SourceRelativePath}"; + + if (link.IsActive) + { + await VerifySymbolicLink(targetAbsolutePath, sourceAbsolutePath); + } + + if (Directory.Exists(targetAbsolutePath)) + { + // If we already have the directory in our project, then skip. + if (link.IsActive) { continue; } + + // Check to see if there are any directories that don't belong and remove them. + DisableLink(link.TargetRelativePath); + continue; + } + + if (!link.IsActive) { continue; } + + if (Directory.Exists(sourceAbsolutePath)) + { + if (link.IsActive) + { + AddLink(sourceAbsolutePath, targetAbsolutePath); + } + + continue; + } + + // Make sure all of our Submodules are initialized and updated. + // if they didn't get updated then we probably have some pending changes so we will skip. + if (!GitUtilities.UpdateSubmodules()) { continue; } + + if (Directory.Exists(sourceAbsolutePath)) + { + if (link.IsActive) + { + AddLink(sourceAbsolutePath, targetAbsolutePath); + } + + continue; + } + + Debug.LogError($"Unable to find symbolic link source path: {sourceAbsolutePath}"); + RemoveLink(link.SourceRelativePath, link.TargetRelativePath); + } + + if (DebugEnabled) + { + Debug.Log("Project symbolic links verified."); + } + + EditorUtility.SetDirty(Settings); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + + EditorApplication.UnlockReloadAssemblies(); + MixedRealityPackageUtilities.CheckPackageManifest(); + isRunningSync = false; + } + + /// + /// Adds or Enables a symbolic link in the settings. + /// + /// + /// + public static void AddLink(string sourceAbsolutePath, string targetAbsolutePath) + { + if (string.IsNullOrEmpty(sourceAbsolutePath) || string.IsNullOrEmpty(targetAbsolutePath)) + { + Debug.LogError("Unable to write to the symbolic link settings with null or empty parameters."); + return; + } + + targetAbsolutePath = AddSubfolderPathToTarget(sourceAbsolutePath, targetAbsolutePath); + + // Fix the directory character separator characters. + var sourceRelativePath = sourceAbsolutePath.ToBackSlashes(); + var targetRelativePath = targetAbsolutePath.ToBackSlashes(); + + // Strip URI for relative path. + sourceRelativePath = sourceRelativePath.Replace(ProjectRoot, string.Empty); + targetRelativePath = targetRelativePath.Replace(ProjectRoot, string.Empty); + + if (!CreateSymbolicLink(sourceAbsolutePath, targetAbsolutePath)) + { + return; + } + + SymbolicLink symbolicLink; + + // Check if the symbolic link is already registered. + if (!Settings.SymbolicLinks.Exists(link => link.TargetRelativePath == targetRelativePath)) + { + symbolicLink = new SymbolicLink + { + SourceRelativePath = sourceRelativePath, + TargetRelativePath = targetRelativePath, + IsActive = true + }; + + Settings.SymbolicLinks.Add(symbolicLink); + } + else // Overwrite the registered symbolic link + { + symbolicLink = Settings.SymbolicLinks.Find(link => link.TargetRelativePath == targetRelativePath); + + if (symbolicLink != null) + { + symbolicLink.IsActive = true; + } + } + } + + /// + /// Disables a symbolic link in the settings. + /// + /// + public static void DisableLink(string targetRelativePath) + { + var symbolicLink = Settings.SymbolicLinks.Find(link => link.TargetRelativePath == targetRelativePath); + + if (symbolicLink != null) + { + if (DeleteSymbolicLink($"{ProjectRoot}{targetRelativePath}")) + { + Debug.Log($"Disabled symbolic link to \"{symbolicLink.SourceRelativePath}\" in project."); + symbolicLink.IsActive = false; + } + } + else + { + Debug.LogError($"Unable to find the specified symbolic link at: {targetRelativePath}"); + } + } + + /// + /// Remove a symbolic link in the settings. + /// + /// + /// + public static void RemoveLink(string sourceRelativePath, string targetRelativePath) + { + DisableLink(targetRelativePath); + + var symbolicLink = Settings.SymbolicLinks.Find(link => link.SourceRelativePath == sourceRelativePath); + + if (symbolicLink != null) + { + Debug.Log($"Removed symbolic link to \"{symbolicLink.SourceRelativePath}\" from project."); + Settings.SymbolicLinks.Remove(symbolicLink); + } + else + { + Debug.LogError($"Unable to find the specified symbolic link source at: {sourceRelativePath}"); + } + } + + private static void OnProjectWindowItemGui(string guid, Rect rect) + { + try + { + var path = AssetDatabase.GUIDToAssetPath(guid); + + if (string.IsNullOrEmpty(path)) { return; } + + var attributes = File.GetAttributes(path); + + if ((attributes & FOLDER_SYMLINK_ATTRIBUTES) != FOLDER_SYMLINK_ATTRIBUTES) { return; } + + GUI.Label(rect, LINK_ICON_TEXT, SymlinkMarkerStyle); + + if (Settings.SymbolicLinks.Any(link => link.TargetRelativePath.Contains(path))) { return; } + + var fullPath = Path.GetFullPath(path); + + if (DeleteSymbolicLink(fullPath)) + { + Debug.Log($"Removed \"{fullPath}\" symbolic link from project."); + } + } + catch + { + // ignored + } + } + + private static bool CreateSymbolicLink(string sourceAbsolutePath, string targetAbsolutePath) + { + if (string.IsNullOrEmpty(targetAbsolutePath) || string.IsNullOrEmpty(sourceAbsolutePath)) + { + Debug.LogError("Unable to create symbolic link with null or empty args"); + return false; + } + + if (!sourceAbsolutePath.Contains(ProjectRoot)) + { + Debug.LogError($"The symbolic link you're importing needs to be in your project's git repository.\n{sourceAbsolutePath}\n{ProjectRoot}"); + return false; + } + + targetAbsolutePath = AddSubfolderPathToTarget(sourceAbsolutePath, targetAbsolutePath); + var ignorePath = targetAbsolutePath; + + if (ignorePath.Contains("Assets/ThirdParty")) + { + // Check if we need to create the ThirdParty folder. + if (!Directory.Exists($"{Application.dataPath}/ThirdParty")) + { + Directory.CreateDirectory($"{Application.dataPath}/ThirdParty"); + } + + // Initialize gitIgnore if needed. + GitUtilities.WritePathToGitIgnore("Assets/ThirdParty"); + GitUtilities.WritePathToGitIgnore("Assets/ThirdParty.meta"); + } + else // If we're not importing into the ThirdParty Directory, we should add the path to the git ignore file. + { + GitUtilities.WritePathToGitIgnore($"{ignorePath}"); + + // If the imported path target resides in the Assets folder, we should also ignore the path .meta file. + if (ignorePath.Contains("Assets")) + { + GitUtilities.WritePathToGitIgnore($"{ignorePath}.meta"); + } + } + + // Check if the directory exists to ensure the parent directory paths are also setup + // then delete the target directory as the mklink command will create it for us. + if (!Directory.Exists(targetAbsolutePath)) + { + Directory.CreateDirectory(targetAbsolutePath); + Directory.Delete(targetAbsolutePath); + } + + // --------------------> /C mklink /D "C:\Link To Folder" "C:\Users\Name\Original Folder" + if (!new Process().Run($"/C mklink /D \"{targetAbsolutePath}\" \"{sourceAbsolutePath}\"", out var error)) + { + Debug.LogError($"{error}"); + return false; + } + + Debug.Log($"Successfully created symbolic link to {sourceAbsolutePath}"); + AssetDatabase.Refresh(); + return true; + } + + private static bool DeleteSymbolicLink(string path) + { + if (!Directory.Exists(path)) + { + Debug.LogError($"Unable to find the linked folder at: {path}"); + return false; + } + + if (new Process().Run($"/C rmdir /q \"{path}\"", out var error)) + { + if (File.Exists($"{path}.meta")) + { + File.Delete($"{path}.meta"); + } + + AssetDatabase.Refresh(); + return true; + } + + Debug.LogError($"{error}\n{path}"); + return false; + } + + private static async Task VerifySymbolicLink(string targetAbsolutePath, string sourceAbsolutePath) + { + var pathToVerify = targetAbsolutePath.Substring(0, targetAbsolutePath.LastIndexOf("/", StringComparison.Ordinal)); + var args = $"/C powershell.exe \"& dir '{pathToVerify}' | select Target, LinkType | where {{ $_.LinkType -eq 'SymbolicLink' }} | Format-Table -HideTableHeaders -Wrap\""; + + bool success; + string[] processOutput; + + if (Application.isBatchMode) + { + success = new Process().Run(args, out var output); + processOutput = new[] { output }; + } + else + { + var result = await new Process().RunAsync(args); + success = result.ExitCode == 0; + processOutput = result.Output; + } + + if (!success) + { + Debug.LogError($"Failed to enumerate symbolic links associated to {pathToVerify}"); + return; + } + + var isValid = false; + var matches = BracketRegex.Matches(string.Join("\n", processOutput)); + + foreach (Match match in matches) + { + var targetPath = match.Value.Replace("{", string.Empty).Replace("}", string.Empty); + + if (!string.IsNullOrEmpty(targetPath) && sourceAbsolutePath.ToForwardSlashes().Equals(targetPath)) + { + isValid = true; + } + } + + if (!isValid && + Directory.Exists(targetAbsolutePath)) + { + DeleteSymbolicLink(targetAbsolutePath); + } + } + + private static string AddSubfolderPathToTarget(string sourcePath, string targetPath) + { + var subFolder = sourcePath.Substring(sourcePath.LastIndexOf("/", StringComparison.Ordinal) + 1); + + // Check to see if our target path already has the sub folder reference. + if (!targetPath.Substring(targetPath.LastIndexOf("/", StringComparison.Ordinal) + 1).Equals(subFolder)) + { + targetPath = $"{targetPath}/{subFolder}"; + } + + return targetPath; + } + } +} diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs.meta b/Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs.meta new file mode 100644 index 000000000..bb37cde7a --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinker.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9e5c57b3515e39849bc5ea22301e20cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs new file mode 100644 index 000000000..d786f806b --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs @@ -0,0 +1,175 @@ +// Copyright (c) XRTK. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.IO; +using UnityEditor; +using UnityEngine; +using XRTK.Extensions; +using XRTK.Inspectors.Utilities.Packages; + +namespace XRTK.Inspectors.Utilities.SymbolicLinks +{ + [InitializeOnLoad] + public class SymbolicLinkerWindow : EditorWindow + { + private static SymbolicLinkerWindow window; + private static string sourcePath = string.Empty; + private static string targetPath = string.Empty; + private static GUIStyle textFieldGUIStyle; + + static SymbolicLinkerWindow() => EditorApplication.projectWindowItemOnGUI += ProjectWindowItemOnGUI; + + private static void ProjectWindowItemOnGUI(string guid, Rect selectionRect) + { + var current = Event.current; + if (current == null) { return; } + if (current.type != EventType.KeyDown) { return; } + + switch (current.keyCode) + { + case KeyCode.Delete: + if (DisableSymbolicLinkValidation()) + { + DisableSymbolicLink(); + Event.current.Use(); + } + + break; + } + } + + [MenuItem("Assets/Symbolic Links/Create Link", false, 21)] + private static void CreateSymbolicLink() + { + var path = string.Empty; + sourcePath = string.Empty; + var guids = Selection.assetGUIDs; + window = GetWindow(); + + if (guids != null && guids.Length == 1) + { + path = AssetDatabase.GUIDToAssetPath(guids[0]); + } + + if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) + { + targetPath = $"{Application.dataPath}/ThirdParty".ToBackSlashes(); + } + else + { + targetPath = Path.GetFullPath(path).ToBackSlashes(); + } + + window.titleContent = new GUIContent("Import Module"); + window.minSize = new Vector2(256, 128); + window.maxSize = new Vector2(1024, 128); + window.Show(); + } + + [MenuItem("Assets/Symbolic Links/Disable Link", true, 22)] + private static bool DisableSymbolicLinkValidation() + { + var guids = Selection.assetGUIDs; + + if (guids == null || guids.Length != 1) { return false; } + + var path = AssetDatabase.GUIDToAssetPath(guids[0]); + + if (string.IsNullOrEmpty(path) || !Directory.Exists(path)) + { + return false; + } + + path = Path.GetFullPath(path).ToBackSlashes(); + + if (SymbolicLinker.Settings == null) { return false; } + + var symbolicLink = SymbolicLinker.Settings.SymbolicLinks.Find(link => $"{SymbolicLinker.ProjectRoot}{link.TargetRelativePath}" == path); + + return symbolicLink != null && symbolicLink.IsActive; + } + + [MenuItem("Assets/Symbolic Links/Disable Link", false, 22)] + private static void DisableSymbolicLink() + { + var guids = Selection.assetGUIDs; + + if (guids == null || guids.Length != 1) { return; } + + var path = AssetDatabase.GUIDToAssetPath(guids[0]); + + path = Path.GetFullPath(path).ToBackSlashes(); + var symbolicLink = SymbolicLinker.Settings.SymbolicLinks.Find(link => $"{SymbolicLinker.ProjectRoot}{link.TargetRelativePath}" == path); + + if (symbolicLink == null) { return; } + + switch (EditorUtility.DisplayDialogComplex("Delete this Symbolically linked path?", path, "Disable Link", "Delete Link", "Cancel")) + { + case 0: + SymbolicLinker.DisableLink(symbolicLink.TargetRelativePath); + break; + case 1: + SymbolicLinker.RemoveLink(symbolicLink.SourceRelativePath, symbolicLink.TargetRelativePath); + break; + } + + EditorUtility.SetDirty(SymbolicLinker.Settings); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + + private void OnGUI() + { + textFieldGUIStyle = new GUIStyle(GUI.skin.textField) + { + alignment = TextAnchor.MiddleRight + }; + + GUILayout.Space(8); + GUILayout.TextField(sourcePath, textFieldGUIStyle); + + if (GUILayout.Button("Choose Source Path")) + { + sourcePath = EditorUtility.OpenFolderPanel("Source Path", Application.dataPath, string.Empty).ToBackSlashes(); + } + + GUILayout.Space(10); + GUILayout.TextField(targetPath, textFieldGUIStyle); + + if (GUILayout.Button("Choose Target Path")) + { + targetPath = EditorUtility.OpenFolderPanel("Target Path", targetPath, string.Empty).ToBackSlashes(); + } + + GUILayout.Space(8); + + if (GUILayout.Button("Import Package")) + { + if (string.IsNullOrEmpty(sourcePath) || string.IsNullOrEmpty(targetPath)) + { + Debug.Log("Please specify a path"); + } + else if (targetPath.Contains(sourcePath)) + { + Debug.LogWarning("Holy Infinite Loop Batman! You should probably consider choosing a better path.\n" + + "Preferably one that doesn't create rips in the fabric of time and digital space."); + } + else + { + if (window != null) + { + window.Close(); + } + + MixedRealityPreferences.AutoLoadSymbolicLinks = true; + SymbolicLinker.AddLink(sourcePath, targetPath); + MixedRealityPackageUtilities.ValidatePackages(); + + EditorUtility.SetDirty(SymbolicLinker.Settings); + AssetDatabase.SaveAssets(); + AssetDatabase.Refresh(); + } + } + } + } +} \ No newline at end of file diff --git a/Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs.meta b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs.meta new file mode 100644 index 000000000..a99ef3fc9 --- /dev/null +++ b/Inspectors/Utilities/SymbolicLinks/SymbolicLinkerWindow.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e4d55df7d0204fa5b7da3ba6e7193468 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Inspectors/XRTK.Inspectors.asmdef b/Inspectors/XRTK.Inspectors.asmdef new file mode 100644 index 000000000..3259a4c78 --- /dev/null +++ b/Inspectors/XRTK.Inspectors.asmdef @@ -0,0 +1,19 @@ +{ + "name": "XRTK.Inspectors", + "references": [ + "XRTK", + "XRTK.Extensions.EditorClassExtensions", + "XRTK.Utilities.Build", + "XRTK.Utilities.Editor" + ], + "optionalUnityReferences": [], + "includePlatforms": [ + "Editor" + ], + "excludePlatforms": [], + "allowUnsafeCode": false, + "overrideReferences": false, + "precompiledReferences": [], + "autoReferenced": true, + "defineConstraints": [] +} \ No newline at end of file diff --git a/Inspectors/XRTK.Inspectors.asmdef.meta b/Inspectors/XRTK.Inspectors.asmdef.meta new file mode 100644 index 000000000..3c4bb9544 --- /dev/null +++ b/Inspectors/XRTK.Inspectors.asmdef.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: e67d30660ec243e4836aac191d3f36fb +AssemblyDefinitionImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces.meta b/Interfaces.meta new file mode 100644 index 000000000..70b67e508 --- /dev/null +++ b/Interfaces.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 545aeba635544ad0bb2c23bdf1165ab4 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Audio.meta b/Interfaces/Audio.meta new file mode 100644 index 000000000..6f3e610b4 --- /dev/null +++ b/Interfaces/Audio.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 30f3c1b164f04d2696af827a090b6e21 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Audio/IAudioInfluencer.cs b/Interfaces/Audio/IAudioInfluencer.cs new file mode 100644 index 000000000..833963346 --- /dev/null +++ b/Interfaces/Audio/IAudioInfluencer.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Interfaces.Audio +{ + /// + /// Interface that should be implemented by any class that wishes to influence how an audio source sounds. + /// + public interface IAudioInfluencer + { + /// + /// Applies an audio effect. + /// + /// The GameObject on which the effect is to be applied. + void ApplyEffect(GameObject soundEmittingObject); + + /// + /// Removes a previously applied audio effect. + /// + /// The GameObject from which the effect is to be removed. + void RemoveEffect(GameObject soundEmittingObject); + } +} \ No newline at end of file diff --git a/Interfaces/Audio/IAudioInfluencer.cs.meta b/Interfaces/Audio/IAudioInfluencer.cs.meta new file mode 100644 index 000000000..4d9588248 --- /dev/null +++ b/Interfaces/Audio/IAudioInfluencer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5612e35bf7ab48788dc34cb5ccf11d2f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/BoundarySystem.meta b/Interfaces/BoundarySystem.meta new file mode 100644 index 000000000..62fa134f1 --- /dev/null +++ b/Interfaces/BoundarySystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8857323d947c41908b6fba3889956e8f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs b/Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs new file mode 100644 index 000000000..16973b57a --- /dev/null +++ b/Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Boundary; + +namespace XRTK.Interfaces.BoundarySystem +{ + public interface IMixedRealityBoundaryHandler : IEventSystemHandler + { + /// + /// Raised when the boundary visualization has changed. + /// + /// + void OnBoundaryVisualizationChanged(BoundaryEventData eventData); + } +} diff --git a/Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs.meta b/Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs.meta new file mode 100644 index 000000000..7202ebdb1 --- /dev/null +++ b/Interfaces/BoundarySystem/IMixedRealityBoundaryHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 09b8ecda83744cb4bbde06155ec420fb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs b/Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs new file mode 100644 index 000000000..76e2687be --- /dev/null +++ b/Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs @@ -0,0 +1,179 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.Experimental.XR; +using XRTK.Definitions.BoundarySystem; +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.BoundarySystem +{ + /// + /// Manager interface for a Boundary system in the Mixed Reality Toolkit + /// All replacement systems for providing Boundary functionality should derive from this interface + /// + public interface IMixedRealityBoundarySystem : IMixedRealityEventSystem, IMixedRealityEventSource + { + /// + /// The height of the play space, in meters. + /// + /// + /// This is used to create a three dimensional boundary volume. + /// + float BoundaryHeight { get; set; } + + /// + /// Enable / disable floor rendering. + /// + bool ShowFloor { get; set; } + + /// + /// The size at which to display the rectangular floor plane . + /// + Vector2 FloorScale { get; } + + /// + /// The material to use for the floor when created by the boundary system. + /// + Material FloorMaterial { get; } + + /// + /// The physics layer that the generated floor is assigned to. + /// + int FloorPhysicsLayer { get; set; } + + /// + /// Enable / disable play area rendering. + /// + bool ShowPlayArea { get; set; } + + /// + /// The material to use for the rectangular play area . + /// + Material PlayAreaMaterial { get; } + + /// + /// The physics layer that the generated play area is assigned to. + /// + int PlayAreaPhysicsLayer { get; set; } + + /// + /// Enable / disable tracked area rendering. + /// + bool ShowTrackedArea { get; set; } + + /// + /// The material to use for the boundary geometry . + /// + Material TrackedAreaMaterial { get; } + + /// + /// The physics layer that the generated tracked area is assigned to. + /// + int TrackedAreaPhysicsLayer { get; set; } + + /// + /// Enable / disable boundary wall rendering. + /// + bool ShowBoundaryWalls { get; set; } + + /// + /// The material to use for displaying the boundary geometry walls. + /// + Material BoundaryWallMaterial { get; } + + /// + /// The physics layer that the generated boundary walls are assigned to. + /// + int BoundaryWallsPhysicsLayer { get; set; } + + /// + /// Enable / disable ceiling rendering. + /// + /// + /// The ceiling is defined as a positioned above the floor. + /// + bool ShowBoundaryCeiling { get; set; } + + /// + /// The material to use for displaying the boundary ceiling. + /// + Material BoundaryCeilingMaterial { get; } + + /// + /// The physics layer that the generated boundary ceiling is assigned to. + /// + int CeilingPhysicsLayer { get; set; } + + /// + /// Two dimensional representation of the geometry of the boundary, as provided + /// by the platform. + /// + /// + /// BoundaryGeometry should be treated as the outline of the player's space, placed + /// on the floor. + /// + Edge[] Bounds { get; } + + /// + /// Indicates the height of the floor, in relation to the coordinate system origin. + /// + /// + /// If a floor has been located, FloorHeight.HasValue will be true, otherwise it will be false. + /// + float? FloorHeight { get; } + + /// + /// Determines if a location is within the specified area of the boundary space. + /// + /// The location to be checked. + /// The type of boundary space being checked. + /// True if the location is within the specified area of the boundary space. + /// + /// Use: + /// Boundary.Type.PlayArea for the inscribed volume + /// Boundary.Type.TrackedArea for the area defined by the boundary edges. + /// + bool Contains(Vector3 location, Boundary.Type boundaryType = Boundary.Type.TrackedArea); + + /// + /// Returns the description of the inscribed rectangular bounds. + /// + /// The center of the rectangle. + /// The orientation of the rectangle. + /// The width of the rectangle. + /// The height of the rectangle. + /// True if an inscribed rectangle was found in the boundary geometry, false otherwise. + bool TryGetRectangularBoundsParams(out Vector2 center, out float angle, out float width, out float height); + + /// + /// Gets the that represents the user's floor. + /// + /// The floor visualization object or null if one does not exist. + GameObject GetFloorVisualization(); + + /// + /// Gets the that represents the user's play area. + /// + /// The play area visualization object or null if one does not exist. + GameObject GetPlayAreaVisualization(); + + /// + /// Gets the that represents the user's tracked area. + /// + /// The tracked area visualization object or null if one does not exist. + GameObject GetTrackedAreaVisualization(); + + /// + /// Gets the that represents the user's boundary walls. + /// + /// The boundary wall visualization object or null if one does not exist. + GameObject GetBoundaryWallVisualization(); + + /// + /// Gets the that represents the upper surface of the user's boundary. + /// + /// The boundary ceiling visualization object or null if one does not exist. + GameObject GetBoundaryCeilingVisualization(); + } +} \ No newline at end of file diff --git a/Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs.meta b/Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs.meta new file mode 100644 index 000000000..13a034829 --- /dev/null +++ b/Interfaces/BoundarySystem/IMixedRealityBoundarySystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d4b7e27841e475fa15c92e944655adb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/CameraSystem.meta b/Interfaces/CameraSystem.meta new file mode 100644 index 000000000..8209978a6 --- /dev/null +++ b/Interfaces/CameraSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 206ecf810c2a91b4c8b2a78a0cbecfb8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs b/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs new file mode 100644 index 000000000..470b4d13d --- /dev/null +++ b/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs @@ -0,0 +1,14 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + + +namespace XRTK.Interfaces.CameraSystem +{ + public interface IMixedRealityCameraSystem : IMixedRealityService + { + /// + /// Is the current camera displaying on an Opaque (AR) device or a VR / immersive device + /// + bool IsOpaque { get; } + } +} \ No newline at end of file diff --git a/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs.meta b/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs.meta new file mode 100644 index 000000000..6ac837ceb --- /dev/null +++ b/Interfaces/CameraSystem/IMixedRealityCameraSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d443d19c94b145569d163106836ba2b1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Diagnostics.meta b/Interfaces/Diagnostics.meta new file mode 100644 index 000000000..be0710f9e --- /dev/null +++ b/Interfaces/Diagnostics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1326bf79bcd64f979f143571e96fdcc1 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs b/Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs new file mode 100644 index 000000000..46d7d1473 --- /dev/null +++ b/Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Diagnostics; + +namespace XRTK.Interfaces.Diagnostics +{ + /// + /// Interface to implement to receive data from the . + /// + public interface IMixedRealityDiagnosticsHandler : IEventSystemHandler + { + /// + /// Raised when the diagnostics system sends an update to the diagnostic data. + /// + /// + void OnDiagnosticSettingsChanged(DiagnosticsEventData eventData); + } +} diff --git a/Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs.meta b/Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs.meta new file mode 100644 index 000000000..3213b291a --- /dev/null +++ b/Interfaces/Diagnostics/IMixedRealityDiagnosticsHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16a63804450349fea177aa06cb648989 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs b/Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs new file mode 100644 index 000000000..b7c23b7af --- /dev/null +++ b/Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs @@ -0,0 +1,55 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Diagnostics; +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.Diagnostics +{ + /// + /// The interface contract that defines the Diagnostics system in the Mixed Reality Toolkit + /// + public interface IMixedRealityDiagnosticsSystem : IMixedRealityEventSystem, IMixedRealityEventSource + { + /// + /// Enable / disable the diagnostic display + /// + bool Visible { get; set; } + + /// + /// Enable / disable cpu profiling when the diagnostic panel is visible. + /// + bool ShowCpu { get; set; } + + /// + /// The cpu use tracker. + /// + CpuUseTracker CpuUseTracker { get; } + + /// + /// Enable / disable fps profiling when the diagnostic panel is visible. + /// + bool ShowFps { get; set; } + + /// + /// The fps use tracker. + /// + FpsUseTracker FpsUseTracker { get; } + + /// + /// Enable / disable memory profiling when the diagnostic panel is visible. + /// + bool ShowMemory { get; set; } + + /// + /// The memory use tracker. + /// + MemoryUseTracker MemoryUseTracker { get; } + + /// + /// Gets the that represents the diagnostic visualization + /// + GameObject DiagnosticVisualization { get; } + } +} \ No newline at end of file diff --git a/Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs.meta b/Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs.meta new file mode 100644 index 000000000..9ee4413e9 --- /dev/null +++ b/Interfaces/Diagnostics/IMixedRealityDiagnosticsSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4e26fecfbbed483b91b4a3145337a516 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/EventSystem.meta b/Interfaces/EventSystem.meta new file mode 100644 index 000000000..52dec4e1f --- /dev/null +++ b/Interfaces/EventSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 86335428e7a94f8db33c1ace17bcf75d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/EventSystem/Handlers.meta b/Interfaces/EventSystem/Handlers.meta new file mode 100644 index 000000000..886d0d26e --- /dev/null +++ b/Interfaces/EventSystem/Handlers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 526c91bf7a9d4f1aae6ef741a47c7a70 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs b/Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs new file mode 100644 index 000000000..90e97e885 --- /dev/null +++ b/Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum; + +namespace XRTK.Interfaces.Events.Handlers +{ + /// + /// Interface to implement generic events. + /// + public interface IMixedRealityEventHandler : IEventSystemHandler + { + void OnEventRaised(GenericBaseEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs.meta b/Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs.meta new file mode 100644 index 000000000..1e6cd386b --- /dev/null +++ b/Interfaces/EventSystem/Handlers/IMixedRealityEventHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d3df4289500843fbbed98abee742efd0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs b/Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs new file mode 100644 index 000000000..a814ef326 --- /dev/null +++ b/Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.EventDatum; + +namespace XRTK.Interfaces.Events.Handlers +{ + /// + /// Interface to implement reacting to placement of objects. + /// + public interface IMixedRealityPlacementHandler : IMixedRealityEventHandler + { + void OnPlacingStarted(PlacementEventData eventData); + + void OnPlacingCompleted(PlacementEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs.meta b/Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs.meta new file mode 100644 index 000000000..2feda88ce --- /dev/null +++ b/Interfaces/EventSystem/Handlers/IMixedRealityPlacementHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6355bcd6c4c74165ab86fa5da10b4ba1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/EventSystem/IMixedRealityEventSource.cs b/Interfaces/EventSystem/IMixedRealityEventSource.cs new file mode 100644 index 000000000..0ba769c59 --- /dev/null +++ b/Interfaces/EventSystem/IMixedRealityEventSource.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections; + +namespace XRTK.Interfaces.Events +{ + /// + /// Interface to implement an event source. + /// + public interface IMixedRealityEventSource : IEqualityComparer + { + /// + /// The Unique Source Id of this Event Source. + /// + uint SourceId { get; } + + /// + /// The Name of this Event Source. + /// + string SourceName { get; } + } +} \ No newline at end of file diff --git a/Interfaces/EventSystem/IMixedRealityEventSource.cs.meta b/Interfaces/EventSystem/IMixedRealityEventSource.cs.meta new file mode 100644 index 000000000..78db112dc --- /dev/null +++ b/Interfaces/EventSystem/IMixedRealityEventSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d964bb2991354cd98b43c39922e543d3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/EventSystem/IMixedRealityEventSystem.cs b/Interfaces/EventSystem/IMixedRealityEventSystem.cs new file mode 100644 index 000000000..95b2dfd2a --- /dev/null +++ b/Interfaces/EventSystem/IMixedRealityEventSystem.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; + +namespace XRTK.Interfaces.Events +{ + /// + /// Interface used to implement an Event System that is compatible with the Mixed Reality Toolkit. + /// + public interface IMixedRealityEventSystem : IMixedRealityService + { + /// + /// List of event listeners that are registered to this Event System. + /// + List EventListeners { get; } + + /// + /// The main function for handling and forwarding all events to their intended recipients. + /// + /// See: https://docs.unity3d.com/Manual/MessagingSystem.html for more information. + /// Event Handler Interface Type + /// Event Data + /// Event Handler delegate + void HandleEvent(BaseEventData eventData, ExecuteEvents.EventFunction eventHandler) where T : IEventSystemHandler; + + /// + /// Registers a to listen for events from this Event System. + /// + /// to add to . + void Register(GameObject listener); + + /// + /// Unregisters a from listening for events from this Event System. + /// + /// to remove from . + void Unregister(GameObject listener); + } +} \ No newline at end of file diff --git a/Interfaces/EventSystem/IMixedRealityEventSystem.cs.meta b/Interfaces/EventSystem/IMixedRealityEventSystem.cs.meta new file mode 100644 index 000000000..901c3f5b7 --- /dev/null +++ b/Interfaces/EventSystem/IMixedRealityEventSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 887edbea62c3452d8f078ff303aef64e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/IMixedRealityDataProvider.cs b/Interfaces/IMixedRealityDataProvider.cs new file mode 100644 index 000000000..3e85695de --- /dev/null +++ b/Interfaces/IMixedRealityDataProvider.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Interfaces +{ + /// + /// Generic interface for all Mixed Reality Data providers + /// + public interface IMixedRealityDataProvider : IMixedRealityService + { + // Reserved for future use. + } +} \ No newline at end of file diff --git a/Interfaces/IMixedRealityDataProvider.cs.meta b/Interfaces/IMixedRealityDataProvider.cs.meta new file mode 100644 index 000000000..88b6c51c1 --- /dev/null +++ b/Interfaces/IMixedRealityDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f90ee8122c234c6ebb6edc4a00fec0ce +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/IMixedRealityExtensionService.cs b/Interfaces/IMixedRealityExtensionService.cs new file mode 100644 index 000000000..9811edd5c --- /dev/null +++ b/Interfaces/IMixedRealityExtensionService.cs @@ -0,0 +1,13 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Interfaces +{ + /// + /// Generic interface for all optional Mixed Reality systems, components, or features that can be added to the + /// + public interface IMixedRealityExtensionService : IMixedRealityService + { + // Empty for now, but it is used to filter out the valid class types in the inspector dropdown. + } +} \ No newline at end of file diff --git a/Interfaces/IMixedRealityExtensionService.cs.meta b/Interfaces/IMixedRealityExtensionService.cs.meta new file mode 100644 index 000000000..f9959ffb1 --- /dev/null +++ b/Interfaces/IMixedRealityExtensionService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: acdd7c5a039f4b1987b36e1bb061461f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/IMixedRealityService.cs b/Interfaces/IMixedRealityService.cs new file mode 100644 index 000000000..ad62e7a61 --- /dev/null +++ b/Interfaces/IMixedRealityService.cs @@ -0,0 +1,66 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Interfaces +{ + /// + /// Generic interface for all Mixed Reality Services + /// + public interface IMixedRealityService : IDisposable + { + /// + /// Optional Priority attribute if multiple services of the same type are required, enables targeting a service for action. + /// + string Name { get; } + + /// + /// Optional Priority to reorder registered managers based on their respective priority, reduces the risk of race conditions by prioritizing the order in which managers are evaluated. + /// + uint Priority { get; } + + /// + /// The initialize function is used to setup the service once created. + /// This method is called once all services have been registered in the Mixed Reality Toolkit. + /// + void Initialize(); + + /// + /// Optional Reset function to perform that will Reset the service, for example, whenever there is a profile change. + /// + void Reset(); + + /// + /// Optional Enable function to enable / re-enable the service. + /// + void Enable(); + + /// + /// Optional Update function to perform per-frame updates of the service. + /// + void Update(); + + /// + /// Optional Disable function to pause the service. + /// + void Disable(); + + /// + /// Optional Destroy function to perform cleanup of the service before the Mixed Reality Toolkit is destroyed. + /// + void Destroy(); + + /// + /// Optional function that is called when the application gains or looses focus. + /// + /// + void OnApplicationFocus(bool isFocused); + + /// + /// Optional function that is called when the application is paused or un-paused. + /// + /// + void OnApplicationPause(bool isPaused); + } +} diff --git a/Interfaces/IMixedRealityService.cs.meta b/Interfaces/IMixedRealityService.cs.meta new file mode 100644 index 000000000..344f781a7 --- /dev/null +++ b/Interfaces/IMixedRealityService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2f5be536954d4b74a5a92dbf1b1ce6a2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem.meta b/Interfaces/InputSystem.meta new file mode 100644 index 000000000..23a292281 --- /dev/null +++ b/Interfaces/InputSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: e2590fa760d748a9ad867a907c200185 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers.meta b/Interfaces/InputSystem/Handlers.meta new file mode 100644 index 000000000..af1604930 --- /dev/null +++ b/Interfaces/InputSystem/Handlers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: addcf49567bc4f2c8612f46ca296390f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs new file mode 100644 index 000000000..ca2dc6d11 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs @@ -0,0 +1,22 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement dictation events. + /// + public interface IMixedRealityDictationHandler : IEventSystemHandler + { + void OnDictationHypothesis(DictationEventData eventData); + + void OnDictationResult(DictationEventData eventData); + + void OnDictationComplete(DictationEventData eventData); + + void OnDictationError(DictationEventData eventData); + } +} diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs.meta new file mode 100644 index 000000000..050715ed0 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityDictationHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b9fb06d68cca421599931a433b50869c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs new file mode 100644 index 000000000..603bc86cf --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs @@ -0,0 +1,27 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement to react to focus changed events. + /// + public interface IMixedRealityFocusChangedHandler : IEventSystemHandler + { + /// + /// Focus event that is raised before the focus is actually changed. + /// + /// Useful for logic that needs to take place before focus changes. + /// + void OnBeforeFocusChange(FocusEventData eventData); + + /// + /// Focus event that is raised when the focused object is changed. + /// + /// + void OnFocusChanged(FocusEventData eventData); + } +} diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs.meta new file mode 100644 index 000000000..cb55ba914 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityFocusChangedHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 89734879c8a14c6e849d79055b788344 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs new file mode 100644 index 000000000..5f9de7b90 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement to react to focus enter/exit. + /// + public interface IMixedRealityFocusHandler : IEventSystemHandler + { + /// + /// The Focus Enter event is raised on this whenever a 's focus enters this 's . + /// + /// + void OnFocusEnter(FocusEventData eventData); + + /// + /// The Focus Exit event is raised on this whenever a 's focus leaves this 's . + /// + /// + void OnFocusExit(FocusEventData eventData); + } +} diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs.meta new file mode 100644 index 000000000..de9040df4 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityFocusHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: edc1270ab26f480389c71a200a519ad9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs new file mode 100644 index 000000000..fc9225038 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement for generic gesture input. + /// + public interface IMixedRealityGestureHandler : IEventSystemHandler + { + /// + /// Gesture Started Event. + /// + /// + void OnGestureStarted(InputEventData eventData); + + /// + /// Gesture Updated Event. + /// + /// + void OnGestureUpdated(InputEventData eventData); + + /// + /// Gesture Completed Event. + /// + /// + void OnGestureCompleted(InputEventData eventData); + + /// + /// Gesture Canceled Event. + /// + /// + void OnGestureCanceled(InputEventData eventData); + } + + /// + /// Interface to implement for generic gesture input. + /// + /// The type of data you want to listen for. + public interface IMixedRealityGestureHandler : IMixedRealityGestureHandler + { + /// + /// Gesture Updated Event. + /// + /// + /// The for the associated gesture data. + /// + /// + void OnGestureUpdated(InputEventData eventData); + + /// + /// Gesture Completed Event. + /// + /// + /// The for the associated gesture data. + /// + /// + void OnGestureCompleted(InputEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs.meta new file mode 100644 index 000000000..a7531037e --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityGestureHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9dba478b5e144280adc4c3e5fc6c42f4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs new file mode 100644 index 000000000..dd34c32be --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement for simple generic input. + /// + public interface IMixedRealityInputHandler : IEventSystemHandler + { + /// + /// Input Up updates from Interactions, Keys, or any other simple input. + /// + /// + void OnInputUp(InputEventData eventData); + + /// + /// Input Down updates from Interactions, Keys, or any other simple input. + /// + /// + void OnInputDown(InputEventData eventData); + } + + /// + /// Interface to implement for more complex generic input. + /// + /// The type of input to listen for. + public interface IMixedRealityInputHandler : IEventSystemHandler + { + /// + /// Raised input event updates from the type of input specified in the interface handler implementation. + /// + /// + /// The is the current input data. + /// + void OnInputChanged(InputEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs.meta new file mode 100644 index 000000000..f566b4fc4 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityInputHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 3a97721c8d4343fc9d3b89b7e5de795e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs new file mode 100644 index 000000000..cc68cc9fd --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement to react to simple pointer input. + /// + public interface IMixedRealityPointerHandler : IEventSystemHandler + { + /// + /// When a pointer up event is raised, this method is used to pass along the event data to the input handler. + /// + /// + void OnPointerUp(MixedRealityPointerEventData eventData); + + /// + /// When a pointer down event is raised, this method is used to pass along the event data to the input handler. + /// + /// + void OnPointerDown(MixedRealityPointerEventData eventData); + + /// + /// When a pointer clicked event is raised, this method is used to pass along the event data to the input handler. + /// + /// + void OnPointerClicked(MixedRealityPointerEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs.meta new file mode 100644 index 000000000..c1b415249 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealityPointerHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 93c5c8b13a584952bb86a0e5e42ac165 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs new file mode 100644 index 000000000..70a1d92c7 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs @@ -0,0 +1,42 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement to react to source + /// + public interface IMixedRealitySourcePoseHandler : IMixedRealitySourceStateHandler + { + /// + /// Raised when the source pose tracking state is changed. + /// + /// + void OnSourcePoseChanged(SourcePoseEventData eventData); + + /// + /// Raised when the source position is changed. + /// + void OnSourcePoseChanged(SourcePoseEventData eventData); + + /// + /// Raised when the source position is changed. + /// + void OnSourcePoseChanged(SourcePoseEventData eventData); + + /// + /// Raised when the source rotation is changed. + /// + void OnSourcePoseChanged(SourcePoseEventData eventData); + + /// + /// Raised when the source pose is changed. + /// + void OnSourcePoseChanged(SourcePoseEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs.meta new file mode 100644 index 000000000..ee0b633f9 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealitySourcePoseHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9f390a869e3f4a3988d44f77f94d9fa0 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs new file mode 100644 index 000000000..677838546 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement to react to source state changes, such as when an input source is detected or lost. + /// + public interface IMixedRealitySourceStateHandler : IEventSystemHandler + { + /// + /// Raised when a source is detected. + /// + /// + void OnSourceDetected(SourceStateEventData eventData); + + /// + /// Raised when a source is lost. + /// + /// + void OnSourceLost(SourceStateEventData eventData); + } +} diff --git a/Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs.meta new file mode 100644 index 000000000..c0e6b81ec --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealitySourceStateHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 54d7b27ea8c24fe790c7ac2bb48356d1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs b/Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs new file mode 100644 index 000000000..f53eec407 --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Input; + +namespace XRTK.Interfaces.InputSystem.Handlers +{ + /// + /// Interface to implement to react to speech recognition. + /// + public interface IMixedRealitySpeechHandler : IEventSystemHandler + { + void OnSpeechKeywordRecognized(SpeechEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs.meta b/Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs.meta new file mode 100644 index 000000000..64f4e0cde --- /dev/null +++ b/Interfaces/InputSystem/Handlers/IMixedRealitySpeechHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 48f317bd4a6e49cabe26683ab938ed43 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/ICursorModifier.cs b/Interfaces/InputSystem/ICursorModifier.cs new file mode 100644 index 000000000..1476bd227 --- /dev/null +++ b/Interfaces/InputSystem/ICursorModifier.cs @@ -0,0 +1,91 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem.Handlers; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface for cursor modifiers that can modify a 's properties. + /// + public interface ICursorModifier : IMixedRealityFocusChangedHandler + { + /// + /// Transform for which this modifies applies its various properties. + /// + Transform HostTransform { get; set; } + + /// + /// How much a 's position should be offset from the surface of the when overlapping. + /// + Vector3 CursorPositionOffset { get; set; } + + /// + /// Should the snap to the 's position? + /// + bool SnapCursorPosition { get; set; } + + /// + /// Scale of the when looking at this . + /// + Vector3 CursorScaleOffset { get; set; } + + /// + /// Direction of the offset. + /// + Vector3 CursorNormalOffset { get; set; } + + /// + /// If true, the normal from the pointing vector will be used to orient the instead of the targeted 's normal at point of contact. + /// + bool UseGazeBasedNormal { get; set; } + + /// + /// Should the be hidden when this is focused? + /// + bool HideCursorOnFocus { get; set; } + + /// + /// animation parameters to set when this is focused. Leave empty for none. + /// + AnimatorParameter[] CursorParameters { get; } + + /// + /// Indicates whether the should be visible or not. + /// + /// True if should be visible, false if not. + bool GetCursorVisibility(); + + /// + /// Returns the position after considering this modifier. + /// + /// that is being modified. + /// New position for the + Vector3 GetModifiedPosition(IMixedRealityCursor cursor); + + /// + /// Returns the rotation after considering this modifier. + /// + /// that is being modified. + /// New rotation for the + Quaternion GetModifiedRotation(IMixedRealityCursor cursor); + + /// + /// Returns the 's local scale after considering this modifier. + /// + /// that is being modified. + /// New local scale for the + Vector3 GetModifiedScale(IMixedRealityCursor cursor); + + /// + /// Returns the modified for the after considering this modifier. + /// + /// Cursor that is being modified. + /// Modified position. + /// Modified rotation. + /// Modified scale. + void GetModifiedTransform(IMixedRealityCursor cursor, out Vector3 position, out Quaternion rotation, out Vector3 scale); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/ICursorModifier.cs.meta b/Interfaces/InputSystem/ICursorModifier.cs.meta new file mode 100644 index 000000000..e50b9912e --- /dev/null +++ b/Interfaces/InputSystem/ICursorModifier.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 77a730151a0444abae2c2a7ce10ea332 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IInputActionRule.cs b/Interfaces/InputSystem/IInputActionRule.cs new file mode 100644 index 000000000..87bb76ece --- /dev/null +++ b/Interfaces/InputSystem/IInputActionRule.cs @@ -0,0 +1,29 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions.InputSystem; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface for defining Input Action Rules + /// + /// + public interface IInputActionRule + { + /// + /// The Base Action that the rule will listen to. + /// + MixedRealityInputAction BaseAction { get; } + + /// + /// The Action to raise if the criteria is met. + /// + MixedRealityInputAction RuleAction { get; } + + /// + /// The criteria to check against for determining if the action should be raised. + /// + T Criteria { get; } + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IInputActionRule.cs.meta b/Interfaces/InputSystem/IInputActionRule.cs.meta new file mode 100644 index 000000000..154abd4a9 --- /dev/null +++ b/Interfaces/InputSystem/IInputActionRule.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba2b2cb8501247cc8e5df042d1933fbd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityCursor.cs b/Interfaces/InputSystem/IMixedRealityCursor.cs new file mode 100644 index 000000000..b4793138f --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityCursor.cs @@ -0,0 +1,61 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Interfaces.InputSystem.Handlers; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Cursor Interface for handling input events and setting visibility. + /// + public interface IMixedRealityCursor : IMixedRealityFocusChangedHandler, IMixedRealitySourceStateHandler, IMixedRealityPointerHandler + { + /// + /// The this is associated with. + /// + IMixedRealityPointer Pointer { get; set; } + + /// + /// The maximum distance the cursor can be with nothing hit + /// + float DefaultCursorDistance { get; set; } + + /// + /// Position of the . + /// + Vector3 Position { get; } + + /// + /// Rotation of the . + /// + Quaternion Rotation { get; } + + /// + /// Local scale of the . + /// + Vector3 LocalScale { get; } + + /// + /// Sets the visibility of the . + /// + /// True if cursor should be visible, false if not. + void SetVisibility(bool visible); + + /// + /// Is the cursor currently visible? + /// + bool IsVisible { get; } + + /// + /// Sets the visibility of the when the source is detected. + /// + bool SetVisibilityOnSourceDetected { get; set; } + + /// + /// Returns the 's reference. + /// + /// The this component is attached to. + GameObject GameObjectReference { get; } + } +} diff --git a/Interfaces/InputSystem/IMixedRealityCursor.cs.meta b/Interfaces/InputSystem/IMixedRealityCursor.cs.meta new file mode 100644 index 000000000..055ee2527 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityCursor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: da1a083246664769b52bfd1d88997406 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityFocusProvider.cs b/Interfaces/InputSystem/IMixedRealityFocusProvider.cs new file mode 100644 index 000000000..be761289b --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityFocusProvider.cs @@ -0,0 +1,89 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Physics; +using XRTK.EventDatum.Input; +using XRTK.Interfaces.InputSystem.Handlers; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Implements the Focus Provider for handling focus of pointers. + /// + public interface IMixedRealityFocusProvider : IMixedRealitySourceStateHandler, IMixedRealityDataProvider + { + /// + /// Maximum distance at which all pointers can collide with a , unless it has an override extent. + /// + float GlobalPointingExtent { get; } + + /// + /// The layer masks for the focus pointers to raycast against. + /// + LayerMask[] FocusLayerMasks { get; } + + /// + /// The Camera the uses to raycast against. + /// + /// Every uGUI in your scene should use this camera as its event camera. + Camera UIRaycastCamera { get; } + + /// + /// To tap on a hologram even when not focused on, + /// set OverrideFocusedObject to desired game object. + /// If it's null, then focused object will be used. + /// + GameObject OverrideFocusedObject { get; set; } + + /// + /// Gets the currently focused object for the pointing source. + /// + /// If the pointing source is not registered, then the Gaze's Focused is returned. + /// + /// Currently Focused Object. + GameObject GetFocusedObject(IMixedRealityPointer pointingSource); + + /// + /// Gets the currently focused object for the pointing source. + /// + /// + /// + bool TryGetFocusDetails(IMixedRealityPointer pointer, out FocusDetails focusDetails); + + /// + /// Get the Graphic Event Data for the specified pointing source. + /// + /// The pointer who's graphic event data we're looking for. + /// The graphic event data for the specified pointer + /// True, if graphic event data exists. + bool TryGetSpecificPointerGraphicEventData(IMixedRealityPointer pointer, out GraphicInputEventData graphicInputEventData); + + /// + /// Generate a new unique pointer id. + /// + /// + uint GenerateNewPointerId(); + + /// + /// Checks if the pointer is registered with the Focus Manager. + /// + /// + /// True, if registered, otherwise false. + bool IsPointerRegistered(IMixedRealityPointer pointer); + + /// + /// Registers the pointer with the Focus Manager. + /// + /// + /// True, if the pointer was registered, false if the pointer was previously registered. + bool RegisterPointer(IMixedRealityPointer pointer); + + /// + /// Unregisters the pointer with the Focus Manager. + /// + /// + /// True, if the pointer was unregistered, false if the pointer was not registered. + bool UnregisterPointer(IMixedRealityPointer pointer); + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IMixedRealityFocusProvider.cs.meta b/Interfaces/InputSystem/IMixedRealityFocusProvider.cs.meta new file mode 100644 index 000000000..265012f61 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityFocusProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 778a4e242454406b8afd39a5b36e5ba4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityGazeProvider.cs b/Interfaces/InputSystem/IMixedRealityGazeProvider.cs new file mode 100644 index 000000000..e68362231 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityGazeProvider.cs @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Implements the Gaze Provider for an Input Source. + /// + public interface IMixedRealityGazeProvider + { + /// + /// Enable or disable the attached to the + /// + bool Enabled { get; set; } + + /// + /// The Gaze Input Source for the provider. + /// + IMixedRealityInputSource GazeInputSource { get; } + + /// + /// The Gaze Pointer for the provider. + /// + IMixedRealityPointer GazePointer { get; } + + /// + /// The Gaze Cursor for the provider. + /// + IMixedRealityCursor GazeCursor { get; } + + /// + /// The game object that is currently being gazed at, if any. + /// + GameObject GazeTarget { get; } + + /// + /// HitInfo property gives access to information at the object being gazed at, if any. + /// + RaycastHit HitInfo { get; } + + /// + /// Position at which the gaze manager hit an object. + /// If no object is currently being hit, this will use the last hit distance. + /// + Vector3 HitPosition { get; } + + /// + /// Normal of the point at which the gaze manager hit an object. + /// If no object is currently being hit, this will return the previous normal. + /// + Vector3 HitNormal { get; } + + /// + /// Origin of the gaze. + /// + Vector3 GazeOrigin { get; } + + /// + /// Normal of the gaze. + /// + Vector3 GazeDirection { get; } + + /// + /// The current head velocity. + /// + Vector3 HeadVelocity { get; } + + /// + /// The current head movement direction. + /// + Vector3 HeadMovementDirection { get; } + + /// + /// Get the GameObject reference for this Gaze Provider. + /// + GameObject GameObjectReference { get; } + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IMixedRealityGazeProvider.cs.meta b/Interfaces/InputSystem/IMixedRealityGazeProvider.cs.meta new file mode 100644 index 000000000..f3810db29 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityGazeProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d1c16c1e9e745bfb0651173085c9150 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityInputSource.cs b/Interfaces/InputSystem/IMixedRealityInputSource.cs new file mode 100644 index 000000000..8c8346e4c --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityInputSource.cs @@ -0,0 +1,19 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface for an input source. + /// An input source is the origin of user input and generally comes from a physical controller, sensor, or other hardware device. + /// + public interface IMixedRealityInputSource : IMixedRealityEventSource + { + /// + /// Array of pointers associated with this input source. + /// + IMixedRealityPointer[] Pointers { get; } + } +} diff --git a/Interfaces/InputSystem/IMixedRealityInputSource.cs.meta b/Interfaces/InputSystem/IMixedRealityInputSource.cs.meta new file mode 100644 index 000000000..583fd9307 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityInputSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 266633bc6547491ca2051aae053f8768 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityInputSystem.cs b/Interfaces/InputSystem/IMixedRealityInputSystem.cs new file mode 100644 index 000000000..84483b2a1 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityInputSystem.cs @@ -0,0 +1,598 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Manager interface for a Input system in the Mixed Reality Toolkit + /// All replacement systems for providing Input System functionality should derive from this interface + /// + public interface IMixedRealityInputSystem : IMixedRealityEventSystem + { + /// + /// Event that's raised when the Input is enabled. + /// + event Action InputEnabled; + + /// + /// Event that's raised when the Input is disabled. + /// + event Action InputDisabled; + + /// + /// List of the Interaction Input Sources as detected by the input manager like hands or motion controllers. + /// + HashSet DetectedInputSources { get; } + + /// + /// List of s currently detected by the input manager. + /// + /// + /// This property is similar to , as this is a subset of those s in that list. + /// + HashSet DetectedControllers { get; } + + /// + /// The current Focus Provider that's been implemented by this Input System. + /// + IMixedRealityFocusProvider FocusProvider { get; } + + /// + /// The current Gaze Provider that's been implemented by this Input System. + /// + IMixedRealityGazeProvider GazeProvider { get; } + + /// + /// Indicates if input is currently enabled or not. + /// + bool IsInputEnabled { get; } + + /// + /// Push a disabled input state onto the Input System. + /// While input is disabled no events will be sent out and the cursor displays + /// a waiting animation. + /// + void PushInputDisable(); + + /// + /// Pop disabled input state. When the last disabled state is + /// popped off the stack input will be re-enabled. + /// + void PopInputDisable(); + + /// + /// Clear the input disable stack, which will immediately re-enable input. + /// + void ClearInputDisableStack(); + + /// + /// Push a game object into the modal input stack. Any input handlers + /// on the game object are given priority to input events before any focused objects. + /// + /// The input handler to push + void PushModalInputHandler(GameObject inputHandler); + + /// + /// Remove the last game object from the modal input stack. + /// + void PopModalInputHandler(); + + /// + /// Clear all modal input handlers off the stack. + /// + void ClearModalInputStack(); + + /// + /// Push a game object into the fallback input stack. Any input handlers on + /// the game object are given input events when no modal or focused objects consume the event. + /// + /// The input handler to push + void PushFallbackInputHandler(GameObject inputHandler); + + /// + /// Remove the last game object from the fallback input stack. + /// + void PopFallbackInputHandler(); + + /// + /// Clear all fallback input handlers off the stack. + /// + void ClearFallbackInputStack(); + + #region IMixedRealityController Utilities + + /// + /// Tried to get a from the list. + /// + /// The you want to get a controller reference for. + /// The that was found in the list of + /// True, if an is found. + bool TryGetController(IMixedRealityInputSource inputSource, out IMixedRealityController controller); + + #endregion IMixedRealityController Utilities + + #region Input Events + + #region Input Source Events + + /// + /// Generates a new unique input source id. + /// + /// All Input Sources are required to call this method in their constructor or initialization. + /// a new unique Id for the input source. + uint GenerateNewSourceId(); + + /// + /// Request a new generic input source from the system. + /// + /// + /// + /// + IMixedRealityInputSource RequestNewGenericInputSource(string name, IMixedRealityPointer[] pointers = null); + + /// + /// Raise the event that the Input Source was detected. + /// + /// The detected Input Source. + /// + void RaiseSourceDetected(IMixedRealityInputSource source, IMixedRealityController controller = null); + + /// + /// Raise the event that the Input Source was lost. + /// + /// The lost Input Source. + /// + void RaiseSourceLost(IMixedRealityInputSource source, IMixedRealityController controller = null); + + /// + /// Raise the event that the Input Source's tracking state has changed. + /// + /// + /// + /// + void RaiseSourceTrackingStateChanged(IMixedRealityInputSource source, IMixedRealityController controller, TrackingState state); + + /// + /// Raise the event that the Input Source position was changed. + /// + /// + /// + /// + void RaiseSourcePositionChanged(IMixedRealityInputSource source, IMixedRealityController controller, Vector2 position); + + /// + /// Raise the event that the Input Source position was changed. + /// + /// + /// + /// + void RaiseSourcePositionChanged(IMixedRealityInputSource source, IMixedRealityController controller, Vector3 position); + + /// + /// Raise the event that the Input Source position was changed. + /// + /// + /// + /// + void RaiseSourceRotationChanged(IMixedRealityInputSource source, IMixedRealityController controller, Quaternion rotation); + + /// + /// Raise the event that the Input Source position was changed. + /// + /// + /// + /// + void RaiseSourcePoseChanged(IMixedRealityInputSource source, IMixedRealityController controller, MixedRealityPose position); + + #endregion Input Source Events + + #region Focus Events + + /// + /// Raise the pre-focus changed event. + /// + /// This event is useful for doing logic before the focus changed event. + /// The pointer that the focus change event is raised on. + /// The old focused object. + /// The new focused object. + void RaisePreFocusChanged(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject); + + /// + /// Raise the focus changed event. + /// + /// The pointer that the focus change event is raised on. + /// The old focused object. + /// The new focused object. + void RaiseFocusChanged(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject); + + /// + /// Raise the focus enter event. + /// + /// The pointer that has focus. + /// The that the pointer has entered focus on. + void RaiseFocusEnter(IMixedRealityPointer pointer, GameObject focusedObject); + + /// + /// Raise the focus exit event. + /// + /// The pointer that has lost focus. + /// The that the pointer has exited focus on. + void RaiseFocusExit(IMixedRealityPointer pointer, GameObject unfocusedObject); + + #endregion Focus Events + + #region Pointers + + #region Pointer Down + + /// + /// Raise the pointer down event. + /// + /// The pointer where the event originates. + /// + /// + void RaisePointerDown(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, IMixedRealityInputSource inputSource = null); + + #endregion Pointer Down + + #region Pointer Click + + /// + /// Raise the pointer clicked event. + /// + /// + /// + /// + /// + void RaisePointerClicked(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, int count, IMixedRealityInputSource inputSource = null); + + #endregion Pointer Click + + #region Pointer Up + + /// + /// Raise the pointer up event. + /// + /// + /// + /// + void RaisePointerUp(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, IMixedRealityInputSource inputSource = null); + + #endregion Pointer Up + + #endregion Pointers + + #region Generic Input Events + + #region Input Down + + /// + /// Raise the input down event. + /// + /// + /// + void RaiseOnInputDown(IMixedRealityInputSource source, MixedRealityInputAction inputAction); + + /// + /// Raise the input down event. + /// + /// + /// + /// + void RaiseOnInputDown(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction); + + #endregion Input Down + + #region Input Pressed + + /// + /// Raise Input Pressed. + /// + /// + /// + void RaiseOnInputPressed(IMixedRealityInputSource source, MixedRealityInputAction inputAction); + + /// + /// Raise Input Pressed. + /// + /// + /// + /// + void RaiseOnInputPressed(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction); + + /// + /// Raise Input Pressed. + /// + /// + /// + /// + void RaiseOnInputPressed(IMixedRealityInputSource source, MixedRealityInputAction inputAction, float pressAmount); + + /// + /// Raise Input Pressed. + /// + /// + /// + /// + /// + void RaiseOnInputPressed(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, float pressAmount); + + #endregion Input Pressed + + #region Input Up + + /// + /// Raise the input up event. + /// + /// + /// + void RaiseOnInputUp(IMixedRealityInputSource source, MixedRealityInputAction inputAction); + + /// + /// Raise the input up event. + /// + /// + /// + /// + void RaiseOnInputUp(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction); + + #endregion Input Up + + #region Input Position Changed + + /// + /// Raise the 1st degree of freedom input event. + /// + /// + /// + /// + void RaisePositionInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, float position); + + /// + /// Raise the 1st degree of freedom input event. + /// + /// + /// + /// + /// + void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, float position); + + /// + /// Raise the 2 degrees of freedom input event. + /// + /// + /// + /// + void RaisePositionInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, Vector2 position); + + /// + /// Raise the 2 degrees of freedom input event. + /// + /// + /// + /// + /// + void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Vector2 position); + + /// + /// Raise the 3 degrees of freedom input event. + /// + /// + /// + /// + void RaisePositionInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, Vector3 position); + + /// + /// Raise the 3 degrees of freedom input event. + /// + /// + /// + /// + /// + void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Vector3 position); + + #endregion Input Position Changed + + #region Input Rotation Changed + + /// + /// Raise the 3 degrees of freedom input event. + /// + /// + /// + /// + void RaiseRotationInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, Quaternion rotation); + + /// + /// Raise the 3 degrees of freedom input event. + /// + /// + /// + /// + /// + void RaiseRotationInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Quaternion rotation); + + #endregion Input Rotation Changed + + #region Input Pose Changed + + /// + /// Raise the 6 degrees of freedom input event. + /// + /// + /// + /// + void RaisePoseInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, MixedRealityPose inputData); + + /// + /// Raise the 6 degrees of freedom input event. + /// + /// + /// + /// + /// + void RaisePoseInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, MixedRealityPose inputData); + + #endregion Input Pose Changed + + #endregion Generic Input Events + + #region Generic Gesture Events + + /// + /// Raise the Gesture Started Event. + /// + /// + /// + void RaiseGestureStarted(IMixedRealityController controller, MixedRealityInputAction action); + + /// + /// Raise the Gesture Updated Event. + /// + /// + /// + void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action); + + /// + /// Raise the Gesture Updated Event. + /// + /// + /// + /// + void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Vector2 inputData); + + /// + /// Raise the Gesture Updated Event. + /// + /// + /// + /// + void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Vector3 inputData); + + /// + /// Raise the Gesture Updated Event. + /// + /// + /// + /// + void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Quaternion inputData); + + /// + /// Raise the Gesture Updated Event. + /// + /// + /// + /// + void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, MixedRealityPose inputData); + + /// + /// Raise the Gesture Completed Event. + /// + /// + /// + void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action); + + /// + /// Raise the Gesture Completed Event. + /// + /// + /// + /// + void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Vector2 inputData); + + /// + /// Raise the Gesture Completed Event. + /// + /// + /// + /// + void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Vector3 inputData); + + /// + /// Raise the Gesture Completed Event. + /// + /// + /// + /// + void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Quaternion inputData); + + /// + /// Raise the Gesture Completed Event. + /// + /// + /// + /// + void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, MixedRealityPose inputData); + + /// + /// Raise the Gesture Canceled Event. + /// + /// + /// + void RaiseGestureCanceled(IMixedRealityController controller, MixedRealityInputAction action); + + #endregion + + #region Speech Keyword Events + + /// + /// + /// + /// + /// + /// + /// + /// + /// + void RaiseSpeechCommandRecognized(IMixedRealityInputSource source, MixedRealityInputAction inputAction, RecognitionConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, string text); + + #endregion Speech Keyword Events + + #region Dictation Events + + /// + /// + /// + /// + /// + /// + void RaiseDictationHypothesis(IMixedRealityInputSource source, string dictationHypothesis, AudioClip dictationAudioClip = null); + + /// + /// + /// + /// + /// + /// + void RaiseDictationResult(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip = null); + + /// + /// + /// + /// + /// + /// + void RaiseDictationComplete(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip); + + /// + /// + /// + /// + /// + /// + void RaiseDictationError(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip = null); + + #endregion Dictation Events + + #endregion Input Events + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IMixedRealityInputSystem.cs.meta b/Interfaces/InputSystem/IMixedRealityInputSystem.cs.meta new file mode 100644 index 000000000..08ba8b000 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityInputSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e923652e73494333b55a2f04ebead0d8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityMousePointer.cs b/Interfaces/InputSystem/IMixedRealityMousePointer.cs new file mode 100644 index 000000000..f4d01b59b --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityMousePointer.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface for handling mouse pointers. + /// + public interface IMixedRealityMousePointer : IMixedRealityPointer + { + /// + /// Should the mouse cursor be hidden when no active input is received? + /// + bool HideCursorWhenInactive { get; } + + /// + /// What is the movement threshold to reach before un-hiding mouse cursor? + /// + float MovementThresholdToUnHide { get; } + + /// + /// How long should it take before the mouse cursor is hidden? + /// + float HideTimeout { get; } + + /// + /// Defines the mouse cursor speed. + /// Multiplier that gets applied to the mouse delta before converting to world space. + /// + float Speed { get; } + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IMixedRealityMousePointer.cs.meta b/Interfaces/InputSystem/IMixedRealityMousePointer.cs.meta new file mode 100644 index 000000000..c2362d3cd --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityMousePointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 57e9d4cac45e45289a4c9e306c57ebbb +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityPointer.cs b/Interfaces/InputSystem/IMixedRealityPointer.cs new file mode 100644 index 000000000..b4e052786 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityPointer.cs @@ -0,0 +1,152 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections; +using UnityEngine; +using XRTK.Definitions.Physics; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.InputSystem.Handlers; +using XRTK.Interfaces.Physics; +using XRTK.Interfaces.TeleportSystem; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface for handling pointers. + /// + public interface IMixedRealityPointer : IEqualityComparer + { + /// + /// The pointer's current controller reference. + /// + IMixedRealityController Controller { get; set; } + + /// + /// This pointer's id. + /// + uint PointerId { get; } + + /// + /// This pointer's name. + /// + string PointerName { get; set; } + + /// + /// This pointer's input source parent. + /// + IMixedRealityInputSource InputSourceParent { get; } + + /// + /// The pointer's cursor. + /// + IMixedRealityCursor BaseCursor { get; set; } + + /// + /// The currently active cursor modifier. + /// + ICursorModifier CursorModifier { get; set; } + + /// + /// The currently active teleport hotspot. + /// + IMixedRealityTeleportHotSpot TeleportHotSpot { get; set; } + + /// + /// Has the conditions for the interaction been satisfied to enable the interaction? + /// + bool IsInteractionEnabled { get; } + + /// + /// Is the focus for this pointer currently locked? + /// + bool IsFocusLocked { get; set; } + + /// + /// The pointer's maximum extent when raycasting. + /// + float PointerExtent { get; set; } + + /// + /// The raycast rays. + /// + RayStep[] Rays { get; } + + /// + /// The physics layers to use when raycasting. + /// + /// If set, will override the 's default raycasting layer mask array. + /// + /// Allow the pointer to hit SR, but first prioritize any DefaultRaycastLayers (potentially behind SR) + /// + /// + LayerMask[] PrioritizedLayerMasksOverride { get; set; } + + /// + /// The currently focused target. + /// + IMixedRealityFocusHandler FocusTarget { get; set; } + + /// + /// The physics raycast pointer result. + /// + IPointerResult Result { get; set; } + + /// + /// Ray stabilizer used when calculating position of pointer end point. + /// + IBaseRayStabilizer RayStabilizer { get; set; } + + /// + /// The physics raycast mode to use. + /// + RaycastMode RaycastMode { get; set; } + + /// + /// The radius to use when is set to Sphere. + /// + float SphereCastRadius { get; set; } + + /// + /// The Y orientation of the pointer - used for touchpad rotation and navigation + /// + float PointerOrientation { get; } + + /// + /// Called before all rays have casted. + /// + void OnPreRaycast(); + + /// + /// Called after all rays have casted. + /// + void OnPostRaycast(); + + /// + /// Returns the position of the input source, if available. + /// Not all input sources support positional information, and those that do may not always have it available. + /// + /// Out parameter filled with the position if available, otherwise . + /// True if a position was retrieved, false if not. + bool TryGetPointerPosition(out Vector3 position); + + /// + /// Returns the pointing ray of the input source, if available. + /// Not all input sources support pointing information, and those that do may not always have it available. + /// + /// Out parameter filled with the pointing ray if available. + /// True if a pointing ray was retrieved, false if not. + bool TryGetPointingRay(out Ray pointingRay); + + /// + /// Returns the rotation of the input source, if available. + /// Not all input sources support rotation information, and those that do may not always have it available. + /// + /// Out parameter filled with the rotation if available, otherwise . + /// True if an rotation was retrieved, false if not. + bool TryGetPointerRotation(out Quaternion rotation); + } +} diff --git a/Interfaces/InputSystem/IMixedRealityPointer.cs.meta b/Interfaces/InputSystem/IMixedRealityPointer.cs.meta new file mode 100644 index 000000000..c378db2f7 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 1f1652cf2038424fb499b048512c0e65 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IMixedRealityTouchPointer.cs b/Interfaces/InputSystem/IMixedRealityTouchPointer.cs new file mode 100644 index 000000000..b2fa6f946 --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityTouchPointer.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface for handling touch pointers. + /// + public interface IMixedRealityTouchPointer : IMixedRealityPointer + { + /// + /// Current finger id of the touch. + /// + int FingerId { get; set; } + + /// + /// Current touch ray. + /// + Ray TouchRay { get; set; } + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IMixedRealityTouchPointer.cs.meta b/Interfaces/InputSystem/IMixedRealityTouchPointer.cs.meta new file mode 100644 index 000000000..61bffcc9d --- /dev/null +++ b/Interfaces/InputSystem/IMixedRealityTouchPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 76dbe11366284696abfd6c42d5e94aee +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/InputSystem/IPointerResult.cs b/Interfaces/InputSystem/IPointerResult.cs new file mode 100644 index 000000000..6bbffba58 --- /dev/null +++ b/Interfaces/InputSystem/IPointerResult.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Physics; + +namespace XRTK.Interfaces.InputSystem +{ + /// + /// Interface defining a pointer result. + /// + public interface IPointerResult + { + /// + /// The starting point of the Pointer RaySteps. + /// + Vector3 StartPoint { get; } + + /// + /// Details about the currently focused . + /// + FocusDetails Details { get; } + + /// + /// The current pointer's target + /// + GameObject CurrentPointerTarget { get; } + + /// + /// The previous pointer target. + /// + GameObject PreviousPointerTarget { get; } + + /// + /// The index of the step that produced the last raycast hit, 0 when no raycast hit. + /// + int RayStepIndex { get; } + } +} \ No newline at end of file diff --git a/Interfaces/InputSystem/IPointerResult.cs.meta b/Interfaces/InputSystem/IPointerResult.cs.meta new file mode 100644 index 000000000..22ec761c9 --- /dev/null +++ b/Interfaces/InputSystem/IPointerResult.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 753638fa3c8f4b25a8efa5f7d6a8599d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/NetworkingSystem.meta b/Interfaces/NetworkingSystem.meta new file mode 100644 index 000000000..090b2a719 --- /dev/null +++ b/Interfaces/NetworkingSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: c8e3c1aebc4e4c0e855dc9b3922ed276 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/NetworkingSystem/Handlers.meta b/Interfaces/NetworkingSystem/Handlers.meta new file mode 100644 index 000000000..0fd269ced --- /dev/null +++ b/Interfaces/NetworkingSystem/Handlers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 741d3b8cf419459482dd178f2cea1288 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs b/Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs new file mode 100644 index 000000000..cad44c1c6 --- /dev/null +++ b/Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs @@ -0,0 +1,21 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.Networking; + +namespace XRTK.Interfaces.NetworkingSystem.Handlers +{ + /// + /// Generic networking data handler for consuming network data from the + /// + /// The type of data you want to receive. + public interface IMixedRealityNetworkingHandler : IEventSystemHandler + { + /// + /// Is triggered by incoming data and includes eventData as a parameter. + /// + /// + void OnDataReceived(BaseNetworkingEventData eventData); + } +} \ No newline at end of file diff --git a/Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs.meta b/Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs.meta new file mode 100644 index 000000000..942820e1d --- /dev/null +++ b/Interfaces/NetworkingSystem/Handlers/IMixedRealityNetworkingHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a0bae04d5e524dc1b4142ed735bc1c1c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs b/Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs new file mode 100644 index 000000000..579648995 --- /dev/null +++ b/Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs @@ -0,0 +1,34 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.NetworkingSystem +{ + /// + /// The base interface to define networking data providers, such as WebRTC, Photon, uNet, etc. + /// + public interface IMixedRealityNetworkDataProvider : IMixedRealityEventSource, IMixedRealityDataProvider + { + /// + /// Send this data over the wire. + /// + /// + /// + void SendData(T data); + } + + /// + /// The interface to define network data providers that keep a list of active connections. + /// + /// + /// + public interface IMixedRealityNetworkDataProvider : IMixedRealityNetworkDataProvider + { + /// + /// The current connections of the network data provider. + /// + IReadOnlyDictionary Connections { get; } + } +} \ No newline at end of file diff --git a/Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs.meta b/Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs.meta new file mode 100644 index 000000000..b39b07731 --- /dev/null +++ b/Interfaces/NetworkingSystem/IMixedRealityNetworkDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4ec94db78a52433d9d36be8ca87b0ad4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs b/Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs new file mode 100644 index 000000000..63f5a2886 --- /dev/null +++ b/Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs @@ -0,0 +1,51 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.NetworkingSystem +{ + /// + /// The networking system contract for the Mixed Reality Toolkit. + /// + public interface IMixedRealityNetworkingSystem : IMixedRealityEventSystem + { + /// + /// The s detected by the system. + /// + HashSet NetworkDataProviders { get; } + + /// + /// Request a new for the + /// + /// A new unique source id for the data provider. + uint RequestNetworkDataProviderSourceId(); + + /// + /// Raise that a has been detected by the system. + /// + /// + void RaiseNetworkDataProviderDetected(IMixedRealityNetworkDataProvider networkDataProvider); + + /// + /// Raise that a has been lost by the system. + /// + /// + void RaiseNetworkDataProviderLost(IMixedRealityNetworkDataProvider networkDataProvider); + + /// + /// Send data out over the wire to whomever is listening. + /// + /// + /// + void SendData(T data); + + /// + /// Raise when data has been received from an . It's up to the to forward this data to whomever needs it. + /// + /// + /// + void RaiseDataReceived(T data); + } +} \ No newline at end of file diff --git a/Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs.meta b/Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs.meta new file mode 100644 index 000000000..10ac7e165 --- /dev/null +++ b/Interfaces/NetworkingSystem/IMixedRealityNetworkingSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2975f7d2ee934174bd143dcf70230ef1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Physics.meta b/Interfaces/Physics.meta new file mode 100644 index 000000000..d2c65e3d7 --- /dev/null +++ b/Interfaces/Physics.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 101c338c530045e48c05888e5c9adc1a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Physics/IBaseRayStabilizer.cs b/Interfaces/Physics/IBaseRayStabilizer.cs new file mode 100644 index 000000000..756584bbf --- /dev/null +++ b/Interfaces/Physics/IBaseRayStabilizer.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Interfaces.Physics +{ + public interface IBaseRayStabilizer + { + Vector3 StablePosition { get; } + Quaternion StableRotation { get; } + Ray StableRay { get; } + void UpdateStability(Vector3 position, Quaternion rotation); + void UpdateStability(Vector3 position, Vector3 direction); + } +} \ No newline at end of file diff --git a/Interfaces/Physics/IBaseRayStabilizer.cs.meta b/Interfaces/Physics/IBaseRayStabilizer.cs.meta new file mode 100644 index 000000000..31aa63041 --- /dev/null +++ b/Interfaces/Physics/IBaseRayStabilizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 29d0fb75f15d49a8ba5038ea6244d1d6 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers.meta b/Interfaces/Providers.meta new file mode 100644 index 000000000..94329dc0b --- /dev/null +++ b/Interfaces/Providers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: ac2afc0298ea49838b6b78ac4548a2af +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers.meta b/Interfaces/Providers/Controllers.meta new file mode 100644 index 000000000..17d1c10a2 --- /dev/null +++ b/Interfaces/Providers/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 8e209126d397449fac939a3fe9cdbda7 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers/IMixedRealityController.cs b/Interfaces/Providers/Controllers/IMixedRealityController.cs new file mode 100644 index 000000000..f418e3389 --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityController.cs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Interfaces.Providers.Controllers +{ + /// + /// Mixed Reality Toolkit controller definition, used to manage a specific controller type + /// + public interface IMixedRealityController + { + /// + /// Is the controller enabled? + /// + bool Enabled { get; set; } + + /// + /// Outputs the current state of the Input Source, whether it is tracked or not. As defined by the SDK / Unity. + /// + TrackingState TrackingState { get; } + + /// + /// The designated hand that the Input Source is managing, as defined by the SDK / Unity. + /// + Handedness ControllerHandedness { get; } + + /// + /// The registered Input Source for this controller + /// + IMixedRealityInputSource InputSource { get; } + + /// + /// The controller's "Visual" in the scene. + /// + IMixedRealityControllerVisualizer Visualizer { get; } + + /// + /// Indicates that this controller is currently providing position data. + /// + /// + /// This value may change during usage for some controllers. As a best practice, + /// be sure to check this value before using position data. + /// + bool IsPositionAvailable { get; } + + /// + /// Indicates the accuracy of the position data being reported. + /// + bool IsPositionApproximate { get; } + + /// + /// Indicates that this controller is currently providing rotation data. + /// + /// + /// This value may change during usage for some controllers. As a best practice, + /// be sure to check this value before using rotation data. + /// + bool IsRotationAvailable { get; } + + /// + /// Mapping definition for this controller, linking the Physical inputs to logical Input System Actions + /// + MixedRealityInteractionMapping[] Interactions { get; } + } +} \ No newline at end of file diff --git a/Interfaces/Providers/Controllers/IMixedRealityController.cs.meta b/Interfaces/Providers/Controllers/IMixedRealityController.cs.meta new file mode 100644 index 000000000..71e9232bf --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: dc107ea54bc34350af83470397289047 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs b/Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs new file mode 100644 index 000000000..18678821f --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Interfaces.Providers.Controllers +{ + /// + /// Mixed Reality Toolkit device definition, used to instantiate and manage a specific device / SDK + /// + public interface IMixedRealityControllerDataProvider : IMixedRealityDataProvider + { + /// + /// Retrieve all controllers currently registered with this device at runtime (if direct access is required) + /// + /// + IMixedRealityController[] GetActiveControllers(); + } +} \ No newline at end of file diff --git a/Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs.meta b/Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs.meta new file mode 100644 index 000000000..b953d1d5f --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityControllerDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7f27edcc030f498e831a57c4fb342877 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs b/Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs new file mode 100644 index 000000000..9c068d1c1 --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs @@ -0,0 +1,56 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem.Handlers; + +namespace XRTK.Interfaces.Providers.Controllers +{ + /// + /// Basic interface for synchronizing to a controller pose. + /// + public interface IMixedRealityControllerPoseSynchronizer : IMixedRealitySourcePoseHandler, + IMixedRealityInputHandler, + IMixedRealityInputHandler, + IMixedRealityInputHandler, + IMixedRealityInputHandler, + IMixedRealityInputHandler, + IMixedRealityInputHandler + { + /// + /// The that will be synchronized with the controller data. + /// + /// + /// Defaults to the that this component is attached to. + /// + Transform PoseDriver { get; set; } + + /// + /// The controller handedness to synchronize with. + /// + Handedness Handedness { get; } + + /// + /// Should this clean itself up when it's controller is lost? + /// + /// It's up to the implementation to properly destroy the 's this interface will implement. + bool DestroyOnSourceLost { get; set; } + + /// + /// The current controller reference. + /// + IMixedRealityController Controller { get; set; } + + /// + /// Should the Transform's position be driven from the source pose or from input handler? + /// + bool UseSourcePoseData { get; set; } + + /// + /// The input action that will drive the Transform's pose, position, or rotation. + /// + MixedRealityInputAction PoseAction { get; set; } + } +} diff --git a/Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs.meta b/Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs.meta new file mode 100644 index 000000000..ed5225bef --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityControllerPoseSynchronizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4f793719b73344bb8dbd877ce3a53a84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs b/Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs new file mode 100644 index 000000000..a0b4bc981 --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs @@ -0,0 +1,20 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Interfaces.Providers.Controllers +{ + public interface IMixedRealityControllerVisualizer : IMixedRealityControllerPoseSynchronizer + { + /// + /// The reference for this controller. + /// + /// + /// This reference may not always be available when called. + /// + GameObject GameObjectProxy { get; } + + // TODO add defined elements or transforms? + } +} \ No newline at end of file diff --git a/Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs.meta b/Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs.meta new file mode 100644 index 000000000..259480b80 --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityControllerVisualizer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 9c093d41b52347de83a533ed86bcd595 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs b/Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs new file mode 100644 index 000000000..1cc9b01ca --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs @@ -0,0 +1,50 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Threading.Tasks; +using UnityEngine; + +namespace XRTK.Interfaces.Providers.Controllers +{ + /// + /// Mixed Reality Toolkit controller definition, used to manage a specific controller type + /// + public interface IMixedRealityDictationDataProvider : IMixedRealityControllerDataProvider + { + /// + /// Is the system currently listing to dictation input? + /// + bool IsListening { get; } + + /// + /// Turns on the dictation recognizer and begins recording audio from the default microphone. + /// + /// GameObject listening for the dictation input. + /// The time length in seconds before dictation recognizer session ends due to lack of audio input in case there was no audio heard in the current session. + /// The time length in seconds before dictation recognizer session ends due to lack of audio input. + /// Length in seconds for the manager to listen. + /// Optional: The microphone device to listen to. + void StartRecording(GameObject listener, float initialSilenceTimeout = 5f, float autoSilenceTimeout = 20f, int recordingTime = 10, string micDeviceName = ""); + + /// + /// Turns on the dictation recognizer and begins recording audio from the default microphone. + /// + /// GameObject listening for the dictation input. + /// The time length in seconds before dictation recognizer session ends due to lack of audio input in case there was no audio heard in the current session. + /// The time length in seconds before dictation recognizer session ends due to lack of audio input. + /// Length in seconds for the manager to listen. + /// Optional: The microphone device to listen to. + Task StartRecordingAsync(GameObject listener, float initialSilenceTimeout = 5f, float autoSilenceTimeout = 20f, int recordingTime = 10, string micDeviceName = ""); + + /// + /// Ends the recording session. + /// + void StopRecording(); + + /// + /// Ends the recording session. + /// + /// of the last recording session. + Task StopRecordingAsync(); + } +} diff --git a/Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs.meta b/Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs.meta new file mode 100644 index 000000000..42966185a --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealityDictationDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e1b75daf58064fecb50bbd0c3f4aa7e8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs b/Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs new file mode 100644 index 000000000..d4fb608f3 --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs @@ -0,0 +1,28 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +namespace XRTK.Interfaces.Providers.Controllers +{ + /// + /// Mixed Reality Toolkit controller definition, used to manage a specific controller type + /// + public interface IMixedRealitySpeechDataProvider : IMixedRealityControllerDataProvider + { + /// + /// Query whether or not the speech system is active + /// + bool IsRecognitionActive { get; } + + /// + /// Make sure the keyword recognizer is on, then stop it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + void StartRecognition(); + + /// + /// Make sure the keyword recognizer is on, then stop it. + /// Otherwise, leave it alone because it's already in the desired state. + /// + void StopRecognition(); + } +} diff --git a/Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs.meta b/Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs.meta new file mode 100644 index 000000000..97d770d7b --- /dev/null +++ b/Interfaces/Providers/Controllers/IMixedRealitySpeechDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6d8b247d45e6475ebb650eb13028074b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/SpatialObservers.meta b/Interfaces/Providers/SpatialObservers.meta new file mode 100644 index 000000000..fa5e00c79 --- /dev/null +++ b/Interfaces/Providers/SpatialObservers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7593af4ee4bd4171a4f1d28963fd23bc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs new file mode 100644 index 000000000..3d8dc5512 --- /dev/null +++ b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs @@ -0,0 +1,110 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.SpatialAwarenessSystem; + +namespace XRTK.Interfaces.Providers.SpatialObservers +{ + /// + /// The interface contract for Mixed Reality spatial observers. + /// + public interface IMixedRealitySpatialMeshObserver : IMixedRealitySpatialObserverDataProvider + { + /// + /// The optional Physics layer override of the base + /// + int MeshPhysicsLayerOverride { get; } + + /// + /// Gets or sets the level of detail, as a MixedRealitySpatialAwarenessMeshLevelOfDetail value, for the returned spatial mesh. + /// Setting this value to Custom, implies that the developer is specifying a custom value for MeshTrianglesPerCubicMeter. + /// + /// Specifying any other value will cause to be overwritten. + SpatialAwarenessMeshLevelOfDetail MeshLevelOfDetail { get; } + + /// + /// Gets or sets the level of detail, in triangles per cubic meter, for the returned spatial mesh. + /// + /// + /// When specifying Coarse or Fine for the , this value will be automatically overwritten with system default values. + /// + uint MeshTrianglesPerCubicMeter { get; } + + /// + /// Gets or sets a value indicating if the spatial awareness system to generate normal for the returned meshes + /// as some platforms may not support returning normal along with the spatial mesh. + /// + bool MeshRecalculateNormals { get; } + + /// + /// Gets or sets a value indicating how the mesh subsystem is to display surface meshes within the application. + /// + /// + /// Applications that wish to process the es should set this value to None. + /// + SpatialMeshDisplayOptions MeshDisplayOption { get; } + + /// + /// Gets or sets the to be used when displaying s. + /// + Material MeshVisibleMaterial { get; } + + /// + /// Gets or sets the to be used when s should occlude other objects. + /// + Material MeshOcclusionMaterial { get; } + + /// + /// Gets or sets the size of the volume, in meters per axis, from which individual observations will be made. + /// + Vector3 ObservationExtents { get; } + + /// + /// Should the observer remain stationary in the scene? + /// + /// + /// Set IsStationaryObserver set to false, to move the volume with the user. + /// If set to true, the origin will be 0,0,0 or the last known location. + /// + bool IsStationaryObserver { get; } + + /// + /// Gets or sets the origin of the observer. + /// + /// + /// Moving the observer origin allows the spatial awareness system to locate and discard meshes as the user + /// navigates the environment. + /// + Vector3 ObserverOrigin { get; } + + /// + /// Gets for sets the rotation of the observer + /// + Quaternion ObserverOrientation { get; } + + /// + /// The collection of mesh s that have been observed. + /// + IReadOnlyDictionary SpatialMeshObjects { get; } + + /// + /// Forwards mesh added event to the . + /// + /// The data. + void RaiseMeshAdded(SpatialMeshObject spatialMeshObject); + + /// + /// Forwards mesh updated event to the . + /// + /// The data. + void RaiseMeshUpdated(SpatialMeshObject spatialMeshObject); + + /// + /// Forwards mesh removed event to the . + /// + /// The data. + void RaiseMeshRemoved(SpatialMeshObject spatialMeshObject); + } +} \ No newline at end of file diff --git a/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs.meta b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs.meta new file mode 100644 index 000000000..cf861de46 --- /dev/null +++ b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialMeshObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 5f5b7bbcea4c4722a76640bd43948763 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs new file mode 100644 index 000000000..6b53f80b6 --- /dev/null +++ b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs @@ -0,0 +1,47 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Events; + +namespace XRTK.Interfaces.Providers.SpatialObservers +{ + /// + /// The Mixed Reality Spatial Observer Data Provider contract. + /// + public interface IMixedRealitySpatialObserverDataProvider : IMixedRealityDataProvider, IMixedRealityEventSource + { + /// + /// The startup behavior of the hardware resource. + /// + AutoStartBehavior StartupBehavior { get; } + + /// + /// Gets or sets the frequency, in seconds, at which the spatial observer updates. + /// + float UpdateInterval { get; set; } + + /// + /// The global physics layer to use when creating spatial objects for this observer. + /// + /// + /// Some implementations may override this. + /// + int PhysicsLayer { get; } + + /// + /// Is the observer running (actively accumulating spatial data)? + /// + bool IsRunning { get; } + + /// + /// Start the observer. + /// + void StartObserving(); + + /// + /// Stop the observer. + /// + void StopObserving(); + } +} diff --git a/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs.meta b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs.meta new file mode 100644 index 000000000..2540e799a --- /dev/null +++ b/Interfaces/Providers/SpatialObservers/IMixedRealitySpatialObserverDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: be5b660fb0bc4c6a9384d953c769d2ec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs b/Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs new file mode 100644 index 000000000..bb9e9f698 --- /dev/null +++ b/Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs @@ -0,0 +1,74 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; + +namespace XRTK.Interfaces.Providers.SpatialObservers +{ + public interface IMixedRealitySurfaceObserver : IMixedRealitySpatialObserverDataProvider + { + /// + /// Overrides the with the provided value. + /// + int SurfacePhysicsLayerOverride { get; } + + /// + /// Gets or sets the minimum surface area, in square meters, that must be satisfied before a surface is identified. + /// + float SurfaceFindingMinimumArea { get; } + + /// + /// Gets or sets a value indicating if the surface finding subsystem is to automatically display + /// floor surfaces within the application. When enabled, the surfaces will be added to the scene + /// and rendered using the configured . + /// + bool DisplayFloorSurfaces { get; set; } + + /// + /// Gets or sets the to be used when rendering floor surfaces. + /// + Material FloorSurfaceMaterial { get; } + + /// + /// Gets or sets a value indicating if the surface finding subsystem is to automatically display + /// ceiling surfaces within the application. When enabled, the surfaces will be added to the scene + /// and rendered using the configured . + /// + bool DisplayCeilingSurfaces { get; set; } + + /// + /// Gets or sets the to be used when rendering ceiling surfaces. + /// + Material CeilingSurfaceMaterial { get; } + + /// + /// Gets or sets a value indicating if the surface finding subsystem is to automatically display + /// wall surfaces within the application. When enabled, the surfaces will be added to the scene + /// and rendered using the configured . + /// + bool DisplayWallSurfaces { get; set; } + + /// + /// Gets or sets the to be used when rendering wall surfaces. + /// + Material WallSurfaceMaterial { get; } + + /// + /// Gets or sets a value indicating if the surface finding subsystem is to automatically display + /// horizontal platform surfaces within the application. When enabled, the surfaces will be added to the scene + /// and rendered using the configured . + /// + bool DisplayPlatformSurfaces { get; set; } + + /// + /// Gets or sets the to be used when rendering horizontal platform surfaces. + /// + Material PlatformSurfaceMaterial { get; } + + /// + /// Gets the collection of s being managed by the spatial awareness surface finding subsystem. + /// + IReadOnlyDictionary PlanarSurfaces { get; } + } +} \ No newline at end of file diff --git a/Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs.meta b/Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs.meta new file mode 100644 index 000000000..699b71530 --- /dev/null +++ b/Interfaces/Providers/SpatialObservers/IMixedRealitySurfaceObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7a2aa939576e4e889bb5105c592d3eec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/README.md b/Interfaces/README.md new file mode 100644 index 000000000..64d38582d --- /dev/null +++ b/Interfaces/README.md @@ -0,0 +1,19 @@ +# Mixed Reality Toolkit - Internal - Interfaces + +This folder contains all the Interface definitions for MRTK operation + +## Interface Definitions + +The list of definitions for Internal MRTK Interfaces are listed below. + +### IMixedRealityManager + +The IManager interface ensures that all Manager components comply with the requirements of all Mixed Reality Toolkit managers. + +### IMixedRealityBoundarySystem + +The IMixedRealityBoundarySystem interface is the base interface to identify a component as an Boundary System Manager. This is used to register an Boundary system in the Mixed Reality Toolkit, any replacement Boundary Systems should inherit from this interface for registration. + +### IMixedRealityInputSystem + +The IMixedRealityBoundarySystem interface is the base interface to identify a component as an Input System Manager. This is used to register an Input system in the Mixed Reality Toolkit, any replacement Input Systems should inherit from this interface for registration. \ No newline at end of file diff --git a/Interfaces/README.md.meta b/Interfaces/README.md.meta new file mode 100644 index 000000000..7c3c34abb --- /dev/null +++ b/Interfaces/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 8035bfe5925c4af38dfca2343649d847 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/SpatialAwareness.meta b/Interfaces/SpatialAwareness.meta new file mode 100644 index 000000000..75dad5ad7 --- /dev/null +++ b/Interfaces/SpatialAwareness.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7fae36dc8ff4d4baa78141e9b973e79 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/SpatialAwareness/Handlers.meta b/Interfaces/SpatialAwareness/Handlers.meta new file mode 100644 index 000000000..c44868167 --- /dev/null +++ b/Interfaces/SpatialAwareness/Handlers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d33afc1bc61941a79b6f92d487ead097 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs new file mode 100644 index 000000000..5b7cfef3e --- /dev/null +++ b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs @@ -0,0 +1,32 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.SpatialAwarenessSystem; + +namespace XRTK.Interfaces.SpatialAwarenessSystem.Handlers +{ + /// + /// The event handler for all Spatial Awareness Mesh Events. + /// + public interface IMixedRealitySpatialAwarenessMeshHandler : IEventSystemHandler + { + /// + /// Called when the spatial awareness mesh subsystem adds a mesh. + /// + /// Data describing the event. + void OnMeshAdded(MixedRealitySpatialAwarenessEventData eventData); + + /// + /// Called when the spatial awareness mesh subsystem updates an existing mesh. + /// + /// Data describing the event. + void OnMeshUpdated(MixedRealitySpatialAwarenessEventData eventData); + + /// + /// Called when the spatial awareness mesh subsystem removes an existing mesh. + /// + /// Data describing the event. + void OnMeshRemoved(MixedRealitySpatialAwarenessEventData eventData); + } +} diff --git a/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs.meta b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs.meta new file mode 100644 index 000000000..a30994992 --- /dev/null +++ b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessMeshHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 691d0f6b1ffb4dd8945295ce02e9cb9f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs new file mode 100644 index 000000000..051c1203b --- /dev/null +++ b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs @@ -0,0 +1,33 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine.EventSystems; +using XRTK.EventDatum.SpatialAwarenessSystem; + +namespace XRTK.Interfaces.SpatialAwarenessSystem.Handlers +{ + /// + /// The event handler for all Spatial Awareness Surface Finding Events. + /// + /// + public interface IMixedRealitySpatialAwarenessSurfaceFindingHandler : IEventSystemHandler + { + /// + /// Called when the spatial awareness surface finding subsystem adds a new planar surface. + /// + /// Data describing the event. + void OnSurfaceAdded(MixedRealitySpatialAwarenessEventData eventData); + + /// + /// Called when the spatial awareness surface finding subsystem updates an existing planar surface. + /// + /// Data describing the event. + void OnSurfaceUpdated(MixedRealitySpatialAwarenessEventData eventData); + + /// + /// Called when the spatial awareness surface finding subsystem removes an existing planar surface. + /// + /// Data describing the event. + void OnSurfaceRemoved(MixedRealitySpatialAwarenessEventData eventData); + } +} diff --git a/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs.meta b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs.meta new file mode 100644 index 000000000..d43f3f4dc --- /dev/null +++ b/Interfaces/SpatialAwareness/Handlers/IMixedRealitySpatialAwarenessSurfaceFindingHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 91d89d7fb06241279c8aff4a03f7b099 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs b/Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs new file mode 100644 index 000000000..560f5779b --- /dev/null +++ b/Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs @@ -0,0 +1,142 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.SpatialAwarenessSystem; +using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Interfaces.Events; +using XRTK.Interfaces.SpatialAwarenessSystem.Handlers; + +namespace XRTK.Interfaces.SpatialAwarenessSystem +{ + /// + /// The interface definition for Spatial Awareness features in the Mixed Reality Toolkit. + /// + public interface IMixedRealitySpatialAwarenessSystem : IMixedRealityEventSystem + { + /// + /// Parent which will encapsulate all of the spatial awareness system created scene objects. + /// + GameObject SpatialAwarenessRootParent { get; } + + /// + /// Parent which will encapsulate all of the system created s. + /// + GameObject SpatialMeshesParent { get; } + + /// + /// Parent which will encapsulate all of the system created mesh objects. + /// + GameObject SurfacesParent { get; } + + /// + /// Indicates the current running state of the spatial awareness observer. + /// + bool IsObserverRunning(IMixedRealitySpatialObserverDataProvider observer); + + /// + /// Generates a new unique observer id. + /// + /// All s are required to call this method in their initialization. + /// a new unique Id for the observer. + uint GenerateNewObserverId(); + + /// + /// Starts / restarts the spatial observer. + /// + /// This will cause spatial awareness events to resume. + void StartObserver(IMixedRealitySpatialObserverDataProvider observer); + + /// + /// Stops / pauses the spatial observer. + /// + /// This will cause spatial awareness events to be suspended until ResumeObserver is called. + void SuspendObserver(IMixedRealitySpatialObserverDataProvider observer); + + /// + /// List of the spatial observers as detected by the spatial awareness system. + /// + HashSet DetectedSpatialObservers { get; } + + /// + /// Raise the event that a has been detected. + /// + void RaiseSpatialAwarenessObserverDetected(IMixedRealitySpatialObserverDataProvider observer); + + /// + /// Raise the event that a has been lost. + /// + void RaiseSpatialAwarenessObserverLost(IMixedRealitySpatialObserverDataProvider observer); + + #region Mesh Events + + /// + /// The spatial awareness system will call the method to indicate a mesh has been added. + /// + /// + /// The mesh . + /// + /// This method is to be called by implementations of the interface, and not by application code. + /// + void RaiseMeshAdded(IMixedRealitySpatialMeshObserver observer, SpatialMeshObject meshObject); + + /// + /// The spatial awareness system will call the method to indicate an existing mesh has been updated. + /// + /// + /// The mesh . + /// + /// This method is to be called by implementations of the interface, and not by application code. + /// + void RaiseMeshUpdated(IMixedRealitySpatialMeshObserver observer, SpatialMeshObject meshObject); + + /// + /// The spatial awareness system will call the method to indicate an existing mesh has been removed. + /// + /// + /// The mesh . + /// + /// This method is to be called by implementations of the interface, and not by application code. + /// + void RaiseMeshRemoved(IMixedRealitySpatialMeshObserver observer, SpatialMeshObject meshObject); + + #endregion Mesh Events + + #region Surface Finding Events + + /// + /// The spatial awareness system will call the method to indicate a planar surface has been added. + /// + /// + /// Value identifying the surface. + /// The surface . + /// + /// This method is to be called by implementations of the interface, and not by application code. + /// + void RaiseSurfaceAdded(IMixedRealitySurfaceObserver observer, int surfaceId, GameObject surfaceObject); + + /// + /// The spatial awareness system will call the method to indicate an existing planar surface has been updated. + /// + /// + /// Value identifying the surface. + /// The surface . + /// + /// This method is to be called by implementations of the interface, and not by application code. + /// + void RaiseSurfaceUpdated(IMixedRealitySurfaceObserver observer, int surfaceId, GameObject surfaceObject); + + /// + /// The spatial awareness system will call the method to indicate an existing planar surface has been removed. + /// + /// + /// Value identifying the surface. + /// + /// This method is to be called by implementations of the interface, and not by application code. + /// + void RaiseSurfaceRemoved(IMixedRealitySurfaceObserver observer, int surfaceId); + + #endregion Surface Finding Events + } +} diff --git a/Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs.meta b/Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs.meta new file mode 100644 index 000000000..bb3967ac1 --- /dev/null +++ b/Interfaces/SpatialAwareness/IMixedRealitySpatialAwarenessSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 681b083370694bf1a10499ad8f70ea0c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/TeleportSystem.meta b/Interfaces/TeleportSystem.meta new file mode 100644 index 000000000..0c5743fb4 --- /dev/null +++ b/Interfaces/TeleportSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 99e8b661f1b84454a1b520d427b1da76 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/TeleportSystem/Handlers.meta b/Interfaces/TeleportSystem/Handlers.meta new file mode 100644 index 000000000..66c05fe13 --- /dev/null +++ b/Interfaces/TeleportSystem/Handlers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b2331f32fa94ad695ae9a67ff95aa70 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs b/Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs new file mode 100644 index 000000000..6e6aa82e8 --- /dev/null +++ b/Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs @@ -0,0 +1,35 @@ +using UnityEngine.EventSystems; +using XRTK.EventDatum.Teleport; + +namespace XRTK.Interfaces.TeleportSystem +{ + /// + /// Interface to implement for teleport events. + /// + public interface IMixedRealityTeleportHandler : IEventSystemHandler + { + /// + /// Raised when a pointer requests a teleport target, but no teleport has begun. + /// + /// + void OnTeleportRequest(TeleportEventData eventData); + + /// + /// Raised when a teleport has started. + /// + /// + void OnTeleportStarted(TeleportEventData eventData); + + /// + /// Raised when a teleport has successfully completed. + /// + /// + void OnTeleportCompleted(TeleportEventData eventData); + + /// + /// Raised when a teleport request has been canceled. + /// + /// + void OnTeleportCanceled(TeleportEventData eventData); + } +} diff --git a/Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs.meta b/Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs.meta new file mode 100644 index 000000000..ea10fbb77 --- /dev/null +++ b/Interfaces/TeleportSystem/Handlers/IMixedRealityTeleportHandler.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0a66eec636b64dc6836db110c7cb4075 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs b/Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs new file mode 100644 index 000000000..7e991a747 --- /dev/null +++ b/Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs @@ -0,0 +1,44 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; + +namespace XRTK.Interfaces.TeleportSystem +{ + public interface IMixedRealityTeleportHotSpot + { + /// + /// The position the teleport will end at. + /// + Vector3 Position { get; } + + /// + /// The normal of the teleport raycast. + /// + Vector3 Normal { get; } + + /// + /// Is the teleport target active? + /// + bool IsActive { get; } + + /// + /// Should the target orientation be overridden? + /// + bool OverrideTargetOrientation { get; } + + /// + /// Should the destination orientation be overridden? + /// Useful when you want to orient the user in a specific direction when they teleport to this position. + /// + /// + /// Override orientation is the transform forward of the GameObject this component is attached to. + /// + float TargetOrientation { get; } + + /// + /// Returns the reference for this teleport target. + /// + GameObject GameObjectReference { get; } + } +} \ No newline at end of file diff --git a/Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs.meta b/Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs.meta new file mode 100644 index 000000000..cf9317541 --- /dev/null +++ b/Interfaces/TeleportSystem/IMixedRealityTeleportHotSpot.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ba887e6af7d14e6a88cd8076bcda85ed +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs b/Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs new file mode 100644 index 000000000..1a0a22def --- /dev/null +++ b/Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs @@ -0,0 +1,41 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Interfaces.Events; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Interfaces.TeleportSystem +{ + /// + /// Manager interface for a Teleport system in the Mixed Reality Toolkit + /// All replacement systems for providing Teleportation functionality should derive from this interface + /// + public interface IMixedRealityTeleportSystem : IMixedRealityEventSystem + { + /// + /// The duration of the teleport in seconds. + /// + float TeleportDuration { get; set; } + + /// + /// Raise a teleportation request event. + /// + /// The pointer that raised the event. + /// The teleport target + void RaiseTeleportRequest(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot); + + /// + /// Raise a teleportation started event. + /// + /// The pointer that raised the event. + /// The teleport target + void RaiseTeleportStarted(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot); + + /// + /// Raise a teleportation canceled event. + /// + /// The pointer that raised the event. + /// The teleport target + void RaiseTeleportCanceled(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot); + } +} diff --git a/Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs.meta b/Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs.meta new file mode 100644 index 000000000..60ba6e8e9 --- /dev/null +++ b/Interfaces/TeleportSystem/IMixedRealityTeleportSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: cd0cf38339ac457dbc7e461a1b5265a5 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/LICENSE.md b/LICENSE.md new file mode 100644 index 000000000..321ba6bb4 --- /dev/null +++ b/LICENSE.md @@ -0,0 +1,22 @@ +MIT License + +Copyright (c) 2019 Microsoft Corporation +Copyright (c) 2019 XRTK + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/LICENSE.md.meta b/LICENSE.md.meta new file mode 100644 index 000000000..a21e386fb --- /dev/null +++ b/LICENSE.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: 940f70a7ae552e14e9ea7da7c03bc070 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers.meta b/Providers.meta new file mode 100644 index 000000000..5f1d9f987 --- /dev/null +++ b/Providers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: db84fae3bfe548fe9c84cb4fa9ce1eb8 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers.meta b/Providers/Controllers.meta new file mode 100644 index 000000000..de3c38d67 --- /dev/null +++ b/Providers/Controllers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 95d6f224a37841038775bca432723792 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/BaseController.cs b/Providers/Controllers/BaseController.cs new file mode 100644 index 000000000..1edbb6287 --- /dev/null +++ b/Providers/Controllers/BaseController.cs @@ -0,0 +1,291 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Threading.Tasks; +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Services; +using XRTK.Utilities.Gltf.Serialization; + +namespace XRTK.Providers.Controllers +{ + /// + /// Base Controller class to inherit from for all controllers. + /// + public abstract class BaseController : IMixedRealityController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + protected BaseController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + { + TrackingState = trackingState; + ControllerHandedness = controllerHandedness; + InputSource = inputSource; + Interactions = interactions; + + IsPositionAvailable = false; + IsPositionApproximate = false; + IsRotationAvailable = false; + + Enabled = true; + } + + /// + /// The default interactions for this controller. + /// + public virtual MixedRealityInteractionMapping[] DefaultInteractions { get; } = null; + + /// + /// The Default Left Handed interactions for this controller. + /// + public virtual MixedRealityInteractionMapping[] DefaultLeftHandedInteractions { get; } = null; + + /// + /// The Default Right Handed interactions for this controller. + /// + public virtual MixedRealityInteractionMapping[] DefaultRightHandedInteractions { get; } = null; + + #region IMixedRealityController Implementation + + /// + public bool Enabled { get; set; } + + /// + public TrackingState TrackingState { get; protected set; } + + /// + public Handedness ControllerHandedness { get; } + + /// + public IMixedRealityInputSource InputSource { get; } + + /// + public IMixedRealityControllerVisualizer Visualizer { get; private set; } + + /// + public bool IsPositionAvailable { get; protected set; } + + /// + public bool IsPositionApproximate { get; protected set; } + + /// + public bool IsRotationAvailable { get; protected set; } + + /// + public MixedRealityInteractionMapping[] Interactions { get; private set; } = null; + + #endregion IMixedRealityController Implementation + + /// + /// Setups up the configuration based on the Mixed Reality Controller Mapping Profile. + /// + /// + public bool SetupConfiguration(Type controllerType) + { + if (controllerType == null) + { + Debug.LogError("controllerType cannot be null"); + return false; + } + + // We can only enable controller profiles if mappings exist. + var controllerMappings = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.ControllerMappingProfiles.MixedRealityControllerMappings; + + // Have to test that a controller type has been registered in the profiles, + // else it's Unity Input manager mappings will not have been setup by the inspector + bool profileFound = false; + + for (int i = 0; i < controllerMappings?.Count; i++) + { + // Assign any known interaction mappings. + if (controllerMappings[i].ControllerType?.Type == controllerType && + controllerMappings[i].Handedness == ControllerHandedness && + controllerMappings[i].Interactions.Length > 0) + { + var profileInteractions = controllerMappings[i].Interactions; + var newInteractions = new MixedRealityInteractionMapping[profileInteractions.Length]; + + for (int j = 0; j < profileInteractions.Length; j++) + { + newInteractions[j] = new MixedRealityInteractionMapping(profileInteractions[j]); + } + + AssignControllerMappings(controllerMappings[i].Interactions); + profileFound = true; + + // If no controller mappings found, warn the user. Does not stop the project from running. + if (Interactions == null || Interactions.Length < 1) + { + SetupDefaultInteractions(ControllerHandedness); + + // We still don't have controller mappings, so this may be a custom controller. + if (Interactions == null || Interactions.Length < 1) + { + Debug.LogWarning($"No Controller interaction mappings found for {controllerMappings[i].Description}!\nThe default interactions were assigned."); + } + } + + break; + } + } + + if (!profileFound) + { + Debug.LogWarning($"No controller profile found for type {controllerType.Name}, please ensure all controllers are defined in the configured MixedRealityControllerConfigurationProfile."); + return false; + } + + return true; + } + + /// + /// Assign the default interactions based on controller handedness if necessary. + /// + /// + public abstract void SetupDefaultInteractions(Handedness controllerHandedness); + + /// + /// Load the Interaction mappings for this controller from the configured Controller Mapping profile + /// + /// Configured mappings from a controller mapping profile + public void AssignControllerMappings(MixedRealityInteractionMapping[] mappings) => Interactions = mappings; + + /// + /// Attempts to load the controller model render settings from the + /// to render the controllers in the scene. + /// + /// The controller type. + /// The raw binary glb data of the controller model, typically loaded from the driver. + /// True, if controller model is being properly rendered. + internal async void TryRenderControllerModel(Type controllerType, byte[] glbData = null) => await TryRenderControllerModelAsync(controllerType, glbData); + + /// + /// Attempts to load the controller model render settings from the + /// to render the controllers in the scene. + /// + /// The controller type. + /// Should the visualizer be assigned the alternate pose actions? + /// The raw binary glb data of the controller model, typically loaded from the driver. + internal async void TryRenderControllerModel(Type controllerType, bool useAlternatePoseAction, byte[] glbData = null) => await TryRenderControllerModelAsync(controllerType, glbData, useAlternatePoseAction); + + /// + /// Attempts to load the controller model render settings from the + /// to render the controllers in the scene. + /// + /// The controller type. + /// The raw binary glb data of the controller model, typically loaded from the driver. + /// Should the visualizer be assigned the alternate pose actions? + /// True, if controller model is being properly rendered. + internal async Task TryRenderControllerModelAsync(Type controllerType, byte[] glbData = null, bool useAlternatePoseAction = false) + { + var visualizationProfile = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.ControllerVisualizationProfile; + + if (visualizationProfile == null) + { + Debug.LogError("Missing ControllerVisualizationProfile!"); + return; + } + + if (!visualizationProfile.RenderMotionControllers) { return; } + + GameObject controllerModel = null; + + // If a specific controller template wants to override the global model, assign that instead. + if (!visualizationProfile.UseDefaultModels) + { + controllerModel = visualizationProfile.GetControllerModelOverride(controllerType, ControllerHandedness); + } + + // Attempt to load the controller model from glbData. + if (controllerModel == null && glbData != null) + { + var gltfObject = GltfUtility.GetGltfObjectFromGlb(glbData); + await gltfObject.ConstructAsync(); + controllerModel = gltfObject.GameObjectReference; + controllerModel.name = $"{controllerType.Name}_Visualization"; + controllerModel.transform.SetParent(MixedRealityToolkit.Instance.MixedRealityPlayspace.transform); + var visualizationType = visualizationProfile.GetControllerVisualizationTypeOverride(controllerType, ControllerHandedness) ?? + visualizationProfile.ControllerVisualizationType; + controllerModel.AddComponent(visualizationType.Type); + Visualizer = controllerModel.GetComponent(); + + if (Visualizer != null) + { + Visualizer.Controller = this; + SetupController(Visualizer); + return; // Nothing left to do; + } + + Debug.LogWarning($"Failed to attach a valid IMixedRealityControllerVisualizer to {controllerModel.name}"); + } + + // If we didn't get an override model, and we didn't load the driver model, + // then get the global controller model for each hand. + if (controllerModel == null) + { + switch (ControllerHandedness) + { + case Handedness.Left when visualizationProfile.GlobalLeftHandModel != null: + controllerModel = visualizationProfile.GlobalLeftHandModel; + break; + case Handedness.Right when visualizationProfile.GlobalRightHandModel != null: + controllerModel = visualizationProfile.GlobalRightHandModel; + break; + } + } + + // If we've got a controller model prefab, then place it in the scene. + if (controllerModel != null) + { + var controllerObject = UnityEngine.Object.Instantiate(controllerModel, MixedRealityToolkit.Instance.MixedRealityPlayspace); + controllerObject.name = $"{controllerType.Name}_{controllerObject.name}"; + Visualizer = controllerObject.GetComponent(); + + if (Visualizer != null) + { + Visualizer.Controller = this; + SetupController(Visualizer); + } + else + { + Debug.LogError($"{controllerObject.name} is missing a IMixedRealityControllerVisualizer component!"); + } + } + + if (Visualizer == null) + { + Debug.LogError("Failed to render controller model!"); + } + + void SetupController(IMixedRealityControllerVisualizer visualizer) + { + if (!useAlternatePoseAction && + visualizationProfile.TryGetControllerPose(controllerType, ControllerHandedness, out MixedRealityInputAction poseAction)) + { + visualizer.UseSourcePoseData = false; + visualizer.PoseAction = poseAction; + } + else if (useAlternatePoseAction && + visualizationProfile.TryGetControllerPoseOverride(controllerType, ControllerHandedness, out MixedRealityInputAction altPoseAction)) + { + visualizer.UseSourcePoseData = false; + visualizer.PoseAction = altPoseAction; + } + else + { + Debug.LogError("Failed to get pose actions for controller visual."); + } + } + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/BaseController.cs.meta b/Providers/Controllers/BaseController.cs.meta new file mode 100644 index 000000000..d0838869a --- /dev/null +++ b/Providers/Controllers/BaseController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0362546017f6470eac0a28aecb16ca83 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/BaseControllerDataProvider.cs b/Providers/Controllers/BaseControllerDataProvider.cs new file mode 100644 index 000000000..909b4a919 --- /dev/null +++ b/Providers/Controllers/BaseControllerDataProvider.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; +using Object = UnityEngine.Object; + +namespace XRTK.Providers.Controllers +{ + /// + /// Base controller data provider to inherit from when implementing s + /// + public abstract class BaseControllerDataProvider : BaseDataProvider, IMixedRealityControllerDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + public BaseControllerDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) : base(name, priority) { } + + /// + public virtual IMixedRealityController[] GetActiveControllers() => new IMixedRealityController[0]; + + /// + /// Request an array of pointers for the controller type. + /// + /// The controller type making the request for pointers. + /// The handedness of the controller making the request. + /// Only register pointers with a specific type. + /// + protected virtual IMixedRealityPointer[] RequestPointers(SystemType controllerType, Handedness controllingHand, bool useSpecificType = false) + { + var pointers = new List(); + + if (MixedRealityToolkit.HasActiveProfile && + MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile != null) + { + for (int i = 0; i < MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.PointerOptions.Length; i++) + { + var pointerProfile = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.PointerOptions[i]; + + if (((useSpecificType && pointerProfile.ControllerType.Type == controllerType.Type) || (!useSpecificType && pointerProfile.ControllerType.Type == null)) && + (pointerProfile.Handedness == Handedness.Any || pointerProfile.Handedness == Handedness.Both || pointerProfile.Handedness == controllingHand)) + { + var pointerObject = Object.Instantiate(pointerProfile.PointerPrefab, MixedRealityToolkit.Instance.MixedRealityPlayspace); + var pointer = pointerObject.GetComponent(); + + if (pointer != null) + { + pointers.Add(pointer); + } + else + { + Debug.LogWarning($"Failed to attach {pointerProfile.PointerPrefab.name} to {controllerType.Type.Name}."); + } + } + } + } + + return pointers.Count == 0 ? null : pointers.ToArray(); + } + } +} diff --git a/Providers/Controllers/BaseControllerDataProvider.cs.meta b/Providers/Controllers/BaseControllerDataProvider.cs.meta new file mode 100644 index 000000000..1ab833d63 --- /dev/null +++ b/Providers/Controllers/BaseControllerDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: e52d3d6d70e94196a08b1cfd6f98da0d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/BaseDictationDataProvider.cs b/Providers/Controllers/BaseDictationDataProvider.cs new file mode 100644 index 000000000..556274cb7 --- /dev/null +++ b/Providers/Controllers/BaseDictationDataProvider.cs @@ -0,0 +1,52 @@ +using System.Threading.Tasks; +using UnityEngine; +using XRTK.Interfaces.Providers.Controllers; + +namespace XRTK.Providers.Controllers +{ + /// + /// Base dictation data provider to use when implementing s + /// + public abstract class BaseDictationDataProvider : BaseControllerDataProvider, IMixedRealityDictationDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + protected BaseDictationDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) + : base(name, priority, profile) + { + } + + #region IMixedRealityDictationDataProvider Implementation + + /// + public virtual bool IsListening { get; protected set; } = false; + + /// + public virtual void StartRecording(GameObject listener = null, float initialSilenceTimeout = 5, float autoSilenceTimeout = 20, int recordingTime = 10, string micDeviceName = "") + { + } + + /// + public virtual Task StartRecordingAsync(GameObject listener = null, float initialSilenceTimeout = 5, float autoSilenceTimeout = 20, int recordingTime = 10, string micDeviceName = "") + { + return null; + } + + /// + public virtual void StopRecording() + { + } + + /// + public virtual Task StopRecordingAsync() + { + return null; + } + + #endregion IMixedRealityDictationDataProvider Implementation + } +} \ No newline at end of file diff --git a/Providers/Controllers/BaseDictationDataProvider.cs.meta b/Providers/Controllers/BaseDictationDataProvider.cs.meta new file mode 100644 index 000000000..e2a22d688 --- /dev/null +++ b/Providers/Controllers/BaseDictationDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 481af6f70bf743e9b2a01adb40d75a84 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/BaseSpeechDataProvider.cs b/Providers/Controllers/BaseSpeechDataProvider.cs new file mode 100644 index 000000000..cd17f4509 --- /dev/null +++ b/Providers/Controllers/BaseSpeechDataProvider.cs @@ -0,0 +1,30 @@ +using XRTK.Interfaces.Providers.Controllers; + +namespace XRTK.Providers.Controllers +{ + /// + /// Base speech data provider to inherit from when implementing s + /// + public abstract class BaseSpeechDataProvider : BaseControllerDataProvider, IMixedRealitySpeechDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + protected BaseSpeechDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) + : base(name, priority, profile) + { + } + + /// + public virtual bool IsRecognitionActive { get; protected set; } = false; + + /// + public virtual void StartRecognition() { } + + /// + public virtual void StopRecognition() { } + } +} \ No newline at end of file diff --git a/Providers/Controllers/BaseSpeechDataProvider.cs.meta b/Providers/Controllers/BaseSpeechDataProvider.cs.meta new file mode 100644 index 000000000..5dad02f9b --- /dev/null +++ b/Providers/Controllers/BaseSpeechDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 35092e79495f48149f55bb976a5c92c1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/MixedRealityControllerMapping.cs b/Providers/Controllers/MixedRealityControllerMapping.cs new file mode 100644 index 000000000..2616dc490 --- /dev/null +++ b/Providers/Controllers/MixedRealityControllerMapping.cs @@ -0,0 +1,121 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; + +namespace XRTK.Providers.Controllers +{ + /// + /// Used to define a controller or other input device's physical buttons, and other attributes. + /// + [Serializable] + public struct MixedRealityControllerMapping + { + /// + /// Constructor. + /// + /// Description of the Device. + /// Controller Type to instantiate at runtime. + /// The designated hand that the device is managing. + /// Details the list of available buttons / interactions available from the device. + public MixedRealityControllerMapping(string description, Type controllerType, Handedness handedness = Handedness.None, bool useCustomInteractionMappings = false) : this() + { + this.description = description; + this.controllerType = new SystemType(controllerType); + this.handedness = handedness; + this.useCustomInteractionMappings = useCustomInteractionMappings; + interactions = null; + } + + [SerializeField] + private string description; + + /// + /// Description of the Device. + /// + public string Description => description; + + [SerializeField] + [Tooltip("Controller type to instantiate at runtime.")] + [Implements(typeof(IMixedRealityController), TypeGrouping.ByNamespaceFlat)] + private SystemType controllerType; + + /// + /// Controller Type to instantiate at runtime. + /// + public SystemType ControllerType => controllerType; + + [SerializeField] + [Tooltip("The designated hand that the device is managing.")] + private Handedness handedness; + + /// + /// The designated hand that the device is managing. + /// + public Handedness Handedness => handedness; + + [SerializeField] + [Tooltip("Override the default interaction mappings.")] + private bool useCustomInteractionMappings; + + /// + /// Is this controller mapping using custom interactions? + /// + public bool HasCustomInteractionMappings => useCustomInteractionMappings; + + [SerializeField] + [Tooltip("Details the list of available buttons / interactions available from the device.")] + private MixedRealityInteractionMapping[] interactions; + + /// + /// Details the list of available buttons / interactions available from the device. + /// + public MixedRealityInteractionMapping[] Interactions => interactions; + + /// + /// Sets the default interaction mapping based on the current controller type. + /// + internal void SetDefaultInteractionMapping(bool overwrite = false) + { + if (Activator.CreateInstance(controllerType, TrackingState.NotTracked, handedness, null, null) is BaseController detectedController && + (interactions == null || interactions.Length == 0 || overwrite)) + { + switch (handedness) + { + case Handedness.Left: + interactions = detectedController.DefaultLeftHandedInteractions; + break; + case Handedness.Right: + interactions = detectedController.DefaultRightHandedInteractions; + break; + default: + interactions = detectedController.DefaultInteractions; + break; + } + } + } + + /// + /// Synchronizes the Input Actions of the same physical controller of a different concrete type. + /// + /// + internal void SynchronizeInputActions(MixedRealityInteractionMapping[] otherControllerMapping) + { + if (otherControllerMapping.Length != interactions.Length) + { + Debug.LogError("Controller Input Actions must be the same length!"); + return; + } + + for (int i = 0; i < interactions.Length; i++) + { + interactions[i].MixedRealityInputAction = otherControllerMapping[i].MixedRealityInputAction; + } + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/MixedRealityControllerMapping.cs.meta b/Providers/Controllers/MixedRealityControllerMapping.cs.meta new file mode 100644 index 000000000..34558e1e7 --- /dev/null +++ b/Providers/Controllers/MixedRealityControllerMapping.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d17cfc2eb72d4df587e7b118cb493fec +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/MixedRealityControllerVisualizationSetting.cs b/Providers/Controllers/MixedRealityControllerVisualizationSetting.cs new file mode 100644 index 000000000..7a72b5650 --- /dev/null +++ b/Providers/Controllers/MixedRealityControllerVisualizationSetting.cs @@ -0,0 +1,130 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Attributes; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; + +namespace XRTK.Providers.Controllers +{ + /// + /// Used to define a controller's visualization settings. + /// + [Serializable] + public struct MixedRealityControllerVisualizationSetting + { + /// + /// Constructor. + /// + /// Description of the Device. + /// Controller Type to instantiate at runtime. + /// The designated hand that the device is managing. + /// The controller model prefab to be rendered. + /// The type to use for this controller setting. + /// The pose to use for tracking the controller. + /// The alternate pose action to use for certain controller variants. + public MixedRealityControllerVisualizationSetting(string description, Type controllerType, Handedness handedness = Handedness.None, GameObject overrideModel = null, SystemType controllerVisualizationType = null, MixedRealityInputAction poseAction = default, MixedRealityInputAction alternatePoseAction = default) : this() + { + this.description = description; + this.controllerType = new SystemType(controllerType); + this.handedness = handedness; + this.overrideModel = overrideModel; + this.controllerVisualizationType = controllerVisualizationType; + + if (poseAction == default) + { + poseAction = MixedRealityInputAction.None; + } + + this.poseAction = poseAction; + + if (alternatePoseAction == default) + { + alternatePoseAction = MixedRealityInputAction.None; + } + + this.alternatePoseAction = alternatePoseAction; + useDefaultModel = false; + } + + [SerializeField] + private string description; + + /// + /// Description of the Device. + /// + public string Description => description; + + [SerializeField] + [Tooltip("Controller type to instantiate at runtime.")] + [Implements(typeof(IMixedRealityController), TypeGrouping.ByNamespaceFlat)] + private SystemType controllerType; + + /// + /// Controller Type to instantiate at runtime. + /// + public SystemType ControllerType => controllerType; + + [SerializeField] + [Tooltip("The designated hand that the device is managing.")] + private Handedness handedness; + + /// + /// The designated hand that the device is managing. + /// + public Handedness Handedness => handedness; + + [SerializeField] + [Tooltip("Use the platform SDK to load the default controller model for this controller.")] + private bool useDefaultModel; + + /// + /// User the controller model loader provided by the SDK, or provide override models. + /// + public bool UseDefaultModel => useDefaultModel; + + [SerializeField] + [Tooltip("An override model to display for this specific controller.")] + private GameObject overrideModel; + + /// + /// The controller model prefab to be rendered. + /// + public GameObject OverrideControllerModel => overrideModel; + + [SerializeField] + [Implements(typeof(IMixedRealityControllerVisualizer), TypeGrouping.ByNamespaceFlat)] + [Tooltip("The concrete Controller Visualizer component to use on the rendered controller model.")] + private SystemType controllerVisualizationType; + + /// + /// The concrete Controller Visualizer component to use on the rendered controller model + /// + public SystemType ControllerVisualizationType + { + get => controllerVisualizationType; + private set => controllerVisualizationType = value; + } + + [SerializeField] + [Tooltip("The MixedRealityInputAction pose to use for tracking the controller.")] + private MixedRealityInputAction poseAction; + + /// + /// The pose to use for tracking the controller. + /// + public MixedRealityInputAction PoseAction => poseAction; + + [SerializeField] + [Tooltip("The alternate pose action to use for certain controller variants.")] + private MixedRealityInputAction alternatePoseAction; + + /// + /// The alternate pose action to use for certain controller variants. + /// + public MixedRealityInputAction AlternatePoseAction => alternatePoseAction; + } +} \ No newline at end of file diff --git a/Providers/Controllers/MixedRealityControllerVisualizationSetting.cs.meta b/Providers/Controllers/MixedRealityControllerVisualizationSetting.cs.meta new file mode 100644 index 000000000..a0d5bb138 --- /dev/null +++ b/Providers/Controllers/MixedRealityControllerVisualizationSetting.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 06a3a3e295e043e889f00676f225a564 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR.meta b/Providers/Controllers/OpenVR.meta new file mode 100644 index 000000000..77448bc62 --- /dev/null +++ b/Providers/Controllers/OpenVR.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 80be6742373f41dd8cb22d55264fd6c6 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/GenericOpenVRController.cs b/Providers/Controllers/OpenVR/GenericOpenVRController.cs new file mode 100644 index 000000000..91295454c --- /dev/null +++ b/Providers/Controllers/OpenVR/GenericOpenVRController.cs @@ -0,0 +1,219 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.XR; +using XRTK.Providers.Controllers.UnityInput; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; + +namespace XRTK.Providers.Controllers.OpenVR +{ + public class GenericOpenVRController : GenericJoystickController + { + public GenericOpenVRController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + nodeType = controllerHandedness == Handedness.Left ? XRNode.LeftHand : XRNode.RightHand; + } + + private XRNode nodeType; + + /// + /// The current source state reading for this OpenVR Controller. + /// + public XRNodeState LastXrNodeStateReading { get; protected set; } + + /// + /// Tracking states returned from the InputTracking state tracking manager + /// + private readonly List nodeStates = new List(); + + public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[] + { + // Controller Pose + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + // HTC Vive Controller - Left Controller Trigger (7) Squeeze + // Oculus Touch Controller - Axis1D.PrimaryIndexTrigger Squeeze + // Valve Knuckles Controller - Left Controller Trigger Squeeze + // Windows Mixed Reality Controller - Left Trigger Squeeze + new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + // HTC Vive Controller - Left Controller Trigger (7) + // Oculus Touch Controller - Axis1D.PrimaryIndexTrigger + // Valve Knuckles Controller - Left Controller Trigger + // Windows Mixed Reality Controller - Left Trigger Press (Select) + new MixedRealityInteractionMapping(2, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14), + // HTC Vive Controller - Left Controller Trigger (7) + // Oculus Touch Controller - Axis1D.PrimaryIndexTrigger + // Valve Knuckles Controller - Left Controller Trigger + new MixedRealityInteractionMapping(3, "Trigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_9), + // HTC Vive Controller - Left Controller Grip Button (8) + // Oculus Touch Controller - Axis1D.PrimaryHandTrigger + // Valve Knuckles Controller - Left Controller Grip Average + // Windows Mixed Reality Controller - Left Grip Button Press + new MixedRealityInteractionMapping(4, "Grip Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_11), + // HTC Vive Controller - Left Controller Trackpad (2) + // Oculus Touch Controller - Axis2D.PrimaryThumbstick + // Valve Knuckles Controller - Left Controller Trackpad + // Windows Mixed Reality Controller - Left Thumbstick Position + new MixedRealityInteractionMapping(5, "Trackpad-Thumbstick Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, false, true), + // HTC Vive Controller - Left Controller Trackpad (2) + // Oculus Touch Controller - Button.PrimaryThumbstick + // Valve Knuckles Controller - Left Controller Trackpad + // Windows Mixed Reality Controller - Left Touchpad Touch + new MixedRealityInteractionMapping(6, "Trackpad-Thumbstick Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton16), + // HTC Vive Controller - Left Controller Trackpad (2) + // Oculus Touch Controller - Button.PrimaryThumbstick + // Valve Knuckles Controller - Left Controller Trackpad + // Windows Mixed Reality Controller - Left Touchpad Press + new MixedRealityInteractionMapping(7, "Trackpad-Thumbstick Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton8), + // HTC Vive Controller - Left Controller Menu Button (1) + // Oculus Touch Controller - Button.Three Press + // Valve Knuckles Controller - Left Controller Inner Face Button + // Windows Mixed Reality Controller - Left Menu Button + new MixedRealityInteractionMapping(8, "Unity Button Id 2", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), + // Oculus Touch Controller - Button.Four Press + // Valve Knuckles Controller - Left Controller Outer Face Button + new MixedRealityInteractionMapping(9, "Unity Button Id 3", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton3), + new MixedRealityInteractionMapping(10, "WMR Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton18), + new MixedRealityInteractionMapping(11, "WMR Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_17, ControllerMappingLibrary.AXIS_18), + }; + + public override MixedRealityInteractionMapping[] DefaultRightHandedInteractions => new[] + { + // Controller Pose + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + // HTC Vive Controller - Right Controller Trigger (7) Squeeze + // Oculus Touch Controller - Axis1D.SecondaryIndexTrigger Squeeze + // Valve Knuckles Controller - Right Controller Trigger Squeeze + // Windows Mixed Reality Controller - Right Trigger Squeeze + new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + // HTC Vive Controller - Right Controller Trigger (7) + // Oculus Touch Controller - Axis1D.SecondaryIndexTrigger + // Valve Knuckles Controller - Right Controller Trigger + // Windows Mixed Reality Controller - Right Trigger Press (Select) + new MixedRealityInteractionMapping(2, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton15), + // HTC Vive Controller - Right Controller Trigger (7) + // Oculus Touch Controller - Axis1D.SecondaryIndexTrigger + // Valve Knuckles Controller - Right Controller Trigger + new MixedRealityInteractionMapping(3, "Trigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_10), + // HTC Vive Controller - Right Controller Grip Button (8) + // Oculus Touch Controller - Axis1D.SecondaryHandTrigger + // Valve Knuckles Controller - Right Controller Grip Average + // Windows Mixed Reality Controller - Right Grip Button Press + new MixedRealityInteractionMapping(4, "Grip Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_12), + // HTC Vive Controller - Right Controller Trackpad (2) + // Oculus Touch Controller - Axis2D.PrimaryThumbstick + // Valve Knuckles Controller - Right Controller Trackpad + // Windows Mixed Reality Controller - Right Thumbstick Position + new MixedRealityInteractionMapping(5, "Trackpad-Thumbstick Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, false, true), + // HTC Vive Controller - Right Controller Trackpad (2) + // Oculus Touch Controller - Button.SecondaryThumbstick + // Valve Knuckles Controller - Right Controller Trackpad + // Windows Mixed Reality Controller - Right Touchpad Touch + new MixedRealityInteractionMapping(6, "Trackpad-Thumbstick Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton17), + // HTC Vive Controller - Right Controller Trackpad (2) + // Oculus Touch Controller - Button.SecondaryThumbstick + // Valve Knuckles Controller - Right Controller Trackpad + // Windows Mixed Reality Controller - Right Touchpad Press + new MixedRealityInteractionMapping(7, "Trackpad-Thumbstick Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton9), + // HTC Vive Controller - Right Controller Menu Button (1) + // Oculus Remote - Button.One Press + // Oculus Touch Controller - Button.One Press + // Valve Knuckles Controller - Right Controller Inner Face Button + // Windows Mixed Reality Controller - Right Menu Button + new MixedRealityInteractionMapping(8, "Unity Button Id 0", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + // Oculus Remote - Button.Two Press + // Oculus Touch Controller - Button.Two Press + // Valve Knuckles Controller - Right Controller Outer Face Button + new MixedRealityInteractionMapping(9, "Unity Button Id 1", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton1), + new MixedRealityInteractionMapping(10, "WMR Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton19), + new MixedRealityInteractionMapping(11, "WMR Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_19, ControllerMappingLibrary.AXIS_20), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(controllerHandedness == Handedness.Left ? DefaultLeftHandedInteractions : DefaultRightHandedInteractions); + } + + /// + public override void UpdateController() + { + if (!Enabled) { return; } + + InputTracking.GetNodeStates(nodeStates); + + for (int i = 0; i < nodeStates.Count; i++) + { + if (nodeStates[i].nodeType == nodeType) + { + var xrNodeState = nodeStates[i]; + UpdateControllerData(xrNodeState); + LastXrNodeStateReading = xrNodeState; + break; + } + } + + base.UpdateController(); + } + + /// + /// Update the "Controller" input from the device + /// + /// + protected void UpdateControllerData(XRNodeState state) + { + var lastState = TrackingState; + + LastControllerPose = CurrentControllerPose; + + if (nodeType == XRNode.LeftHand || nodeType == XRNode.RightHand) + { + // The source is either a hand or a controller that supports pointing. + // We can now check for position and rotation. + IsPositionAvailable = state.TryGetPosition(out CurrentControllerPosition); + IsPositionApproximate = false; + + IsRotationAvailable = state.TryGetRotation(out CurrentControllerRotation); + + // Devices are considered tracked if we receive position OR rotation data from the sensors. + TrackingState = (IsPositionAvailable || IsRotationAvailable) ? Definitions.Devices.TrackingState.Tracked : Definitions.Devices.TrackingState.NotTracked; + } + else + { + // The input source does not support tracking. + TrackingState = Definitions.Devices.TrackingState.NotApplicable; + } + + CurrentControllerPose.Position = CurrentControllerPosition; + CurrentControllerPose.Rotation = CurrentControllerRotation; + + // Raise input system events if it is enabled. + if (lastState != TrackingState) + { + MixedRealityToolkit.InputSystem?.RaiseSourceTrackingStateChanged(InputSource, this, TrackingState); + } + + if (TrackingState == Definitions.Devices.TrackingState.Tracked && LastControllerPose != CurrentControllerPose) + { + if (IsPositionAvailable && IsRotationAvailable) + { + MixedRealityToolkit.InputSystem?.RaiseSourcePoseChanged(InputSource, this, CurrentControllerPose); + } + else if (IsPositionAvailable && !IsRotationAvailable) + { + MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, CurrentControllerPosition); + } + else if (!IsPositionAvailable && IsRotationAvailable) + { + MixedRealityToolkit.InputSystem?.RaiseSourceRotationChanged(InputSource, this, CurrentControllerRotation); + } + } + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/OpenVR/GenericOpenVRController.cs.meta b/Providers/Controllers/OpenVR/GenericOpenVRController.cs.meta new file mode 100644 index 000000000..d3b94b1b2 --- /dev/null +++ b/Providers/Controllers/OpenVR/GenericOpenVRController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 2053e9f0d2c0489f9be58fcfd46f18f8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/OculusRemoteController.cs b/Providers/Controllers/OpenVR/OculusRemoteController.cs new file mode 100644 index 000000000..f4b4f80b8 --- /dev/null +++ b/Providers/Controllers/OpenVR/OculusRemoteController.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Providers.Controllers.OpenVR +{ + public class OculusRemoteController : GenericOpenVRController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public OculusRemoteController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + public override MixedRealityInteractionMapping[] DefaultInteractions => new[] + { + new MixedRealityInteractionMapping(0, "D-Pad Position", AxisType.DualAxis, DeviceInputType.DirectionalPad, ControllerMappingLibrary.AXIS_5, ControllerMappingLibrary.AXIS_6), + new MixedRealityInteractionMapping(1, "Button.One", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(2, "Button.Two", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton1), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(DefaultInteractions); + } + } +} diff --git a/Providers/Controllers/OpenVR/OculusRemoteController.cs.meta b/Providers/Controllers/OpenVR/OculusRemoteController.cs.meta new file mode 100644 index 000000000..22f3451a9 --- /dev/null +++ b/Providers/Controllers/OpenVR/OculusRemoteController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 635958c70e4b477f96b531edd11621e2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/OculusTouchController.cs b/Providers/Controllers/OpenVR/OculusTouchController.cs new file mode 100644 index 000000000..034ca9bfb --- /dev/null +++ b/Providers/Controllers/OpenVR/OculusTouchController.cs @@ -0,0 +1,76 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Providers.Controllers.OpenVR +{ + public class OculusTouchController : GenericOpenVRController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public OculusTouchController(TrackingState trackingState, Handedness controllerHandedness, + IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Axis1D.PrimaryIndexTrigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(2, "Axis1D.PrimaryIndexTrigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, KeyCode.JoystickButton14), + new MixedRealityInteractionMapping(3, "Axis1D.PrimaryIndexTrigger Near Touch", AxisType.Digital, DeviceInputType.TriggerNearTouch, ControllerMappingLibrary.AXIS_13), + new MixedRealityInteractionMapping(4, "Axis1D.PrimaryIndexTrigger Press", AxisType.Digital, DeviceInputType.TriggerPress, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(5, "Axis1D.PrimaryHandTrigger Press", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_11), + new MixedRealityInteractionMapping(6, "Axis2D.PrimaryThumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2), + new MixedRealityInteractionMapping(7, "Button.PrimaryThumbstick Touch", AxisType.Digital, DeviceInputType.ThumbStickTouch, KeyCode.JoystickButton16), + new MixedRealityInteractionMapping(8, "Button.PrimaryThumbstick Near Touch", AxisType.Digital, DeviceInputType.ThumbNearTouch, ControllerMappingLibrary.AXIS_15), + new MixedRealityInteractionMapping(9, "Button.PrimaryThumbstick Press", AxisType.Digital, DeviceInputType.ThumbStickPress, KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(10, "Button.Three Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), + new MixedRealityInteractionMapping(11, "Button.Four Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton3), + new MixedRealityInteractionMapping(12, "Button.Start Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton7), + new MixedRealityInteractionMapping(13, "Button.Three Touch", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton12), + new MixedRealityInteractionMapping(14, "Button.Four Touch", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton13), + new MixedRealityInteractionMapping(15, "Touch.PrimaryThumbRest Touch", AxisType.Digital, DeviceInputType.ThumbTouch, KeyCode.JoystickButton18), + new MixedRealityInteractionMapping(16, "Touch.PrimaryThumbRest Near Touch", AxisType.Digital, DeviceInputType.ThumbNearTouch, ControllerMappingLibrary.AXIS_17) + }; + + /// + public override MixedRealityInteractionMapping[] DefaultRightHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Axis1D.SecondaryIndexTrigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(2, "Axis1D.SecondaryIndexTrigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, KeyCode.JoystickButton15), + new MixedRealityInteractionMapping(3, "Axis1D.SecondaryIndexTrigger Near Touch", AxisType.Digital, DeviceInputType.TriggerNearTouch, ControllerMappingLibrary.AXIS_14), + new MixedRealityInteractionMapping(4, "Axis1D.SecondaryIndexTrigger Press", AxisType.Digital, DeviceInputType.TriggerPress, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(5, "Axis1D.SecondaryHandTrigger Press", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_12), + new MixedRealityInteractionMapping(6, "Axis2D.SecondaryThumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5), + new MixedRealityInteractionMapping(7, "Button.SecondaryThumbstick Touch", AxisType.Digital, DeviceInputType.ThumbStickTouch, KeyCode.JoystickButton17), + new MixedRealityInteractionMapping(8, "Button.SecondaryThumbstick Near Touch", AxisType.Digital, DeviceInputType.ThumbNearTouch, ControllerMappingLibrary.AXIS_16), + new MixedRealityInteractionMapping(9, "Button.SecondaryThumbstick Press", AxisType.Digital, DeviceInputType.ThumbStickPress, KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(10, "Button.One Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(11, "Button.Two Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton1), + new MixedRealityInteractionMapping(12, "Button.One Touch", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton10), + new MixedRealityInteractionMapping(13, "Button.Two Touch", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton11), + new MixedRealityInteractionMapping(14, "Touch.SecondaryThumbRest Touch", AxisType.Digital, DeviceInputType.ThumbTouch, KeyCode.JoystickButton19), + new MixedRealityInteractionMapping(15, "Touch.SecondaryThumbRest Near Touch", AxisType.Digital, DeviceInputType.ThumbNearTouch, ControllerMappingLibrary.AXIS_18) + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(controllerHandedness == Handedness.Left ? DefaultLeftHandedInteractions : DefaultRightHandedInteractions); + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/OpenVR/OculusTouchController.cs.meta b/Providers/Controllers/OpenVR/OculusTouchController.cs.meta new file mode 100644 index 000000000..1fb645559 --- /dev/null +++ b/Providers/Controllers/OpenVR/OculusTouchController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 78ce43bae2e148b0b28381b056ed72e3 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/OpenVRDataProvider.cs b/Providers/Controllers/OpenVR/OpenVRDataProvider.cs new file mode 100644 index 000000000..f20b2eb64 --- /dev/null +++ b/Providers/Controllers/OpenVR/OpenVRDataProvider.cs @@ -0,0 +1,153 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using XRTK.Providers.Controllers.UnityInput; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Services; + +namespace XRTK.Providers.Controllers.OpenVR +{ + /// + /// Manages Open VR Devices using unity's input system. + /// + public class OpenVRDataProvider : UnityJoystickDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + public OpenVRDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) + : base(name, priority, profile) + { + } + + #region Controller Utilities + + /// + protected override GenericJoystickController GetOrAddController(string joystickName) + { + // If a device is already registered with the ID provided, just return it. + if (ActiveControllers.ContainsKey(joystickName)) + { + var controller = ActiveControllers[joystickName]; + Debug.Assert(controller != null); + return controller; + } + + Handedness controllingHand; + + if (joystickName.Contains("Left")) + { + controllingHand = Handedness.Left; + } + else if (joystickName.Contains("Right")) + { + controllingHand = Handedness.Right; + } + else + { + controllingHand = Handedness.None; + } + + var currentControllerType = GetCurrentControllerType(joystickName); + Type controllerType; + + switch (currentControllerType) + { + case SupportedControllerType.GenericOpenVR: + controllerType = typeof(GenericOpenVRController); + break; + case SupportedControllerType.ViveWand: + controllerType = typeof(ViveWandController); + break; + case SupportedControllerType.ViveKnuckles: + controllerType = typeof(ViveKnucklesController); + break; + case SupportedControllerType.OculusTouch: + controllerType = typeof(OculusTouchController); + break; + case SupportedControllerType.OculusRemote: + controllerType = typeof(OculusRemoteController); + break; + case SupportedControllerType.WindowsMixedReality: + controllerType = typeof(WindowsMixedRealityOpenVRMotionController); + break; + default: + return null; + } + + var pointers = RequestPointers(controllerType, controllingHand); + var inputSource = MixedRealityToolkit.InputSystem?.RequestNewGenericInputSource($"{currentControllerType} Controller {controllingHand}", pointers); + var detectedController = Activator.CreateInstance(controllerType, TrackingState.NotTracked, controllingHand, inputSource, null) as GenericOpenVRController; + + if (detectedController == null) + { + Debug.LogError($"Failed to create {controllerType.Name} controller"); + return null; + } + + if (!detectedController.SetupConfiguration(controllerType)) + { + // Controller failed to be setup correctly. + // Return null so we don't raise the source detected. + Debug.LogError($"Failed to Setup {controllerType.Name} controller"); + return null; + } + + for (int i = 0; i < detectedController.InputSource?.Pointers?.Length; i++) + { + detectedController.InputSource.Pointers[i].Controller = detectedController; + } + + detectedController.TryRenderControllerModel(controllerType); + + ActiveControllers.Add(joystickName, detectedController); + return detectedController; + } + + /// + protected override SupportedControllerType GetCurrentControllerType(string joystickName) + { + if (string.IsNullOrEmpty(joystickName) || !joystickName.Contains("OpenVR")) + { + return SupportedControllerType.None; + } + + if (joystickName.Contains("Oculus Rift CV1")) + { + return SupportedControllerType.OculusTouch; + } + + if (joystickName.Contains("Oculus remote")) + { + return SupportedControllerType.OculusRemote; + } + + if (joystickName.Contains("Vive Wand")) + { + return SupportedControllerType.ViveWand; + } + + if (joystickName.Contains("Vive Knuckles")) + { + return SupportedControllerType.ViveKnuckles; + } + + if (joystickName.Contains("WindowsMR")) + { + return SupportedControllerType.WindowsMixedReality; + } + + Debug.Log($"{joystickName} does not have a defined controller type, falling back to generic controller type"); + + return SupportedControllerType.GenericOpenVR; + } + + #endregion Controller Utilities + } +} \ No newline at end of file diff --git a/Providers/Controllers/OpenVR/OpenVRDataProvider.cs.meta b/Providers/Controllers/OpenVR/OpenVRDataProvider.cs.meta new file mode 100644 index 000000000..2a78a757c --- /dev/null +++ b/Providers/Controllers/OpenVR/OpenVRDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 55c6c07648a0491c92ab1e0a22978312 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/ViveKnucklesController.cs b/Providers/Controllers/OpenVR/ViveKnucklesController.cs new file mode 100644 index 000000000..2740d2039 --- /dev/null +++ b/Providers/Controllers/OpenVR/ViveKnucklesController.cs @@ -0,0 +1,71 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Providers.Controllers.OpenVR +{ + public class ViveKnucklesController : GenericOpenVRController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public ViveKnucklesController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(2, "Trigger Press", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14), + new MixedRealityInteractionMapping(3, "Trigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(4, "Grip Average", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_11), + new MixedRealityInteractionMapping(5, "Trackpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2), + new MixedRealityInteractionMapping(6, "Trackpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton16), + new MixedRealityInteractionMapping(7, "Trackpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(8, "Inner Face Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), + new MixedRealityInteractionMapping(9, "Outer Face Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton3), + new MixedRealityInteractionMapping(10, "Index Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.IndexFinger, ControllerMappingLibrary.AXIS_20), + new MixedRealityInteractionMapping(11, "Middle Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.MiddleFinger, ControllerMappingLibrary.AXIS_22), + new MixedRealityInteractionMapping(12, "Ring Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.RingFinger, ControllerMappingLibrary.AXIS_24), + new MixedRealityInteractionMapping(13, "Pinky Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.PinkyFinger, ControllerMappingLibrary.AXIS_26), + }; + + + /// + public override MixedRealityInteractionMapping[] DefaultRightHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(2, "Trigger Press", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton15), + new MixedRealityInteractionMapping(3, "Trigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(4, "Grip Average", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_12), + new MixedRealityInteractionMapping(5, "Trackpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5), + new MixedRealityInteractionMapping(6, "Trackpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton17), + new MixedRealityInteractionMapping(7, "Trackpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(8, "Inner Face Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(9, "Outer Face Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton1), + new MixedRealityInteractionMapping(10, "Index Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.IndexFinger, ControllerMappingLibrary.AXIS_21), + new MixedRealityInteractionMapping(11, "Middle Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.MiddleFinger, ControllerMappingLibrary.AXIS_23), + new MixedRealityInteractionMapping(12, "Ring Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.RingFinger, ControllerMappingLibrary.AXIS_25), + new MixedRealityInteractionMapping(13, "Pinky Finger Cap Sensor", AxisType.SingleAxis, DeviceInputType.PinkyFinger, ControllerMappingLibrary.AXIS_27), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(controllerHandedness == Handedness.Left ? DefaultLeftHandedInteractions : DefaultRightHandedInteractions); + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/OpenVR/ViveKnucklesController.cs.meta b/Providers/Controllers/OpenVR/ViveKnucklesController.cs.meta new file mode 100644 index 000000000..d47105eb7 --- /dev/null +++ b/Providers/Controllers/OpenVR/ViveKnucklesController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: a16257d0f75e44edbcfee184bdff7b0f +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/ViveWandController.cs b/Providers/Controllers/OpenVR/ViveWandController.cs new file mode 100644 index 000000000..6bbc37239 --- /dev/null +++ b/Providers/Controllers/OpenVR/ViveWandController.cs @@ -0,0 +1,60 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Providers.Controllers.OpenVR +{ + public class ViveWandController : GenericOpenVRController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public ViveWandController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(2, "Trigger Press", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14), + new MixedRealityInteractionMapping(3, "Trigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(4, "Grip Press", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_11), + new MixedRealityInteractionMapping(5, "Trackpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2), + new MixedRealityInteractionMapping(6, "Trackpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton16), + new MixedRealityInteractionMapping(7, "Trackpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(8, "Menu Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), + }; + + /// + public override MixedRealityInteractionMapping[] DefaultRightHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(2, "Trigger Press", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton15), + new MixedRealityInteractionMapping(3, "Trigger Touch", AxisType.Digital, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(4, "Grip Press", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_12), + new MixedRealityInteractionMapping(5, "Trackpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5), + new MixedRealityInteractionMapping(6, "Trackpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton17), + new MixedRealityInteractionMapping(7, "Trackpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(8, "Menu Button", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(controllerHandedness == Handedness.Left ? DefaultLeftHandedInteractions : DefaultRightHandedInteractions); + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/OpenVR/ViveWandController.cs.meta b/Providers/Controllers/OpenVR/ViveWandController.cs.meta new file mode 100644 index 000000000..6aed2ba62 --- /dev/null +++ b/Providers/Controllers/OpenVR/ViveWandController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4178bf60b82c41c7a5d98af9c9e325c4 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs b/Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs new file mode 100644 index 000000000..66d4152e5 --- /dev/null +++ b/Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs @@ -0,0 +1,70 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Providers.Controllers.OpenVR +{ + /// + /// Open VR Implementation of the Windows Mixed Reality Motion Controllers. + /// + public class WindowsMixedRealityOpenVRMotionController : GenericOpenVRController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public WindowsMixedRealityOpenVRMotionController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + PointerOffsetAngle = -30f; + } + + /// + public override MixedRealityInteractionMapping[] DefaultLeftHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(2, "Grip Press", AxisType.SingleAxis, DeviceInputType.TriggerPress, ControllerMappingLibrary.AXIS_11), + new MixedRealityInteractionMapping(3, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(4, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton14), + new MixedRealityInteractionMapping(5, "Trigger Touch", AxisType.SingleAxis, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(6, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_17, ControllerMappingLibrary.AXIS_18), + new MixedRealityInteractionMapping(7, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton16), + new MixedRealityInteractionMapping(8, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(9, "Menu Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(10, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, false, true), + new MixedRealityInteractionMapping(11, "Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton8), + }; + + /// + public override MixedRealityInteractionMapping[] DefaultRightHandedInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Spatial Pointer", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Spatial Grip", AxisType.SixDof, DeviceInputType.SpatialGrip, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(2, "Grip Press", AxisType.SingleAxis, DeviceInputType.ButtonPress, ControllerMappingLibrary.AXIS_12), + new MixedRealityInteractionMapping(3, "Trigger Position", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(4, "Trigger Press (Select)", AxisType.Digital, DeviceInputType.TriggerPress, KeyCode.JoystickButton15), + new MixedRealityInteractionMapping(5, "Trigger Touch", AxisType.SingleAxis, DeviceInputType.TriggerTouch, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(6, "Touchpad Position", AxisType.DualAxis, DeviceInputType.Touchpad, ControllerMappingLibrary.AXIS_19, ControllerMappingLibrary.AXIS_20), + new MixedRealityInteractionMapping(7, "Touchpad Touch", AxisType.Digital, DeviceInputType.TouchpadTouch, KeyCode.JoystickButton17), + new MixedRealityInteractionMapping(8, "Touchpad Press", AxisType.Digital, DeviceInputType.TouchpadPress, KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(9, "Menu Press", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton2), + new MixedRealityInteractionMapping(10, "Thumbstick Position", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, false, true), + new MixedRealityInteractionMapping(11, "Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress, KeyCode.JoystickButton9), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(controllerHandedness == Handedness.Left ? DefaultLeftHandedInteractions : DefaultRightHandedInteractions); + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs.meta b/Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs.meta new file mode 100644 index 000000000..c08801473 --- /dev/null +++ b/Providers/Controllers/OpenVR/WindowsMixedRealityOpenVRMotionController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7662a40776484d619653e121165301e7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput.meta b/Providers/Controllers/UnityInput.meta new file mode 100644 index 000000000..0cc4ce804 --- /dev/null +++ b/Providers/Controllers/UnityInput.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 76d30f6f95ee42f081614b691842ff1a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/GenericJoystickController.cs b/Providers/Controllers/UnityInput/GenericJoystickController.cs new file mode 100644 index 000000000..eb761c43d --- /dev/null +++ b/Providers/Controllers/UnityInput/GenericJoystickController.cs @@ -0,0 +1,238 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; + +namespace XRTK.Providers.Controllers.UnityInput +{ + public class GenericJoystickController : BaseController + { + public GenericJoystickController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + /// The pointer's offset angle. + /// + public float PointerOffsetAngle { get; protected set; } = 0f; + + private Vector2 dualAxisPosition = Vector2.zero; + protected Vector3 CurrentControllerPosition = Vector3.zero; + protected Quaternion CurrentControllerRotation = Quaternion.identity; + private MixedRealityPose pointerOffsetPose = MixedRealityPose.ZeroIdentity; + protected MixedRealityPose LastControllerPose = MixedRealityPose.ZeroIdentity; + protected MixedRealityPose CurrentControllerPose = MixedRealityPose.ZeroIdentity; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + // Generic unity controller's will not have default interactions + } + + /// + /// Update the controller data from Unity's Input Manager + /// + public virtual void UpdateController() + { + if (!Enabled) { return; } + + if (Interactions == null) + { + Debug.LogError($"No interaction configuration for {GetType().Name}"); + Enabled = false; + } + + for (int i = 0; i < Interactions?.Length; i++) + { + switch (Interactions[i].AxisType) + { + case AxisType.None: + break; + case AxisType.Digital: + UpdateButtonData(Interactions[i]); + break; + case AxisType.SingleAxis: + UpdateSingleAxisData(Interactions[i]); + break; + case AxisType.DualAxis: + UpdateDualAxisData(Interactions[i]); + break; + case AxisType.SixDof: + UpdatePoseData(Interactions[i]); + break; + default: + Debug.LogError($"Input [{Interactions[i].InputType}] is not handled for this controller [{GetType().Name}]"); + break; + } + } + } + + /// + /// Update an Interaction Bool data type from a Bool input + /// + /// + /// Raises an Input System "Input Down" event when the key is down, and raises an "Input Up" when it is released (e.g. a Button) + /// Also raises a "Pressed" event while pressed + /// + protected void UpdateButtonData(MixedRealityInteractionMapping interactionMapping) + { + Debug.Assert(interactionMapping.AxisType == AxisType.Digital); + + var keyButton = Input.GetKey(interactionMapping.KeyCode); + + // Update the interaction data source + interactionMapping.BoolData = keyButton; + + // If our value changed raise it. + if (interactionMapping.Changed) + { + // Raise input system Event if it enabled + if (interactionMapping.BoolData) + { + MixedRealityToolkit.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + else + { + MixedRealityToolkit.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + } + + // If pressed always raise pressed update. + if (interactionMapping.Updated) + { + MixedRealityToolkit.InputSystem?.RaiseOnInputPressed(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + } + + /// + /// Update an Interaction Float data type from a SingleAxis (float) input + /// + /// + /// Raises an Input System "Pressed" event when the float data changes + /// + /// + protected void UpdateSingleAxisData(MixedRealityInteractionMapping interactionMapping) + { + Debug.Assert(interactionMapping.AxisType == AxisType.SingleAxis); + + var singleAxisValue = Input.GetAxis(interactionMapping.AxisCodeX); + float defaultValue = 0f; + + switch (interactionMapping.InputType) + { + case DeviceInputType.TriggerPress: + case DeviceInputType.ButtonPress: + // Update the interaction data source + defaultValue = 1f; + interactionMapping.BoolData = singleAxisValue.Equals(defaultValue); + break; + case DeviceInputType.TriggerTouch: + case DeviceInputType.TriggerNearTouch: + case DeviceInputType.ThumbNearTouch: + case DeviceInputType.IndexFingerNearTouch: + case DeviceInputType.MiddleFingerNearTouch: + case DeviceInputType.RingFingerNearTouch: + case DeviceInputType.PinkyFingerNearTouch: + // Update the interaction data source + interactionMapping.BoolData = !singleAxisValue.Equals(defaultValue); + break; + case DeviceInputType.Trigger: + // Update the interaction data source + interactionMapping.FloatData = singleAxisValue; + + // If our value was updated, raise it. + if (interactionMapping.Updated) + { + // Raise input system Event if it enabled + MixedRealityToolkit.InputSystem?.RaiseOnInputPressed(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.FloatData); + } + return; + default: + Debug.LogWarning($"Unhandled Interaction {interactionMapping.Description}"); + return; + } + + // If our value was updated, raise it. + if (interactionMapping.Changed) + { + // Raise input system Event if it enabled + if (interactionMapping.BoolData) + { + MixedRealityToolkit.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + else + { + MixedRealityToolkit.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction); + } + } + + // If our value was updated, raise it. + if (interactionMapping.Updated) + { + MixedRealityToolkit.InputSystem?.RaiseOnInputPressed(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, singleAxisValue); + } + } + + /// + /// Update the Touchpad / Thumbstick input from the device (in OpenVR, touchpad and thumbstick are the same input control) + /// + /// + protected void UpdateDualAxisData(MixedRealityInteractionMapping interactionMapping) + { + Debug.Assert(interactionMapping.AxisType == AxisType.DualAxis); + + dualAxisPosition.x = Input.GetAxis(interactionMapping.AxisCodeX); + dualAxisPosition.y = Input.GetAxis(interactionMapping.AxisCodeY); + + // Update the interaction data source + interactionMapping.Vector2Data = dualAxisPosition; + + // If our value was updated, raise it. + if (interactionMapping.Updated) + { + // Raise input system Event if it enabled + MixedRealityToolkit.InputSystem?.RaisePositionInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.Vector2Data); + } + } + + /// + /// Update Spatial Pointer Data. + /// + /// + protected void UpdatePoseData(MixedRealityInteractionMapping interactionMapping) + { + Debug.Assert(interactionMapping.AxisType == AxisType.SixDof); + + if (interactionMapping.InputType == DeviceInputType.SpatialPointer) + { + pointerOffsetPose.Position = CurrentControllerPose.Position; + pointerOffsetPose.Rotation = CurrentControllerPose.Rotation * Quaternion.AngleAxis(PointerOffsetAngle, Vector3.left); + + // Update the interaction data source + interactionMapping.PoseData = pointerOffsetPose; + } + else if (interactionMapping.InputType == DeviceInputType.SpatialGrip) + { + // Update the interaction data source + interactionMapping.PoseData = CurrentControllerPose; + } + else + { + Debug.LogWarning($"Unhandled Interaction {interactionMapping.Description}"); + return; + } + + // If our value was updated, raise it. + if (interactionMapping.Updated) + { + // Raise input system Event if it enabled + MixedRealityToolkit.InputSystem?.RaisePoseInputChanged(InputSource, ControllerHandedness, interactionMapping.MixedRealityInputAction, interactionMapping.PoseData); + } + } + } +} diff --git a/Providers/Controllers/UnityInput/GenericJoystickController.cs.meta b/Providers/Controllers/UnityInput/GenericJoystickController.cs.meta new file mode 100644 index 000000000..babafa835 --- /dev/null +++ b/Providers/Controllers/UnityInput/GenericJoystickController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 32a81b5a8484424db4766b0dfc500670 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/MouseController.cs b/Providers/Controllers/UnityInput/MouseController.cs new file mode 100644 index 000000000..04db3b28b --- /dev/null +++ b/Providers/Controllers/UnityInput/MouseController.cs @@ -0,0 +1,148 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; + +namespace XRTK.Providers.Controllers.UnityInput +{ + /// + /// Manages the mouse using unity input system. + /// + public class MouseController : BaseController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public MouseController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + public override MixedRealityInteractionMapping[] DefaultInteractions { get; } = + { + new MixedRealityInteractionMapping(0, "Spatial Mouse Position", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Mouse Delta Position", AxisType.DualAxis, DeviceInputType.PointerPosition, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(2, "Mouse Scroll Position", AxisType.DualAxis, DeviceInputType.Scroll, ControllerMappingLibrary.AXIS_3), + new MixedRealityInteractionMapping(3, "Left Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse0), + new MixedRealityInteractionMapping(4, "Right Mouse Button", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse1), + new MixedRealityInteractionMapping(5, "Mouse Button 2", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse2), + new MixedRealityInteractionMapping(6, "Mouse Button 3", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse3), + new MixedRealityInteractionMapping(7, "Mouse Button 4", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse4), + new MixedRealityInteractionMapping(8, "Mouse Button 5", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse5), + new MixedRealityInteractionMapping(9, "Mouse Button 6", AxisType.Digital, DeviceInputType.ButtonPress, MixedRealityInputAction.None, KeyCode.Mouse6), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(DefaultInteractions); + } + + private MixedRealityPose controllerPose = MixedRealityPose.ZeroIdentity; + private Vector2 mouseDelta; + + /// + /// Update controller. + /// + public void Update() + { + if (!Input.mousePresent) { return; } + + // Bail early if our mouse isn't in our game window. + if (Input.mousePosition.x < 0 || + Input.mousePosition.y < 0 || + Input.mousePosition.x > Screen.width || + Input.mousePosition.y > Screen.height) + { + return; + } + + if (InputSource.Pointers[0].BaseCursor != null) + { + controllerPose.Position = InputSource.Pointers[0].BaseCursor.Position; + controllerPose.Rotation = InputSource.Pointers[0].BaseCursor.Rotation; + } + + // Don't ask me why it's mapped weird. Bc Unity... + mouseDelta.x = -Input.GetAxis("Mouse Y"); + mouseDelta.y = Input.GetAxis("Mouse X"); + MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, mouseDelta); + MixedRealityToolkit.InputSystem?.RaiseSourcePoseChanged(InputSource, this, controllerPose); + MixedRealityToolkit.InputSystem?.RaiseSourcePositionChanged(InputSource, this, Input.mouseScrollDelta); + + for (int i = 0; i < Interactions?.Length; i++) + { + if (Interactions[i].InputType == DeviceInputType.SpatialPointer) + { + Interactions[i].PoseData = controllerPose; + + // If our value was updated, raise it. + if (Interactions[i].Updated) + { + MixedRealityToolkit.InputSystem?.RaisePoseInputChanged(InputSource, Interactions[i].MixedRealityInputAction, Interactions[i].PoseData); + } + } + + if (Interactions[i].InputType == DeviceInputType.PointerPosition) + { + Interactions[i].Vector2Data = mouseDelta; + + // If our value was updated, raise it. + if (Interactions[i].Updated) + { + MixedRealityToolkit.InputSystem?.RaisePositionInputChanged(InputSource, Interactions[i].MixedRealityInputAction, Interactions[i].Vector2Data); + } + } + + if (Interactions[i].InputType == DeviceInputType.Scroll) + { + Interactions[i].Vector2Data = Input.mouseScrollDelta; + + // If our value was updated, raise it. + if (Interactions[i].Updated) + { + MixedRealityToolkit.InputSystem?.RaisePositionInputChanged(InputSource, Interactions[i].MixedRealityInputAction, Interactions[i].Vector2Data); + } + } + + if (Interactions[i].AxisType == AxisType.Digital) + { + var keyButton = Input.GetKey(Interactions[i].KeyCode); + + // Update the interaction data source + Interactions[i].BoolData = keyButton; + + // If our value changed raise it. + if (Interactions[i].Changed) + { + // Raise input system Event if it enabled + if (Interactions[i].BoolData) + { + MixedRealityToolkit.InputSystem?.RaiseOnInputDown(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction); + } + else + { + MixedRealityToolkit.InputSystem?.RaiseOnInputUp(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction); + } + } + + // If our value was updated, raise it. + if (Interactions[i].Updated) + { + MixedRealityToolkit.InputSystem?.RaiseOnInputPressed(InputSource, ControllerHandedness, Interactions[i].MixedRealityInputAction); + } + } + } + } + } +} diff --git a/Providers/Controllers/UnityInput/MouseController.cs.meta b/Providers/Controllers/UnityInput/MouseController.cs.meta new file mode 100644 index 000000000..9a1ac655d --- /dev/null +++ b/Providers/Controllers/UnityInput/MouseController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 6feadb9b6a19437e82a2509f81e3c01c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/MouseDataProvider.cs b/Providers/Controllers/UnityInput/MouseDataProvider.cs new file mode 100644 index 000000000..f377981e7 --- /dev/null +++ b/Providers/Controllers/UnityInput/MouseDataProvider.cs @@ -0,0 +1,99 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; +using XRTK.Utilities.Physics; + +namespace XRTK.Providers.Controllers.UnityInput +{ + /// + /// The mouse data provider. + /// + public class MouseDataProvider : BaseControllerDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + public MouseDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) + : base(name, priority, profile) + { + } + + /// + /// Current Mouse Controller. + /// + public MouseController Controller { get; private set; } + + /// + public override void Enable() + { + if (!Input.mousePresent) + { + Disable(); + return; + } + +#if UNITY_EDITOR + if (UnityEditor.EditorWindow.focusedWindow != null) + { + UnityEditor.EditorWindow.focusedWindow.ShowNotification(new GUIContent("Press \"ESC\" to regain mouse control")); + } +#endif + + Cursor.visible = false; + Cursor.lockState = CursorLockMode.Locked; + + IMixedRealityInputSource mouseInputSource = null; + + MixedRealityRaycaster.DebugEnabled = true; + + if (MixedRealityToolkit.InputSystem != null) + { + var pointers = RequestPointers(new SystemType(typeof(MouseController)), Handedness.Any, true); + mouseInputSource = MixedRealityToolkit.InputSystem.RequestNewGenericInputSource("Mouse Input", pointers); + } + + Controller = new MouseController(TrackingState.NotApplicable, Handedness.Any, mouseInputSource); + + if (mouseInputSource != null) + { + for (int i = 0; i < mouseInputSource.Pointers.Length; i++) + { + mouseInputSource.Pointers[i].Controller = Controller; + } + } + + if (!Controller.SetupConfiguration(typeof(MouseController))) + { + Debug.LogError($"Failed to configure {typeof(MouseController).Name} controller!"); + return; + } + + MixedRealityToolkit.InputSystem?.RaiseSourceDetected(Controller.InputSource, Controller); + } + + /// + public override void Update() + { + if (Input.mousePresent && Controller == null) { Enable(); } + + Controller?.Update(); + } + + /// + public override void Disable() + { + if (Controller != null) + { + MixedRealityToolkit.InputSystem?.RaiseSourceLost(Controller.InputSource, Controller); + } + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/UnityInput/MouseDataProvider.cs.meta b/Providers/Controllers/UnityInput/MouseDataProvider.cs.meta new file mode 100644 index 000000000..2e51c3aa0 --- /dev/null +++ b/Providers/Controllers/UnityInput/MouseDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 435bb5e5919440f5aa76bd793cc424ba +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs b/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs new file mode 100644 index 000000000..9f14c67bc --- /dev/null +++ b/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs @@ -0,0 +1,198 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Services; + +namespace XRTK.Providers.Controllers.UnityInput +{ + /// + /// Manages joysticks using unity input system. + /// + public class UnityJoystickDataProvider : BaseControllerDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + public UnityJoystickDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) + : base(name, priority, profile) + { + } + + private const float DeviceRefreshInterval = 3.0f; + + protected static readonly Dictionary ActiveControllers = new Dictionary(); + + private float deviceRefreshTimer; + private string[] lastDeviceList; + + /// + public override void Update() + { + base.Update(); + + deviceRefreshTimer += Time.unscaledDeltaTime; + + if (deviceRefreshTimer >= DeviceRefreshInterval) + { + deviceRefreshTimer = 0.0f; + RefreshDevices(); + } + + foreach (var controller in ActiveControllers) + { + controller.Value?.UpdateController(); + } + } + + /// + public override void Disable() + { + base.Disable(); + + foreach (var genericOpenVRController in ActiveControllers) + { + if (genericOpenVRController.Value != null) + { + MixedRealityToolkit.InputSystem?.RaiseSourceLost(genericOpenVRController.Value.InputSource, genericOpenVRController.Value); + } + } + + ActiveControllers.Clear(); + } + + /// + public override IMixedRealityController[] GetActiveControllers() => ActiveControllers.Values.ToArray(); + + private void RefreshDevices() + { + var joystickNames = Input.GetJoystickNames(); + + if (joystickNames.Length <= 0) { return; } + + if (lastDeviceList != null && joystickNames.Length == lastDeviceList.Length) + { + for (int i = 0; i < lastDeviceList.Length; i++) + { + if (joystickNames[i].Equals(lastDeviceList[i])) { continue; } + + if (ActiveControllers.ContainsKey(lastDeviceList[i])) + { + var controller = GetOrAddController(lastDeviceList[i]); + + if (controller != null) + { + MixedRealityToolkit.InputSystem?.RaiseSourceLost(controller.InputSource, controller); + } + + ActiveControllers.Remove(lastDeviceList[i]); + } + } + } + + for (var i = 0; i < joystickNames.Length; i++) + { + if (string.IsNullOrEmpty(joystickNames[i])) + { + continue; + } + + if (!ActiveControllers.ContainsKey(joystickNames[i])) + { + var controller = GetOrAddController(joystickNames[i]); + + if (controller != null) + { + MixedRealityToolkit.InputSystem?.RaiseSourceDetected(controller.InputSource, controller); + } + } + } + + lastDeviceList = joystickNames; + } + + /// + /// Gets or adds a controller using the joystick name provided. + /// + /// The name of they joystick from Unity's + /// A new controller reference. + protected virtual GenericJoystickController GetOrAddController(string joystickName) + { + if (ActiveControllers.ContainsKey(joystickName)) + { + var controller = ActiveControllers[joystickName]; + Debug.Assert(controller != null); + return controller; + } + + Type controllerType; + + switch (GetCurrentControllerType(joystickName)) + { + default: + return null; + case SupportedControllerType.GenericUnity: + controllerType = typeof(GenericJoystickController); + break; + case SupportedControllerType.Xbox: + controllerType = typeof(XboxController); + break; + } + + var inputSource = MixedRealityToolkit.InputSystem?.RequestNewGenericInputSource($"{controllerType.Name} Controller"); + var detectedController = Activator.CreateInstance(controllerType, TrackingState.NotTracked, Handedness.None, inputSource, null) as GenericJoystickController; + + if (detectedController == null) + { + Debug.LogError($"Failed to create {controllerType.Name} controller"); + return null; + } + + if (!detectedController.SetupConfiguration(controllerType)) + { + // Controller failed to be setup correctly. + // Return null so we don't raise the source detected. + Debug.LogError($"Failed to configure {controllerType.Name} controller!"); + return null; + } + + ActiveControllers.Add(joystickName, detectedController); + return detectedController; + } + + /// + /// Gets the current controller type for the joystick name provided. + /// + /// The name of they joystick from Unity's + /// The supported controller type + protected virtual SupportedControllerType GetCurrentControllerType(string joystickName) + { + if (string.IsNullOrEmpty(joystickName) || + joystickName.Contains("OpenVR") || + joystickName.Contains("Spatial")) + { + return SupportedControllerType.None; + } + + if (joystickName.Contains("Xbox Controller") || + joystickName.Contains("Xbox One For Windows") || + joystickName.Contains("Xbox Bluetooth Gamepad") || + joystickName.Contains("Xbox Wireless Controller")) + { + return SupportedControllerType.Xbox; + } + + Debug.Log($"{joystickName} does not have a defined controller type, falling back to generic controller type"); + return SupportedControllerType.GenericUnity; + } + } +} diff --git a/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs.meta b/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs.meta new file mode 100644 index 000000000..10fe41a74 --- /dev/null +++ b/Providers/Controllers/UnityInput/UnityJoystickDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 62d29773e21346cc9561824785cd5b9e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/UnityTouchController.cs b/Providers/Controllers/UnityInput/UnityTouchController.cs new file mode 100644 index 000000000..04b195035 --- /dev/null +++ b/Providers/Controllers/UnityInput/UnityTouchController.cs @@ -0,0 +1,227 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; + +namespace XRTK.Providers.Controllers.UnityInput +{ + public class UnityTouchController : BaseController + { + public UnityTouchController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + private const float K_CONTACT_EPSILON = 30.0f; + + /// + /// Time in seconds to determine if the contact registers as a tap or a hold + /// + public float MaxTapContactTime { get; set; } = 0.5f; + + /// + /// The threshold a finger must move before starting a manipulation gesture. + /// + public float ManipulationThreshold { get; set; } = 5f; + + /// + /// Current Touch Data for the Controller. + /// + public Touch TouchData { get; internal set; } + + /// + /// Current Screen point ray for the Touch. + /// + public Ray ScreenPointRay { get; internal set; } + + /// + /// The current lifetime of the Touch. + /// + public float Lifetime { get; private set; } = 0.0f; + + /// + public override MixedRealityInteractionMapping[] DefaultInteractions { get; } = + { + new MixedRealityInteractionMapping(0, "Touch Pointer Delta", AxisType.DualAxis, DeviceInputType.PointerPosition, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(1, "Touch Pointer Position", AxisType.SixDof, DeviceInputType.SpatialPointer, MixedRealityInputAction.None), + new MixedRealityInteractionMapping(2, "Touch Press", AxisType.Digital, DeviceInputType.PointerClick, MixedRealityInputAction.None), + }; + + private bool isTouched; + private MixedRealityInputAction holdingAction; + private bool isHolding; + private MixedRealityInputAction manipulationAction; + private bool isManipulating; + private MixedRealityPose lastPose = MixedRealityPose.ZeroIdentity; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(DefaultInteractions); + + if (MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.GesturesProfile != null) + { + for (int i = 0; i < MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.GesturesProfile.Gestures.Length; i++) + { + var gesture = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.GesturesProfile.Gestures[i]; + + switch (gesture.GestureType) + { + case GestureInputType.Hold: + holdingAction = gesture.Action; + break; + case GestureInputType.Manipulation: + manipulationAction = gesture.Action; + break; + } + } + } + } + + /// + /// Start the touch. + /// + public void StartTouch() + { + MixedRealityToolkit.InputSystem?.RaisePointerDown(InputSource.Pointers[0], Interactions[2].MixedRealityInputAction); + isTouched = true; + MixedRealityToolkit.InputSystem?.RaiseGestureStarted(this, holdingAction); + isHolding = true; + } + + /// + /// Update the touch data. + /// + public void Update() + { + if (!isTouched) { return; } + + Lifetime += Time.deltaTime; + + if (TouchData.phase == TouchPhase.Moved) + { + Interactions[0].Vector2Data = TouchData.deltaPosition; + + // If our value was updated, raise it. + if (Interactions[0].Updated) + { + MixedRealityToolkit.InputSystem?.RaisePositionInputChanged(InputSource, Interactions[0].MixedRealityInputAction, TouchData.deltaPosition); + } + + if (InputSource.Pointers[0].BaseCursor != null) + { + lastPose.Position = InputSource.Pointers[0].BaseCursor.Position; + lastPose.Rotation = InputSource.Pointers[0].BaseCursor.Rotation; + } + + MixedRealityToolkit.InputSystem?.RaiseSourcePoseChanged(InputSource, this, lastPose); + + Interactions[1].PoseData = lastPose; + + // If our value was updated, raise it. + if (Interactions[1].Updated) + { + MixedRealityToolkit.InputSystem?.RaisePoseInputChanged(InputSource, Interactions[1].MixedRealityInputAction, lastPose); + } + + if (!isManipulating) + { + if (Mathf.Abs(TouchData.deltaPosition.x) > ManipulationThreshold || + Mathf.Abs(TouchData.deltaPosition.y) > ManipulationThreshold) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCanceled(this, holdingAction); + isHolding = false; + + MixedRealityToolkit.InputSystem?.RaiseGestureStarted(this, manipulationAction); + isManipulating = true; + } + } + else + { + MixedRealityToolkit.InputSystem?.RaiseGestureUpdated(this, manipulationAction, TouchData.deltaPosition); + } + } + } + + /// + /// End the touch. + /// + public void EndTouch() + { + if (TouchData.phase == TouchPhase.Ended) + { + if (Lifetime < K_CONTACT_EPSILON) + { + if (isHolding) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCanceled(this, holdingAction); + isHolding = false; + } + + if (isManipulating) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCanceled(this, manipulationAction); + isManipulating = false; + } + } + else if (Lifetime < MaxTapContactTime) + { + if (isHolding) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCanceled(this, holdingAction); + isHolding = false; + } + + if (isManipulating) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCanceled(this, manipulationAction); + isManipulating = false; + } + + MixedRealityToolkit.InputSystem?.RaisePointerClicked(InputSource.Pointers[0], Interactions[2].MixedRealityInputAction, TouchData.tapCount); + } + + if (isHolding) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCompleted(this, holdingAction); + isHolding = false; + } + + if (isManipulating) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCompleted(this, manipulationAction, TouchData.deltaPosition); + isManipulating = false; + } + } + + if (isHolding) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCompleted(this, holdingAction); + isHolding = false; + } + + Debug.Assert(!isHolding); + + if (isManipulating) + { + MixedRealityToolkit.InputSystem?.RaiseGestureCompleted(this, manipulationAction, TouchData.deltaPosition); + isManipulating = false; + } + + Debug.Assert(!isManipulating); + + MixedRealityToolkit.InputSystem?.RaisePointerUp(InputSource.Pointers[0], Interactions[2].MixedRealityInputAction); + + Lifetime = 0.0f; + isTouched = false; + Interactions[1].PoseData = MixedRealityPose.ZeroIdentity; + Interactions[0].Vector2Data = Vector2.zero; + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/UnityInput/UnityTouchController.cs.meta b/Providers/Controllers/UnityInput/UnityTouchController.cs.meta new file mode 100644 index 000000000..c1478fae7 --- /dev/null +++ b/Providers/Controllers/UnityInput/UnityTouchController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 16f0fdc2fca6473c9207529c6f4476cf +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs b/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs new file mode 100644 index 000000000..121624a94 --- /dev/null +++ b/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs @@ -0,0 +1,152 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; +using XRTK.Services; +using XRTK.Utilities; + +namespace XRTK.Providers.Controllers.UnityInput +{ + /// + /// Manages Touch devices using unity input system. + /// + public class UnityTouchDataProvider : BaseControllerDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + public UnityTouchDataProvider(string name, uint priority, BaseMixedRealityControllerDataProviderProfile profile) + : base(name, priority, profile) + { + } + + private static readonly Dictionary ActiveTouches = new Dictionary(); + + /// + public override void Update() + { + base.Update(); + + var touchCount = Input.touchCount; + + for (var i = 0; i < touchCount; i++) + { + var touch = Input.touches[i]; + + // Construct a ray from the current touch coordinates + var ray = CameraCache.Main.ScreenPointToRay(touch.position); + + switch (touch.phase) + { + case TouchPhase.Began: + AddTouchController(touch, ray); + break; + case TouchPhase.Moved: + case TouchPhase.Stationary: + UpdateTouchData(touch, ray); + break; + case TouchPhase.Ended: + case TouchPhase.Canceled: + RemoveTouchController(touch); + break; + } + } + + foreach (var controller in ActiveTouches) + { + controller.Value?.Update(); + } + } + + /// + public override void Disable() + { + base.Disable(); + + foreach (var controller in ActiveTouches) + { + if (controller.Value == null || MixedRealityToolkit.InputSystem == null) { continue; } + + foreach (var inputSource in MixedRealityToolkit.InputSystem.DetectedInputSources) + { + if (inputSource.SourceId == controller.Value.InputSource.SourceId) + { + MixedRealityToolkit.InputSystem.RaiseSourceLost(controller.Value.InputSource, controller.Value); + } + } + } + + ActiveTouches.Clear(); + } + + private void AddTouchController(Touch touch, Ray ray) + { + if (!ActiveTouches.TryGetValue(touch.fingerId, out UnityTouchController controller)) + { + IMixedRealityInputSource inputSource = null; + + if (MixedRealityToolkit.InputSystem != null) + { + var pointers = RequestPointers(typeof(UnityTouchController), Handedness.Any, true); + inputSource = MixedRealityToolkit.InputSystem.RequestNewGenericInputSource($"Touch {touch.fingerId}", pointers); + } + + controller = new UnityTouchController(TrackingState.NotApplicable, Handedness.Any, inputSource); + + if (inputSource != null) + { + for (int i = 0; i < inputSource.Pointers.Length; i++) + { + inputSource.Pointers[i].Controller = controller; + var touchPointer = (IMixedRealityTouchPointer)inputSource.Pointers[i]; + touchPointer.TouchRay = ray; + touchPointer.FingerId = touch.fingerId; + } + } + + if (!controller.SetupConfiguration(typeof(UnityTouchController))) + { + Debug.LogError($"Failed to configure {typeof(UnityTouchController).Name} controller!"); + return; + } + + ActiveTouches.Add(touch.fingerId, controller); + } + + MixedRealityToolkit.InputSystem?.RaiseSourceDetected(controller.InputSource, controller); + controller.StartTouch(); + UpdateTouchData(touch, ray); + } + + private static void UpdateTouchData(Touch touch, Ray ray) + { + if (!ActiveTouches.TryGetValue(touch.fingerId, out UnityTouchController controller)) + { + return; + } + + controller.TouchData = touch; + var pointer = (IMixedRealityTouchPointer)controller.InputSource.Pointers[0]; + controller.ScreenPointRay = pointer.TouchRay = ray; + controller.Update(); + } + + private static void RemoveTouchController(Touch touch) + { + if (!ActiveTouches.TryGetValue(touch.fingerId, out UnityTouchController controller)) + { + return; + } + + controller.EndTouch(); + MixedRealityToolkit.InputSystem?.RaiseSourceLost(controller.InputSource, controller); + } + } +} diff --git a/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs.meta b/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs.meta new file mode 100644 index 000000000..90225f0d5 --- /dev/null +++ b/Providers/Controllers/UnityInput/UnityTouchDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c131e790c44f4d65b690eaf349e410cd +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Controllers/UnityInput/XboxController.cs b/Providers/Controllers/UnityInput/XboxController.cs new file mode 100644 index 000000000..e0732e0f6 --- /dev/null +++ b/Providers/Controllers/UnityInput/XboxController.cs @@ -0,0 +1,57 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions.Devices; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Providers.Controllers.UnityInput +{ + /// + /// Xbox Controller using Unity Input System + /// + public class XboxController : GenericJoystickController + { + /// + /// Constructor. + /// + /// + /// + /// + /// + public XboxController(TrackingState trackingState, Handedness controllerHandedness, IMixedRealityInputSource inputSource = null, MixedRealityInteractionMapping[] interactions = null) + : base(trackingState, controllerHandedness, inputSource, interactions) + { + } + + /// + /// Default interactions for Xbox Controller using Unity Input System. + /// + public override MixedRealityInteractionMapping[] DefaultInteractions => new[] + { + new MixedRealityInteractionMapping(0, "Left Thumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_1, ControllerMappingLibrary.AXIS_2, false, true), + new MixedRealityInteractionMapping(1, "Left Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton8), + new MixedRealityInteractionMapping(2, "Right Thumbstick", AxisType.DualAxis, DeviceInputType.ThumbStick, ControllerMappingLibrary.AXIS_4, ControllerMappingLibrary.AXIS_5, false, true), + new MixedRealityInteractionMapping(3, "Right Thumbstick Click", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton9), + new MixedRealityInteractionMapping(4, "D-Pad", AxisType.DualAxis, DeviceInputType.DirectionalPad, ControllerMappingLibrary.AXIS_6, ControllerMappingLibrary.AXIS_7, false, true), + new MixedRealityInteractionMapping(5, "Shared Trigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_3), + new MixedRealityInteractionMapping(6, "Left Trigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_9), + new MixedRealityInteractionMapping(7, "Right Trigger", AxisType.SingleAxis, DeviceInputType.Trigger, ControllerMappingLibrary.AXIS_10), + new MixedRealityInteractionMapping(8, "View", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton6), + new MixedRealityInteractionMapping(9, "Menu", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton7), + new MixedRealityInteractionMapping(10, "Left Bumper", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton4), + new MixedRealityInteractionMapping(11, "Right Bumper", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton5), + new MixedRealityInteractionMapping(12, "A", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton0), + new MixedRealityInteractionMapping(13, "B", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton1), + new MixedRealityInteractionMapping(14, "X", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton2), + new MixedRealityInteractionMapping(15, "Y", AxisType.Digital, DeviceInputType.ButtonPress,KeyCode.JoystickButton3), + }; + + /// + public override void SetupDefaultInteractions(Handedness controllerHandedness) + { + AssignControllerMappings(DefaultInteractions); + } + } +} \ No newline at end of file diff --git a/Providers/Controllers/UnityInput/XboxController.cs.meta b/Providers/Controllers/UnityInput/XboxController.cs.meta new file mode 100644 index 000000000..dcc7ac85c --- /dev/null +++ b/Providers/Controllers/UnityInput/XboxController.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 43eb84fc69be47abb058491e7a499e81 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Networking.meta b/Providers/Networking.meta new file mode 100644 index 000000000..98b6155c7 --- /dev/null +++ b/Providers/Networking.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 1f1da3788fea4ee78c479e609b570764 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Networking/WebRTC.meta b/Providers/Networking/WebRTC.meta new file mode 100644 index 000000000..58a43cd0f --- /dev/null +++ b/Providers/Networking/WebRTC.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4b33dcbde0324401b4cbb6b01e82fe82 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs b/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs new file mode 100644 index 000000000..7e2c37374 --- /dev/null +++ b/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs @@ -0,0 +1,179 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using System.Collections.Generic; +using System.Text; +using UnityEngine; +using XRTK.Extensions; +using XRTK.Interfaces.NetworkingSystem; +using XRTK.Services; + +namespace XRTK.Providers.Networking.WebRTC +{ + /// + /// The Mixed Reality Toolkit's Web RTC Data provider. + /// + public class MixedRealityWebRtcDataProvider : BaseDataProvider, IMixedRealityNetworkDataProvider + { + /// + /// This is just an example of a single frame from a web rtc data track. + /// + [Serializable] + private struct Frame + { + public Frame(string messageType, byte[] message) + { + MessageType = messageType; + Message = message; + } + + public string MessageType; + public byte[] Message; + } + + /// + public MixedRealityWebRtcDataProvider(string name, uint priority) + : base(name, priority) + { + } + + #region IMixedRealityEventSource Implementation + + /// + public uint SourceId { get; } = 0; + + /// + public string SourceName => Name; + + #region IEquality Implementation + + /// + /// Equality check against each + /// + /// + /// + /// True, if the s are the same. + public static bool Equals(IMixedRealityNetworkDataProvider left, IMixedRealityNetworkDataProvider right) + { + return left.Equals(right); + } + + /// + bool IEqualityComparer.Equals(object left, object right) + { + return left.Equals(right); + } + + /// + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { return false; } + if (ReferenceEquals(this, obj)) { return true; } + if (obj.GetType() != GetType()) { return false; } + + return Equals((IMixedRealityNetworkDataProvider)obj); + } + + private bool Equals(IMixedRealityNetworkDataProvider other) + { + return other != null && SourceId == other.SourceId && string.Equals(SourceName, other.SourceName); + } + + /// + int IEqualityComparer.GetHashCode(object obj) + { + return obj.GetHashCode(); + } + + /// + public override int GetHashCode() + { + unchecked + { + int hashCode = 0; + hashCode = (hashCode * 397) ^ (int)SourceId; + hashCode = (hashCode * 397) ^ (SourceName != null ? SourceName.GetHashCode() : 0); + return hashCode; + } + } + + #endregion IEquality Implementation + + #endregion IMixedRealityEventSource Implementation + + #region IMixedRealityNetworkDataProvider Implementation + + private readonly Dictionary connections = new Dictionary(); + + /// + public IReadOnlyDictionary Connections => new Dictionary(connections); + + /// + public void SendData(T data) + { + var messageDataType = typeof(T).AssemblyQualifiedName; + byte[] messageData; + + if (typeof(T).IsPrimitive || + typeof(T) == typeof(string)) + { + messageData = data.GetBuiltInTypeBytes(); + } + else + { + messageData = Encoding.ASCII.GetBytes(JsonUtility.ToJson(data)); + } + + var message = new Frame(messageDataType, messageData); + + // TODO Send message data down into the lower level resource api peer connection. + } + + private void OnFrameReceived(Frame frame) + { + // TODO get frame data from peer connection. + var messageDataType = Type.GetType(frame.MessageType, false); + + if (messageDataType != null) + { + RaiseWebRtcDataArrived(messageDataType, frame.Message); + } + else + { + Debug.LogError($"Failed to get network message type {frame.MessageType}"); + } + } + + /// + /// TODO: probably won't be this method but I wanted to provide a way to show how network data providers could call into the network system to raise when data has been received + /// + private static void RaiseWebRtcDataArrived(T type, byte[] data) + { + T message; + + try + { + if (typeof(T).IsPrimitive || + typeof(T) == typeof(string)) + { + message = data.GetBuiltInTypeValueFromBytes(); + } + else + { + message = JsonUtility.FromJson(Encoding.ASCII.GetString(data)); + } + } + catch (Exception e) + { + Debug.LogError($"Failed to convert {type.GetType().Name} message data!\n{e.Message}"); + return; + } + + MixedRealityToolkit.NetworkingSystem.RaiseDataReceived(message); + } + + #endregion IMixedRealityNetworkDataProvider Implementation + } +} \ No newline at end of file diff --git a/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs.meta b/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs.meta new file mode 100644 index 000000000..5730cb8fe --- /dev/null +++ b/Providers/Networking/WebRTC/MixedRealityWebRtcDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: b4d7adfa2d1c4ae7bc9c6e525bfff44b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/Networking/WebRTC/WebRtcPeerConnection.cs b/Providers/Networking/WebRTC/WebRtcPeerConnection.cs new file mode 100644 index 000000000..2475e42ae --- /dev/null +++ b/Providers/Networking/WebRTC/WebRtcPeerConnection.cs @@ -0,0 +1,10 @@ +namespace XRTK.Providers.Networking.WebRTC +{ + /// + /// A web rtc peer connection. + /// + public struct WebRtcPeerConnection + { + // TODO Encapsulate what a peer connection is + } +} \ No newline at end of file diff --git a/Providers/Networking/WebRTC/WebRtcPeerConnection.cs.meta b/Providers/Networking/WebRTC/WebRtcPeerConnection.cs.meta new file mode 100644 index 000000000..d0118f0b4 --- /dev/null +++ b/Providers/Networking/WebRTC/WebRtcPeerConnection.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7b702534caf5429aa8875cc53b665c27 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/SpatialObservers.meta b/Providers/SpatialObservers.meta new file mode 100644 index 000000000..2d957eaeb --- /dev/null +++ b/Providers/SpatialObservers.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: f5fa96f46161496a8bdf4527ae7b1320 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs b/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs new file mode 100644 index 000000000..85063ec1b --- /dev/null +++ b/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs @@ -0,0 +1,355 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using UnityEngine; +using XRTK.Definitions.SpatialAwarenessSystem; +using XRTK.Extensions; +using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Services; +using XRTK.Utilities.Async; + +namespace XRTK.Providers.SpatialObservers +{ + /// + /// Base class for spatial awareness observers. + /// + public abstract class BaseMixedRealitySpatialMeshObserver : BaseMixedRealitySpatialObserverDataProvider, IMixedRealitySpatialMeshObserver + { + /// + /// Constructor. + /// + /// + /// + /// + protected BaseMixedRealitySpatialMeshObserver(string name, uint priority, BaseMixedRealitySpatialMeshObserverProfile profile) + : base(name, priority, profile) + { + MeshPhysicsLayerOverride = profile.MeshPhysicsLayerOverride; + MeshLevelOfDetail = profile.MeshLevelOfDetail; + MeshTrianglesPerCubicMeter = profile.MeshTrianglesPerCubicMeter; + MeshRecalculateNormals = profile.MeshRecalculateNormals; + MeshDisplayOption = profile.MeshDisplayOption; + MeshVisibleMaterial = profile.MeshVisibleMaterial; + MeshOcclusionMaterial = profile.MeshOcclusionMaterial; + ObservationExtents = profile.ObservationExtents; + IsStationaryObserver = profile.IsStationaryObserver; + var additionalComponents = profile.AdditionalComponents; + meshObjectPrefab = profile.MeshObjectPrefab; + spatialMeshObjectPool = new Stack(); + + + if (additionalComponents != null) + { + requiredMeshComponents = new Type[additionalComponents.Length + 3]; + requiredMeshComponents[0] = typeof(MeshFilter); + requiredMeshComponents[1] = typeof(MeshRenderer); + requiredMeshComponents[2] = typeof(MeshCollider); + + for (int i = 3; i < additionalComponents.Length; i++) + { + var component = additionalComponents[i - 3].Type; + Debug.Assert(component != null); + requiredMeshComponents[i] = component; + } + } + else + { + requiredMeshComponents = new[] + { + typeof(MeshFilter), + typeof(MeshRenderer), + typeof(MeshCollider) + }; + } + } + + private readonly GameObject meshObjectPrefab; + + /// + /// When a mesh is created we will need to create a game object with a minimum + /// set of components to contain the mesh. These are the required component types. + /// + private readonly Type[] requiredMeshComponents; + + #region IMixedRealityService Implementation + + public override void Initialize() + { + base.Initialize(); + + // Only update the observer if it is running. + if (!Application.isPlaying) { return; } + + for (int i = 0; i < 10; i++) + { + spatialMeshObjectPool.Push(new SpatialMeshObject(-1, CreateBlankSpatialMeshGameObject())); + } + } + + /// + public override void Enable() + { + base.Enable(); + + // Only update the observer if it is running. + if (!Application.isPlaying) { return; } + + // If we've got some spatial meshes and were disabled previously, turn them back on. + foreach (var meshObject in spatialMeshObjects.Values) + { + meshObject.GameObject.SetActive(true); + } + } + + /// + public override void Update() + { + base.Update(); + + // Only update the observer if it is running. + if (!Application.isPlaying || !IsRunning) { return; } + + lock (spatialMeshObjectPool) + { + // if we get low in our object pool, then create a few more. + if (spatialMeshObjectPool.Count < 5) + { + spatialMeshObjectPool.Push(new SpatialMeshObject(-1, CreateBlankSpatialMeshGameObject())); + } + } + } + + /// + public override void Disable() + { + base.Disable(); + + // Only update the observer if it is running. + if (!Application.isPlaying) { return; } + + // Disable any spatial meshes we might have. + foreach (SpatialMeshObject meshObject in spatialMeshObjects.Values) + { + if (meshObject.GameObject != null) + { + meshObject.GameObject.SetActive(false); + } + } + } + + /// + public override void Destroy() + { + base.Destroy(); + + if (!Application.isPlaying) { return; } + + // Cleanup the spatial meshes that are being managed by this observer. + foreach (var meshObject in spatialMeshObjects.Values) + { + if (Application.isEditor) + { + UnityEngine.Object.DestroyImmediate(meshObject.GameObject); + } + else + { + UnityEngine.Object.Destroy(meshObject.GameObject); + } + } + + spatialMeshObjects.Clear(); + + lock (spatialMeshObjectPool) + { + foreach (var meshObject in spatialMeshObjectPool) + { + if (Application.isEditor) + { + UnityEngine.Object.DestroyImmediate(meshObject.GameObject); + } + else + { + UnityEngine.Object.Destroy(meshObject.GameObject); + } + } + + spatialMeshObjectPool.Clear(); + } + } + + #endregion IMixedRealityService Implementation + + #region IMixedRealitySpatialMeshObserver Implementation + + private SpatialAwarenessMeshLevelOfDetail meshLevelOfDetail = SpatialAwarenessMeshLevelOfDetail.Coarse; + + /// + public override int PhysicsLayer => MeshPhysicsLayerOverride == -1 ? base.PhysicsLayer : MeshPhysicsLayerOverride; + + /// + public int MeshPhysicsLayerOverride { get; } + + /// + public SpatialAwarenessMeshLevelOfDetail MeshLevelOfDetail + { + get => meshLevelOfDetail; + set + { + if (meshLevelOfDetail != value) + { + // Non-custom values automatically modify MeshTrianglesPerCubicMeter + if (value != SpatialAwarenessMeshLevelOfDetail.Custom) + { + MeshTrianglesPerCubicMeter = (uint)value; + } + + meshLevelOfDetail = value; + } + } + } + + /// + public uint MeshTrianglesPerCubicMeter { get; private set; } + + /// + public bool MeshRecalculateNormals { get; } + + /// + public SpatialMeshDisplayOptions MeshDisplayOption { get; } + + /// + public Material MeshVisibleMaterial { get; } + + /// + public Material MeshOcclusionMaterial { get; } + + /// + public Vector3 ObservationExtents { get; } + + /// + public bool IsStationaryObserver { get; } + + /// + public Vector3 ObserverOrigin { get; protected set; } + + /// + public Quaternion ObserverOrientation { get; protected set; } = Quaternion.identity; + + private readonly Dictionary spatialMeshObjects = new Dictionary(); + + /// + /// + /// This method returns a copy of the collection maintained by the observer so that application + /// code can iterate through the collection without concern for changes to the backing data. + /// + public IReadOnlyDictionary SpatialMeshObjects => new Dictionary(spatialMeshObjects); + + private readonly Stack spatialMeshObjectPool; + + /// + public virtual void RaiseMeshAdded(SpatialMeshObject spatialMeshObject) + { + MixedRealityToolkit.SpatialAwarenessSystem.RaiseMeshAdded(this, spatialMeshObject); + } + + /// + public virtual void RaiseMeshUpdated(SpatialMeshObject spatialMeshObject) + { + MixedRealityToolkit.SpatialAwarenessSystem.RaiseMeshUpdated(this, spatialMeshObject); + } + + /// + public virtual void RaiseMeshRemoved(SpatialMeshObject spatialMeshObject) + { + if (spatialMeshObjects.TryGetValue(spatialMeshObject.Id, out SpatialMeshObject spatialMesh)) + { + spatialMeshObjects.Remove(spatialMesh.Id); + + // Raise mesh removed if it was prev enabled. + // spatialMesh.GameObject's only get enabled when successfully cooked. + // If it's disabled then likely the mesh was removed before cooking completed. + if (spatialMesh.GameObject.activeInHierarchy) + { + MixedRealityToolkit.SpatialAwarenessSystem.RaiseMeshRemoved(this, spatialMeshObject); + } + + spatialMesh.GameObject.SetActive(false); + // Recycle this spatial mesh object and add it back to the pool. + spatialMesh.GameObject.name = "Reclaimed Spatial Mesh Object"; + spatialMesh.Mesh = null; + spatialMesh.Id = -1; + + lock (spatialMeshObjectPool) + { + spatialMeshObjectPool.Push(spatialMesh); + } + } + else + { + Debug.LogError($"{spatialMeshObject.Id} is missing from known spatial objects!"); + } + } + + /// + /// Request a from the collection of known spatial objects. If that object doesn't exist take one from our pool. + /// + /// The id of the . + /// A + protected async Task RequestSpatialMeshObject(int meshId) + { + if (spatialMeshObjects.TryGetValue(meshId, out SpatialMeshObject spatialMesh)) + { + return spatialMesh; + } + + lock (spatialMeshObjectPool) + { + if (spatialMeshObjectPool.Count > 0) + { + spatialMesh = spatialMeshObjectPool.Pop(); + spatialMesh.Id = meshId; + spatialMeshObjects.Add(spatialMesh.Id, spatialMesh); + return spatialMesh; + } + } + + await Awaiters.UnityMainThread; + return await RequestSpatialMeshObject(meshId); + } + + private GameObject CreateBlankSpatialMeshGameObject() + { + GameObject newGameObject; + + var layer = MeshPhysicsLayerOverride == -1 ? base.PhysicsLayer : MeshPhysicsLayerOverride; + + if (meshObjectPrefab == null) + { + newGameObject = new GameObject($"Blank Spatial Mesh GameObject", requiredMeshComponents) + { + layer = layer + }; + } + else + { + newGameObject = UnityEngine.Object.Instantiate(meshObjectPrefab); + + foreach (var requiredComponent in requiredMeshComponents) + { + newGameObject.EnsureComponent(requiredComponent); + } + + newGameObject.layer = layer; + } + + newGameObject.transform.parent = MixedRealityToolkit.SpatialAwarenessSystem.SpatialMeshesParent.transform; + newGameObject.SetActive(false); + return newGameObject; + } + + #endregion IMixedRealitySpatialMeshObserver Implementation + } +} \ No newline at end of file diff --git a/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs.meta b/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs.meta new file mode 100644 index 000000000..6b6d92706 --- /dev/null +++ b/Providers/SpatialObservers/BaseMixedRealitySpatialMeshObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: faac94d34d98437e94e008e988c0516d +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 661c780d86784e0b895a880d2624c8fe, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs b/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs new file mode 100644 index 000000000..2617de35b --- /dev/null +++ b/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs @@ -0,0 +1,160 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections; +using XRTK.Definitions.Utilities; +using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Services; + +namespace XRTK.Providers.SpatialObservers +{ + /// + /// Base implementation + /// + public abstract class BaseMixedRealitySpatialObserverDataProvider : BaseDataProvider, IMixedRealitySpatialObserverDataProvider + { + /// + /// Constructor. + /// + /// + /// + /// + protected BaseMixedRealitySpatialObserverDataProvider(string name, uint priority, BaseMixedRealitySpatialObserverProfile profile) : base(name, priority) + { + if (profile == null) + { + throw new ArgumentNullException($"Missing profile for {name}"); + } + + if (MixedRealityToolkit.SpatialAwarenessSystem == null) + { + throw new Exception("Missing Spatial Awareness System!"); + } + + SourceId = MixedRealityToolkit.SpatialAwarenessSystem.GenerateNewObserverId(); + StartupBehavior = profile.StartupBehavior; + UpdateInterval = profile.UpdateInterval; + PhysicsLayer = profile.PhysicsLayer; + } + + #region IMixedRealityService Implementation + + /// + public override void Enable() + { + base.Enable(); + + MixedRealityToolkit.SpatialAwarenessSystem?.RaiseSpatialAwarenessObserverDetected(this); + + if (StartupBehavior == AutoStartBehavior.AutoStart) + { + StartObserving(); + } + } + + /// + public override void Disable() + { + base.Disable(); + + StopObserving(); + + MixedRealityToolkit.SpatialAwarenessSystem?.RaiseSpatialAwarenessObserverLost(this); + } + + #endregion IMixedRealityService Implementation + + #region IMixedRealitySpatialObserverDataProvider Implementation + + /// + public AutoStartBehavior StartupBehavior { get; } + + /// + public float UpdateInterval { get; set; } + + /// + public virtual int PhysicsLayer { get; } + + /// + public bool IsRunning { get; protected set; } + + /// + public virtual void StartObserving() + { + IsRunning = true; + } + + /// + public virtual void StopObserving() + { + IsRunning = false; + } + + #endregion IMixedRealitySpatialObserverDataProvider Implementation + + #region IMixedRealityEventSource Implementation + + /// + public string SourceName => Name; + + /// + public uint SourceId { get; } + + #endregion IMixedRealityEventSource Implementation + + #region IEquality Implementation + + /// + /// Determines if the specified objects are equal. + /// + /// + /// + /// + public static bool Equals(IMixedRealitySpatialObserverDataProvider left, IMixedRealitySpatialObserverDataProvider right) + { + return left.Equals(right); + } + + /// + bool IEqualityComparer.Equals(object left, object right) + { + return left.Equals(right); + } + + /// + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { return false; } + if (ReferenceEquals(this, obj)) { return true; } + if (obj.GetType() != GetType()) { return false; } + + return Equals((IMixedRealitySpatialObserverDataProvider)obj); + } + + private bool Equals(IMixedRealitySpatialObserverDataProvider other) + { + return other != null && SourceId == other.SourceId && string.Equals(SourceName, other.SourceName); + } + + /// + int IEqualityComparer.GetHashCode(object obj) + { + return obj.GetHashCode(); + } + + /// + public override int GetHashCode() + { + unchecked + { + int hashCode = 0; + hashCode = (hashCode * 397) ^ (int)SourceId; + hashCode = (hashCode * 397) ^ (SourceName != null ? SourceName.GetHashCode() : 0); + return hashCode; + } + } + + #endregion IEquality Implementation + } +} \ No newline at end of file diff --git a/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs.meta b/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs.meta new file mode 100644 index 000000000..53b1d633d --- /dev/null +++ b/Providers/SpatialObservers/BaseMixedRealitySpatialObserverDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 762f0edb121b49d0bf13c0831145ab5b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 661c780d86784e0b895a880d2624c8fe, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs b/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs new file mode 100644 index 000000000..2405905fd --- /dev/null +++ b/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs @@ -0,0 +1,80 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using XRTK.Interfaces.Providers.SpatialObservers; + +namespace XRTK.Providers.SpatialObservers +{ + /// + /// Base implementation. + /// + public abstract class BaseMixedRealitySurfaceObserver : BaseMixedRealitySpatialObserverDataProvider, IMixedRealitySurfaceObserver + { + /// + /// Constructor. + /// + /// + /// + /// + protected BaseMixedRealitySurfaceObserver(string name, uint priority, BaseMixedRealitySurfaceObserverProfile profile) : base(name, priority, profile) + { + if (profile == null) + { + throw new Exception($"Missing profile for {name}"); + } + + SurfacePhysicsLayerOverride = profile.SurfacePhysicsLayerOverride; + SurfaceFindingMinimumArea = profile.SurfaceFindingMinimumArea; + DisplayFloorSurfaces = profile.DisplayFloorSurfaces; + FloorSurfaceMaterial = profile.FloorSurfaceMaterial; + DisplayCeilingSurfaces = profile.DisplayCeilingSurface; + CeilingSurfaceMaterial = profile.CeilingSurfaceMaterial; + DisplayWallSurfaces = profile.DisplayWallSurface; + WallSurfaceMaterial = profile.WallSurfaceMaterial; + DisplayPlatformSurfaces = profile.DisplayPlatformSurfaces; + PlatformSurfaceMaterial = profile.PlatformSurfaceMaterial; + } + + /// + public override int PhysicsLayer => SurfacePhysicsLayerOverride == -1 ? base.PhysicsLayer : SurfacePhysicsLayerOverride; + + + /// + public int SurfacePhysicsLayerOverride { get; } + + /// + public float SurfaceFindingMinimumArea { get; } + + /// + public bool DisplayFloorSurfaces { get; set; } + + /// + public Material FloorSurfaceMaterial { get; } + + /// + public bool DisplayCeilingSurfaces { get; set; } + + /// + public Material CeilingSurfaceMaterial { get; } + + /// + public bool DisplayWallSurfaces { get; set; } + + /// + public Material WallSurfaceMaterial { get; } + + /// + public bool DisplayPlatformSurfaces { get; set; } + + /// + public Material PlatformSurfaceMaterial { get; } + + private readonly Dictionary planarSurfaces = new Dictionary(); + + /// + public IReadOnlyDictionary PlanarSurfaces => new Dictionary(planarSurfaces); + } +} \ No newline at end of file diff --git a/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs.meta b/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs.meta new file mode 100644 index 000000000..36f6e0f7a --- /dev/null +++ b/Providers/SpatialObservers/BaseMixedRealitySurfaceObserver.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0f2ea5cdb7434c21a6a0c1bdf50df9b8 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 661c780d86784e0b895a880d2624c8fe, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/README.md b/README.md new file mode 100644 index 000000000..b0d0d4779 --- /dev/null +++ b/README.md @@ -0,0 +1,88 @@ +# Welcome to the Mixed Reality Toolkit + +Developing Mixed Reality Applications in Unity is hard, and today we're proud to announce the formation of the XRTK (pronounced “Mixed Reality Toolkit”). This is a direct fork of the [Microsoft Mixed Reality Toolkit (MRTK)](https://github.com/Microsoft/MixedRealityToolkit-Unity). + +I know there are many [developers](./CONTRIBUTORS.md) who are frustrated with the current state of both game and general application development within the Mixed Reality ecosystem: a quickly developing market that encompasses the whole spectrum from Mobile Augmented Reality to high end Virtual Reality. + +Compounded with the fact that developing for an emerging tech markets can be time consuming, expensive, and fraught with peril. There are many complexities with targeting multiple platforms and no single framework currently available is able to fulfil this in a true Mixed Reality approach (covering AR / XR / VR completely). This results in developers and enterprises having to build a multitude of solutions on the many SDK's provided by suppliers to fulfil the needs of the business. + +To improve this situation, our vision is simple, to provide a complete cross-platform solution for AR/XR/VR development that supports three different developer skill levels: + +- **Beginner** No Coding Required: Perfect for artists, Hackathons, and Quick Prototyping. + +- **Intermediate** Customizable: The framework is flexible enough so coders can customize what they need to cover edge cases with ease. + +- **Advanced** Extensible: The framework is easy to extend and modify to add additional custom services to meet specific criteria and needs. + +Our philosophy is to enable developers to focus on building content and structure and not have to worry about the underlying complexities for supporting multiple platforms in order to build it everywhere and on each device as required. In Short, built it once and ship it everywhere with as little effort as possible. + +We’d like to invite all the major hardware vendors to help guide their platform specific implementations, from Microsoft’s Windows Mixed Reality and Magic Leap’s Lumin OS to Google’s ARCore and Apple’s ARKit. Including any upcoming Mixed Reality capable devices that would like to be included for adoption. + +## [Join us on Slack](https://holodevelopersslack.azurewebsites.net/) + +There are many channels on Slack, covering the wide variety of Mixed Reality platforms out there, as well as a dedicated XRTK channel for discussing XRTK implementations. + +# Build Status + +| Modules | Windows Build Agent | +|---|---| +|Core|[![Build status](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_apis/build/status/Mixed%20Reality%20Toolkit-CI)](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_build/latest?definitionId=2)| +|[UPM](https://github.com/XRTK/UpmGitExtension)|[![Build status](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_apis/build/status/XRTK.UpmGitExtension%20Master%20Build)](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_build/latest?definitionId=19)| +|[WMR](https://github.com/XRTK/WindowsMixedReality)|[![Build status](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_apis/build/status/XRTK.WMR%20Master%20Build)](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_build/latest?definitionId=21)| +|[SDK](https://github.com/XRTK/SDK)|[![Build status](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_apis/build/status/XRTK.SDK%20Master%20Build)](https://dev.azure.com/xrtk/Mixed%20Reality%20Toolkit/_build/latest?definitionId=23)| + +# Supported Platforms + +- [x] Linux +- [x] OSX Standalone +- [ ] iOS + - [ ] ARKit +- [ ] Android + - [ ] ARCore +- [ ] WebAssembly + - [ ] WebVR + - [ ] WebXR +- [x] Windows Standalone + - [x] Open VR + - [ ] Steam VR +- [x] [Windows Mixed Reality](https://github.com/XRTK/WindowsMixedReality) + - [x] HoloLens + - [x] Windows Mixed Reality HMDs + - [ ] HoloLens 2 +- [ ] [Lumin (aka Magic Leap)](https://github.com/XRTK/Lumin) + +# FAQ + +## How do I get started quickly? + +While we are still preparing XRTK specific documentation and guidance, all the current Tutorials and Videos related to the MRTK will also work for the XRTK (which some subtle differences in screens). + +Most notably: + +* [Mixed Reality Toolkit Quickstart](https://www.youtube.com/watch?v=-ODnfcv5Rzg) Quickstart video session demonstrating getting started with the MRTK and building your project for multiple patforms. +* Getting Started With The XRTK (coming soon) Documented walk-through for creating your first project. +* Mixed Reality Configuration Guide (coming soon) Screen by screen walk through of the major MRTK configuration screens (some will vary from the XRTK, but similar enough to get the picture) + +## What is the relationship between the XRTK and Microsoft's MRTK SDK + +We work very closely with the MRTK to evolve their road-map to ensure it is the best it can be. When new features are added to the MRTK, then being a fork of the MRTK, the XRTK project can easily port those features over easily (for instance the upcoming HL2 support and hand tracking). +In a lot of cases, there will be many extensions that will simply work seamlessly on both MRTK and XRTK without change, such as the Light Estimation extension released in January 2019. + +It is our intention to always cooperate with the MRTK as they have similar goals, we just different aspirations to the developers adoption strategy. + +## How do I migrate from the MRTK to the XRTK? + +All the project GUIDs have been regenerated so there will not be conflicts between assets. + +To update any script references do a global find and replace for the following: +- `Microsoft.MixedReality.Toolkit` -> `XRTK` +- Check for any missing scripts in prefabs as e.g. `Pointer Click Handler, Canvas Utility, Mixed Reality Line Data Provider,...` has updated namespace + +## How do I migrate from the HoloToolkit to the XRTK? + +Currently there isn't a direct path from the HTK to the XRTK, also Microsoft are still in the process of defining an "upgrade guide" for HTK -> MRTK upgrade. Once available we shall update that here with similar guidance. + +# Roadmap + +- [x] [Project Setup](https://github.com/XRTK/XRTK-Core/projects/1) +- [ ] [Docs, Demos, & Tutorials](https://github.com/XRTK/XRTK-Core/projects/2) diff --git a/README.md.meta b/README.md.meta new file mode 100644 index 000000000..0ccb81c5b --- /dev/null +++ b/README.md.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: a874349bcea501646befb1942ef31051 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services.meta b/Services.meta new file mode 100644 index 000000000..62c3419b2 --- /dev/null +++ b/Services.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 23841faae93243abb411a3433b438a41 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BaseDataProvider.cs b/Services/BaseDataProvider.cs new file mode 100644 index 000000000..10a3942ec --- /dev/null +++ b/Services/BaseDataProvider.cs @@ -0,0 +1,23 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Interfaces; + +namespace XRTK.Services +{ + /// + /// The base data provider implements and provides default properties for all data providers. + /// + /// + /// Empty, but reserved for future use, in case additional properties or methods are assigned. + /// + public abstract class BaseDataProvider : BaseServiceWithConstructor, IMixedRealityDataProvider + { + /// + /// Constructor. + /// + /// + /// + public BaseDataProvider(string name, uint priority) : base(name, priority) { } + } +} \ No newline at end of file diff --git a/Services/BaseDataProvider.cs.meta b/Services/BaseDataProvider.cs.meta new file mode 100644 index 000000000..0ba3b6a57 --- /dev/null +++ b/Services/BaseDataProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: efa0bf08500d4036bdbd9a673a2787ca +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BaseEventSystem.cs b/Services/BaseEventSystem.cs new file mode 100644 index 000000000..784c68f52 --- /dev/null +++ b/Services/BaseEventSystem.cs @@ -0,0 +1,94 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions; +using XRTK.Interfaces.Events; +using XRTK.Utilities.Async; + +namespace XRTK.Services +{ + /// + /// Base Event System that can be inherited from to give other system features event capabilities. + /// + public abstract class BaseEventSystem : BaseSystem, IMixedRealityEventSystem + { + /// + /// Constructor. + /// + /// + protected BaseEventSystem(BaseMixedRealityProfile profile) + : base(profile) + { + } + + #region IMixedRealityEventSystem Implementation + + private static int eventExecutionDepth = 0; + private readonly WaitUntil doneExecutingEvents = new WaitUntil(() => eventExecutionDepth == 0); + + /// + public List EventListeners { get; } = new List(); + + /// + public virtual void HandleEvent(BaseEventData eventData, ExecuteEvents.EventFunction eventHandler) where T : IEventSystemHandler + { + Debug.Assert(!eventData.used); + eventExecutionDepth++; + + for (int i = EventListeners.Count - 1; i >= 0; i--) + { + ExecuteEvents.Execute(EventListeners[i], eventData, eventHandler); + } + + eventExecutionDepth--; + } + + /// + public virtual async void Register(GameObject listener) + { + if (EventListeners.Contains(listener)) { return; } + + if (eventExecutionDepth > 0) + { + await doneExecutingEvents; + } + + EventListeners.Add(listener); + } + + /// + public virtual async void Unregister(GameObject listener) + { + if (!EventListeners.Contains(listener)) { return; } + + if (eventExecutionDepth > 0) + { + await doneExecutingEvents; + } + + EventListeners.Remove(listener); + } + + #endregion IMixedRealityEventSystem Implementation + + // Example Event Pattern ############################################################# + + //public void RaiseGenericEvent(IEventSource eventSource) + //{ + // genericEventData.Initialize(eventSource); + // HandleEvent(genericEventData, GenericEventHandler); + //} + + //private static readonly ExecuteEvents.EventFunction GenericEventHandler = + // delegate (IEventHandler handler, BaseEventData eventData) + // { + // var casted = ExecuteEvents.ValidateEventData(eventData); + // handler.OnEventRaised(casted); + // }; + + // Example Event Pattern ############################################################# + } +} diff --git a/Services/BaseEventSystem.cs.meta b/Services/BaseEventSystem.cs.meta new file mode 100644 index 000000000..e12b44951 --- /dev/null +++ b/Services/BaseEventSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 0c1d40f0a4914a4cab53537be5a4b3f2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BaseExtensionService.cs b/Services/BaseExtensionService.cs new file mode 100644 index 000000000..1941909be --- /dev/null +++ b/Services/BaseExtensionService.cs @@ -0,0 +1,25 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Definitions; +using XRTK.Interfaces; + +namespace XRTK.Services +{ + /// + /// The base extension service implements and provides default properties for all extension services. + /// + /// + /// Empty, but reserved for future use, in case additional properties or methods are assigned. + /// + public abstract class BaseExtensionService : BaseServiceWithConstructor, IMixedRealityExtensionService + { + /// + /// Constructor. + /// + /// + /// + /// + public BaseExtensionService(string name, uint priority, BaseMixedRealityExtensionServiceProfile profile) : base(name, priority) { } + } +} diff --git a/Services/BaseExtensionService.cs.meta b/Services/BaseExtensionService.cs.meta new file mode 100644 index 000000000..258ae9e50 --- /dev/null +++ b/Services/BaseExtensionService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d09a1d0ad3164d1c862eff59c18999a7 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BaseService.cs b/Services/BaseService.cs new file mode 100644 index 000000000..dfcc94cb3 --- /dev/null +++ b/Services/BaseService.cs @@ -0,0 +1,68 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; + +namespace XRTK.Services +{ + /// + /// The base service implements and provides default properties for all services. + /// + public abstract class BaseService : Interfaces.IMixedRealityService + { + #region IMixedRealityService Implementation + + /// + public virtual string Name { get; protected set; } + + /// + public virtual uint Priority { get; protected set; } = 5; + + /// + public virtual void Initialize() { } + + /// + public virtual void Reset() { } + + /// + public virtual void Enable() { } + + /// + public virtual void Update() { } + + /// + public virtual void Disable() { } + + /// + public virtual void Destroy() { } + + /// + public virtual void OnApplicationFocus(bool isFocused) { } + + /// + public void OnApplicationPause(bool isPaused) { } + + #endregion IMixedRealityService Implementation + + #region IDisposable Implementation + + private bool disposed; + + ~BaseService() + { + OnDispose(true); + } + + public void Dispose() + { + if (disposed) { return; } + disposed = true; + GC.SuppressFinalize(this); + OnDispose(false); + } + + protected virtual void OnDispose(bool finalizing) { } + + #endregion IDisposable Implementation + } +} diff --git a/Services/BaseService.cs.meta b/Services/BaseService.cs.meta new file mode 100644 index 000000000..6bafb2078 --- /dev/null +++ b/Services/BaseService.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 8a345210af4f4cd4ba33c66cd8db888b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BaseServiceWithConstructor.cs b/Services/BaseServiceWithConstructor.cs new file mode 100644 index 000000000..3878b5e7a --- /dev/null +++ b/Services/BaseServiceWithConstructor.cs @@ -0,0 +1,39 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using XRTK.Interfaces; + +namespace XRTK.Services +{ + /// + /// Base with a constructor override. + /// + public abstract class BaseServiceWithConstructor : BaseService + { + /// + /// Constructor. + /// + /// + /// + public BaseServiceWithConstructor(string name = "", uint priority = 10) + { + if (string.IsNullOrWhiteSpace(name)) + { + name = GetType().Name; + } + + this.name = name; + this.priority = priority; + } + + private readonly string name; + + /// + public override string Name => name; + + private readonly uint priority; + + /// + public override uint Priority => priority; + } +} \ No newline at end of file diff --git a/Services/BaseServiceWithConstructor.cs.meta b/Services/BaseServiceWithConstructor.cs.meta new file mode 100644 index 000000000..9a7f6d9aa --- /dev/null +++ b/Services/BaseServiceWithConstructor.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 7e5aa56a94324699ad30cc81ae82357b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BaseSystem.cs b/Services/BaseSystem.cs new file mode 100644 index 000000000..7228f6d36 --- /dev/null +++ b/Services/BaseSystem.cs @@ -0,0 +1,26 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using XRTK.Definitions; + +namespace XRTK.Services +{ + /// + /// The base class for Mixed Reality Systems to inherit from. + /// + public abstract class BaseSystem : BaseServiceWithConstructor + { + /// + /// Constructor. + /// + /// + protected BaseSystem(BaseMixedRealityProfile profile) + { + if (profile == null) + { + throw new ArgumentException($"Missing the profile for {base.Name} system!"); + } + } + } +} \ No newline at end of file diff --git a/Services/BaseSystem.cs.meta b/Services/BaseSystem.cs.meta new file mode 100644 index 000000000..54fed524c --- /dev/null +++ b/Services/BaseSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 399f7be9491d4cfea8382168ae71ca80 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BoundarySystem.meta b/Services/BoundarySystem.meta new file mode 100644 index 000000000..98143ce0d --- /dev/null +++ b/Services/BoundarySystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d9aee18e1fd04e2c911d305a8a02f853 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/BoundarySystem/MixedRealityBoundarySystem.cs b/Services/BoundarySystem/MixedRealityBoundarySystem.cs new file mode 100644 index 000000000..8a75ab8d0 --- /dev/null +++ b/Services/BoundarySystem/MixedRealityBoundarySystem.cs @@ -0,0 +1,943 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using UnityEngine.Experimental.XR; +using UnityEngine.XR; +using XRTK.Definitions.BoundarySystem; +using XRTK.EventDatum.Boundary; +using XRTK.Interfaces.BoundarySystem; +using XRTK.Utilities; + +namespace XRTK.Services.BoundarySystem +{ + /// + /// The Boundary system controls the presentation and display of the users boundary in a scene. + /// + public class MixedRealityBoundarySystem : BaseEventSystem, IMixedRealityBoundarySystem + { + /// + /// Constructor. + /// + /// + public MixedRealityBoundarySystem(MixedRealityBoundaryVisualizationProfile profile) + : base(profile) + { + showFloor = profile.ShowFloor; + floorPhysicsLayer = profile.FloorPhysicsLayer; + FloorScale = profile.FloorScale; + FloorMaterial = profile.FloorMaterial; + showPlayArea = profile.ShowPlayArea; + PlayAreaMaterial = profile.PlayAreaMaterial; + playAreaPhysicsLayer = profile.PlayAreaPhysicsLayer; + BoundaryHeight = profile.BoundaryHeight; + showTrackedArea = profile.ShowTrackedArea; + TrackedAreaMaterial = profile.TrackedAreaMaterial; + trackedAreaPhysicsLayer = profile.TrackedAreaPhysicsLayer; + showBoundaryWalls = profile.ShowBoundaryWalls; + BoundaryWallMaterial = profile.BoundaryWallMaterial; + boundaryWallsPhysicsLayer = profile.BoundaryWallsPhysicsLayer; + showCeiling = profile.ShowBoundaryCeiling; + BoundaryCeilingMaterial = profile.BoundaryCeilingMaterial; + ceilingPhysicsLayer = profile.CeilingPhysicsLayer; + } + + #region IMixedRealityService Implementation + + private BoundaryEventData boundaryEventData = null; + + /// + public override void Initialize() + { + base.Initialize(); + + if (!Application.isPlaying) { return; } + + boundaryEventData = new BoundaryEventData(EventSystem.current); + + CalculateBoundaryBounds(); + Boundary.visible = true; + + if (ShowFloor) + { + GetFloorVisualization(); + } + + if (ShowPlayArea) + { + GetPlayAreaVisualization(); + } + + if (ShowTrackedArea) + { + GetTrackedAreaVisualization(); + } + + if (ShowBoundaryWalls) + { + GetBoundaryWallVisualization(); + } + + if (ShowBoundaryWalls) + { + GetBoundaryCeilingVisualization(); + } + + RaiseBoundaryVisualizationChanged(); + } + + /// + public override void Destroy() + { + // First, detach the child objects (we are tracking them separately) + // and clean up the parent. + if (boundaryVisualizationParent != null) + { + + if (Application.isEditor) + { + Object.DestroyImmediate(boundaryVisualizationParent); + } + else + { + boundaryVisualizationParent.transform.DetachChildren(); + Object.Destroy(boundaryVisualizationParent); + } + + boundaryVisualizationParent = null; + } + + // Next, clean up the detached children. + if (currentFloorObject != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(currentFloorObject); + } + else + { + Object.Destroy(currentFloorObject); + } + + currentFloorObject = null; + } + + if (currentPlayAreaObject != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(currentPlayAreaObject); + } + else + { + Object.Destroy(currentPlayAreaObject); + } + + currentPlayAreaObject = null; + } + + if (currentTrackedAreaObject != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(currentTrackedAreaObject); + } + else + { + Object.Destroy(currentTrackedAreaObject); + } + + currentTrackedAreaObject = null; + } + + if (currentBoundaryWallObject != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(currentBoundaryWallObject); + } + else + { + Object.Destroy(currentBoundaryWallObject); + } + + currentBoundaryWallObject = null; + } + + if (currentCeilingObject != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(currentCeilingObject); + } + else + { + Object.Destroy(currentCeilingObject); + } + + currentCeilingObject = null; + } + + showFloor = false; + showPlayArea = false; + showTrackedArea = false; + showBoundaryWalls = false; + showCeiling = false; + + RaiseBoundaryVisualizationChanged(); + } + + /// + /// Raises an event to indicate that the visualization of the boundary has been changed by the boundary system. + /// + private void RaiseBoundaryVisualizationChanged() + { + if (!Application.isPlaying) { return; } + boundaryEventData.Initialize(this, ShowFloor, ShowPlayArea, ShowTrackedArea, ShowBoundaryWalls, ShowBoundaryCeiling); + HandleEvent(boundaryEventData, OnVisualizationChanged); + } + + /// + /// Event sent whenever the boundary visualization changes. + /// + private static readonly ExecuteEvents.EventFunction OnVisualizationChanged = + delegate (IMixedRealityBoundaryHandler handler, BaseEventData eventData) + { + var boundaryEventData = ExecuteEvents.ValidateEventData(eventData); + handler.OnBoundaryVisualizationChanged(boundaryEventData); + }; + + #endregion IMixedRealityService Implementation + + #region IMixedRealtyEventSystem Implementation + + /// + public override void HandleEvent(BaseEventData eventData, ExecuteEvents.EventFunction eventHandler) + { + base.HandleEvent(eventData, eventHandler); + } + + /// + /// Registers the to listen for boundary events. + /// + /// + public override void Register(GameObject listener) + { + base.Register(listener); + } + + /// + /// UnRegisters the to listen for boundary events. + /// /// + /// + public override void Unregister(GameObject listener) + { + base.Unregister(listener); + } + + #endregion + + #region IMixedRealityEventSource Implementation + + /// + bool IEqualityComparer.Equals(object x, object y) + { + // There shouldn't be other Boundary Managers to compare to. + return false; + } + + /// + public int GetHashCode(object obj) + { + return Mathf.Abs(SourceName.GetHashCode()); + } + + /// + public uint SourceId { get; } = 0; + + /// + public string SourceName { get; } = "Mixed Reality Boundary System"; + + #endregion IMixedRealityEventSource Implementation + + #region IMixedRealityBoundarySystem Implementation + + /// + /// Layer used to tell the (non-floor) boundary objects to not accept raycasts + /// + private const int DefaultIgnoreRaycastLayer = 2; + + /// + /// The thickness of three dimensional generated boundary objects. + /// + private const float BoundaryObjectThickness = 0.005f; + + /// + /// A small offset to avoid render conflicts, primarily with the floor. + /// + /// + /// This offset is used to avoid consuming multiple physics layers. + /// + private const float BoundaryObjectRenderOffset = 0.001f; + + private GameObject boundaryVisualizationParent; + + /// + /// Parent which will encapsulate all of the teleportable boundary visualizations. + /// + private GameObject BoundaryVisualizationParent + { + get + { + if (boundaryVisualizationParent != null) + { + return boundaryVisualizationParent; + } + + var visualizationParent = new GameObject("Boundary System Visualizations"); + visualizationParent.transform.parent = MixedRealityToolkit.Instance.MixedRealityPlayspace; + return boundaryVisualizationParent = visualizationParent; + } + } + + /// + public float BoundaryHeight { get; set; } + + private bool showFloor; + + /// + public bool ShowFloor + { + get => showFloor; + set + { + if (showFloor != value) + { + showFloor = value; + + if (value && (currentFloorObject == null)) + { + GetFloorVisualization(); + } + + if (currentFloorObject != null) + { + currentFloorObject.SetActive(value); + } + + RaiseBoundaryVisualizationChanged(); + } + } + } + + /// + public Vector2 FloorScale { get; } + + /// + public Material FloorMaterial { get; } + + private bool showPlayArea; + + private int floorPhysicsLayer; + + /// + public int FloorPhysicsLayer + { + get + { + if (currentFloorObject != null) + { + floorPhysicsLayer = currentFloorObject.layer; + } + + return floorPhysicsLayer; + } + set + { + floorPhysicsLayer = value; + if (currentFloorObject != null) + { + currentFloorObject.layer = floorPhysicsLayer; + } + } + } + + /// + public bool ShowPlayArea + { + get => showPlayArea; + set + { + if (showPlayArea != value) + { + showPlayArea = value; + + if (value && (currentPlayAreaObject == null)) + { + GetPlayAreaVisualization(); + } + + if (currentPlayAreaObject != null) + { + currentPlayAreaObject.SetActive(value); + } + + RaiseBoundaryVisualizationChanged(); + } + } + } + + private bool showTrackedArea; + + /// + public int PlayAreaPhysicsLayer + { + get + { + if (currentPlayAreaObject != null) + { + playAreaPhysicsLayer = currentPlayAreaObject.layer; + } + + return playAreaPhysicsLayer; + } + set + { + playAreaPhysicsLayer = value; + + if (currentPlayAreaObject != null) + { + currentPlayAreaObject.layer = playAreaPhysicsLayer; + } + } + } + + private int playAreaPhysicsLayer; + + /// + public Material PlayAreaMaterial { get; } + + /// + public bool ShowTrackedArea + { + get => showTrackedArea; + set + { + if (showTrackedArea != value) + { + showTrackedArea = value; + + if (value && (currentTrackedAreaObject == null)) + { + GetTrackedAreaVisualization(); + } + + if (currentTrackedAreaObject != null) + { + currentTrackedAreaObject.SetActive(value); + } + + RaiseBoundaryVisualizationChanged(); + } + } + } + + private bool showBoundaryWalls = false; + + private int trackedAreaPhysicsLayer; + + /// + public int TrackedAreaPhysicsLayer + { + get + { + if (currentTrackedAreaObject != null) + { + trackedAreaPhysicsLayer = currentTrackedAreaObject.layer; + } + + return trackedAreaPhysicsLayer; + } + set + { + trackedAreaPhysicsLayer = value; + + if (currentTrackedAreaObject != null) + { + currentTrackedAreaObject.layer = trackedAreaPhysicsLayer; + } + } + } + + /// + public Material TrackedAreaMaterial { get; } + + /// + public bool ShowBoundaryWalls + { + get => showBoundaryWalls; + set + { + if (showBoundaryWalls != value) + { + showBoundaryWalls = value; + + if (value && (currentBoundaryWallObject == null)) + { + GetBoundaryWallVisualization(); + } + + if (currentBoundaryWallObject != null) + { + currentBoundaryWallObject.SetActive(value); + } + + RaiseBoundaryVisualizationChanged(); + } + } + } + + private bool showCeiling = false; + + private int boundaryWallsPhysicsLayer; + + /// + public int BoundaryWallsPhysicsLayer + { + get + { + if (currentBoundaryWallObject != null) + { + boundaryWallsPhysicsLayer = currentBoundaryWallObject.layer; + } + + return boundaryWallsPhysicsLayer; + } + set + { + boundaryWallsPhysicsLayer = value; + + if (currentBoundaryWallObject != null) + { + currentBoundaryWallObject.layer = boundaryWallsPhysicsLayer; + } + } + } + + /// + public Material BoundaryWallMaterial { get; } + + /// + public bool ShowBoundaryCeiling + { + get => showCeiling; + set + { + if (showCeiling != value) + { + showCeiling = value; + + if (value && (currentCeilingObject == null)) + { + GetBoundaryCeilingVisualization(); + } + + if (currentCeilingObject != null) + { + currentCeilingObject.SetActive(value); + } + + RaiseBoundaryVisualizationChanged(); + } + } + } + + private int ceilingPhysicsLayer; + + /// + public int CeilingPhysicsLayer + { + get + { + if (currentCeilingObject != null) + { + ceilingPhysicsLayer = currentCeilingObject.layer; + } + + return ceilingPhysicsLayer; + } + set + { + ceilingPhysicsLayer = value; + + if (currentCeilingObject != null) + { + currentFloorObject.layer = ceilingPhysicsLayer; + } + } + } + + /// + public Material BoundaryCeilingMaterial { get; } + + /// + public Edge[] Bounds { get; private set; } = new Edge[0]; + + /// + public float? FloorHeight { get; private set; } + + /// + public bool Contains(Vector3 location, Boundary.Type boundaryType = Boundary.Type.TrackedArea) + { + if (!EdgeUtilities.IsValidPoint(location)) + { + // Invalid location. + return false; + } + + if (!FloorHeight.HasValue) + { + // No floor. + return false; + } + + // Handle the user teleporting (boundary moves with them). + location = MixedRealityToolkit.Instance.MixedRealityPlayspace.InverseTransformPoint(location); + + if (FloorHeight.Value > location.y || + BoundaryHeight < location.y) + { + // Location below the floor or above the boundary height. + return false; + } + + // Boundary coordinates are always "on the floor" + var point = new Vector2(location.x, location.z); + + switch (boundaryType) + { + case Boundary.Type.PlayArea when rectangularBounds != null: + // Check the inscribed rectangle. + return rectangularBounds.IsInsideBoundary(point); + case Boundary.Type.TrackedArea: + // Check the geometry + return EdgeUtilities.IsInsideBoundary(Bounds, point); + default: + // Not in either boundary type. + return false; + } + } + + /// + public bool TryGetRectangularBoundsParams(out Vector2 center, out float angle, out float width, out float height) + { + if (rectangularBounds == null || !rectangularBounds.IsValid) + { + center = EdgeUtilities.InvalidPoint; + angle = 0f; + width = 0f; + height = 0f; + return false; + } + + // Handle the user teleporting (boundary moves with them). + var transformedCenter = MixedRealityToolkit.Instance.MixedRealityPlayspace.TransformPoint( + new Vector3(rectangularBounds.Center.x, 0f, rectangularBounds.Center.y)); + + center = new Vector2(transformedCenter.x, transformedCenter.z); + angle = rectangularBounds.Angle; + width = rectangularBounds.Width; + height = rectangularBounds.Height; + return true; + } + + /// + public GameObject GetFloorVisualization() + { + if (!Application.isPlaying) { return null; } + + if (currentFloorObject != null) + { + return currentFloorObject; + } + + if (!FloorHeight.HasValue) + { + // We were unable to locate the floor. + return null; + } + + var floorScale = FloorScale; + + // Render the floor. + currentFloorObject = GameObject.CreatePrimitive(PrimitiveType.Cube); + currentFloorObject.name = "Boundary System Floor"; + currentFloorObject.transform.localScale = new Vector3(floorScale.x, BoundaryObjectThickness, floorScale.y); + currentFloorObject.transform.Translate(new Vector3( + MixedRealityToolkit.Instance.MixedRealityPlayspace.position.x, + FloorHeight.Value - (currentFloorObject.transform.localScale.y * 0.5f), + MixedRealityToolkit.Instance.MixedRealityPlayspace.position.z)); + currentFloorObject.layer = FloorPhysicsLayer; + currentFloorObject.GetComponent().sharedMaterial = FloorMaterial; + + return currentFloorObject; + } + + /// + public GameObject GetPlayAreaVisualization() + { + if (!Application.isPlaying) { return null; } + + if (currentPlayAreaObject != null) + { + return currentPlayAreaObject; + } + + // Get the rectangular bounds. + + if (!TryGetRectangularBoundsParams(out var center, out var angle, out var width, out var height)) + { + // No rectangular bounds, therefore cannot create the play area. + return null; + } + + // Render the rectangular bounds. + if (!EdgeUtilities.IsValidPoint(center)) + { + // Invalid rectangle / play area not found + return null; + } + + currentPlayAreaObject = GameObject.CreatePrimitive(PrimitiveType.Quad); + currentPlayAreaObject.name = "Play Area"; + currentPlayAreaObject.layer = PlayAreaPhysicsLayer; + currentPlayAreaObject.transform.Translate(new Vector3(center.x, BoundaryObjectRenderOffset, center.y)); + currentPlayAreaObject.transform.Rotate(new Vector3(90f, -angle, 0.0f)); + currentPlayAreaObject.transform.localScale = new Vector3(width, height, 1.0f); + currentPlayAreaObject.GetComponent().sharedMaterial = PlayAreaMaterial; + + currentPlayAreaObject.transform.parent = BoundaryVisualizationParent.transform; + + return currentPlayAreaObject; + } + + /// + public GameObject GetTrackedAreaVisualization() + { + if (!Application.isPlaying) { return null; } + + if (currentTrackedAreaObject != null) + { + return currentTrackedAreaObject; + } + + if (Bounds.Length == 0) + { + // If we do not have boundary edges, we cannot render them. + return null; + } + + // Get the line vertices + var lineVertices = new List(); + + for (int i = 0; i < Bounds.Length; i++) + { + lineVertices.Add(new Vector3(Bounds[i].PointA.x, 0f, Bounds[i].PointA.y)); + } + + // Add the first vertex again to ensure the loop closes. + lineVertices.Add(lineVertices[0]); + + // We use an empty object and attach a line renderer. + currentTrackedAreaObject = new GameObject("Tracked Area") + { + layer = DefaultIgnoreRaycastLayer + }; + currentTrackedAreaObject.AddComponent(); + currentTrackedAreaObject.transform.Translate(new Vector3( + MixedRealityToolkit.Instance.MixedRealityPlayspace.position.x, + BoundaryObjectRenderOffset, + MixedRealityToolkit.Instance.MixedRealityPlayspace.position.z)); + currentPlayAreaObject.layer = TrackedAreaPhysicsLayer; + + // Configure the renderer properties. + const float lineWidth = 0.01f; + var lineRenderer = currentTrackedAreaObject.GetComponent(); + lineRenderer.sharedMaterial = TrackedAreaMaterial; + lineRenderer.useWorldSpace = false; + lineRenderer.startWidth = lineWidth; + lineRenderer.endWidth = lineWidth; + lineRenderer.positionCount = lineVertices.Count; + lineRenderer.SetPositions(lineVertices.ToArray()); + + currentTrackedAreaObject.transform.parent = BoundaryVisualizationParent.transform; + + return currentTrackedAreaObject; + } + + /// + public GameObject GetBoundaryWallVisualization() + { + if (!Application.isPlaying) { return null; } + + if (currentBoundaryWallObject != null) + { + return currentBoundaryWallObject; + } + + if (!FloorHeight.HasValue) + { + // We need a floor on which to place the walls. + return null; + } + + if (Bounds.Length == 0) + { + // If we do not have boundary edges, we cannot render walls. + return null; + } + + currentBoundaryWallObject = new GameObject("Tracked Area Walls") + { + layer = BoundaryWallsPhysicsLayer + }; + + // Create and parent the child objects + const float wallDepth = BoundaryObjectThickness; + + for (int i = 0; i < Bounds.Length; i++) + { + var wall = GameObject.CreatePrimitive(PrimitiveType.Cube); + wall.name = $"Wall_{i}"; + wall.GetComponent().sharedMaterial = BoundaryWallMaterial; + wall.transform.localScale = new Vector3((Bounds[i].PointB - Bounds[i].PointA).magnitude, BoundaryHeight, wallDepth); + wall.layer = DefaultIgnoreRaycastLayer; + + // Position and rotate the wall. + var mid = Vector2.Lerp(Bounds[i].PointA, Bounds[i].PointB, 0.5f); + wall.transform.position = new Vector3(mid.x, (BoundaryHeight * 0.5f), mid.y); + var rotationAngle = MathUtilities.GetAngleBetween(Bounds[i].PointB, Bounds[i].PointA); + wall.transform.rotation = Quaternion.Euler(0.0f, -rotationAngle, 0.0f); + + wall.transform.parent = currentBoundaryWallObject.transform; + } + + currentBoundaryWallObject.transform.parent = BoundaryVisualizationParent.transform; + + return currentBoundaryWallObject; + } + + /// + public GameObject GetBoundaryCeilingVisualization() + { + if (!Application.isPlaying) { return null; } + + if (currentCeilingObject != null) + { + return currentCeilingObject; + } + + if (Bounds.Length == 0) + { + // If we do not have boundary edges, we cannot render a ceiling. + return null; + } + + // Get the smallest rectangle that contains the entire boundary. + var boundaryBoundingBox = new Bounds(); + + for (int i = 0; i < Bounds.Length; i++) + { + // The boundary geometry is a closed loop. As such, we can encapsulate only PointA of each Edge. + boundaryBoundingBox.Encapsulate(new Vector3(Bounds[i].PointA.x, BoundaryHeight * 0.5f, Bounds[i].PointA.y)); + } + + // Render the ceiling. + const float ceilingDepth = BoundaryObjectThickness; + currentCeilingObject = GameObject.CreatePrimitive(PrimitiveType.Cube); + currentCeilingObject.name = "Ceiling"; + currentCeilingObject.layer = DefaultIgnoreRaycastLayer; + currentCeilingObject.transform.localScale = new Vector3(boundaryBoundingBox.size.x, ceilingDepth, boundaryBoundingBox.size.z); + currentCeilingObject.transform.Translate(new Vector3( + boundaryBoundingBox.center.x, + BoundaryHeight + (currentCeilingObject.transform.localScale.y * 0.5f), + boundaryBoundingBox.center.z)); + currentCeilingObject.GetComponent().sharedMaterial = BoundaryCeilingMaterial; + currentCeilingObject.layer = CeilingPhysicsLayer; + currentCeilingObject.transform.parent = BoundaryVisualizationParent.transform; + + return currentCeilingObject; + } + + #endregion IMixedRealityBoundarySystem Implementation + + /// + /// The largest rectangle that is contained withing the play space geometry. + /// + private InscribedRectangle rectangularBounds; + + private GameObject currentFloorObject; + private GameObject currentPlayAreaObject; + private GameObject currentTrackedAreaObject; + private GameObject currentBoundaryWallObject; + private GameObject currentCeilingObject; + + /// + /// Retrieves the boundary geometry and creates the boundary and inscribed play space volumes. + /// + private void CalculateBoundaryBounds() + { + // Reset the bounds + Bounds = new Edge[0]; + FloorHeight = null; + rectangularBounds = null; + + // Boundaries are supported for Room Scale experiences only. + if (XRDevice.GetTrackingSpaceType() != TrackingSpaceType.RoomScale) + { + return; + } + + // Get the boundary geometry. + var boundaryGeometry = new List(0); + var boundaryEdges = new List(0); + + if (Boundary.TryGetGeometry(boundaryGeometry, Boundary.Type.TrackedArea)) + { + // FloorHeight starts out as null. Use a suitably high value for the floor to ensure + // that we do not accidentally set it too low. + var floorHeight = float.MaxValue; + + for (int i = 0; i < boundaryGeometry.Count; i++) + { + var pointA = boundaryGeometry[i]; + var pointB = boundaryGeometry[(i + 1) % boundaryGeometry.Count]; + boundaryEdges.Add(new Edge(pointA, pointB)); + + floorHeight = Mathf.Min(floorHeight, boundaryGeometry[i].y); + } + + FloorHeight = floorHeight; + Bounds = boundaryEdges.ToArray(); + CreateInscribedBounds(); + } + else if (XRSettings.enabled && Boundary.configured) + { + Debug.LogWarning("Failed to calculate boundary bounds."); + } + } + + /// + /// Creates the two dimensional volume described by the largest rectangle that + /// is contained withing the play space geometry and the configured height. + /// + private void CreateInscribedBounds() + { + // We always use the same seed so that from run to run, the inscribed bounds are consistent. + rectangularBounds = new InscribedRectangle(Bounds, Mathf.Abs("Mixed Reality Toolkit".GetHashCode())); + } + } +} diff --git a/Services/BoundarySystem/MixedRealityBoundarySystem.cs.meta b/Services/BoundarySystem/MixedRealityBoundarySystem.cs.meta new file mode 100644 index 000000000..53c605207 --- /dev/null +++ b/Services/BoundarySystem/MixedRealityBoundarySystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 540e80b732c54c8da39e8a9b4f8649be +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/CameraSystem.meta b/Services/CameraSystem.meta new file mode 100644 index 000000000..764770f1a --- /dev/null +++ b/Services/CameraSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 751348d76b37fb94194df3ae2eb11d17 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/CameraSystem/MixedRealityCameraSystem.cs b/Services/CameraSystem/MixedRealityCameraSystem.cs new file mode 100644 index 000000000..d91f24a00 --- /dev/null +++ b/Services/CameraSystem/MixedRealityCameraSystem.cs @@ -0,0 +1,119 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using XRTK.Definitions; +using XRTK.Interfaces.CameraSystem; +using XRTK.Utilities; +using XRTK.Extensions; + +namespace XRTK.Services.CameraSystem +{ + public class MixedRealityCameraSystem : BaseSystem, IMixedRealityCameraSystem + { + /// + /// Constructor. + /// + /// + public MixedRealityCameraSystem(MixedRealityCameraProfile profile) + : base(profile) + { + this.profile = profile; + } + + private readonly MixedRealityCameraProfile profile; + + /// + public bool IsOpaque + { + get + { + currentDisplayType = DisplayType.Opaque; +#if UNITY_WSA + if (!UnityEngine.XR.WSA.HolographicSettings.IsDisplayOpaque) + { + currentDisplayType = DisplayType.Transparent; + } +#elif PLATFORM_LUMIN + currentDisplayType = DisplayType.Transparent; +#endif + return currentDisplayType == DisplayType.Opaque; + } + } + + private DisplayType currentDisplayType; + private bool cameraOpaqueLastFrame = false; + + private enum DisplayType + { + Opaque = 0, + Transparent + } + + /// + public override void Initialize() + { + cameraOpaqueLastFrame = IsOpaque; + + if (IsOpaque) + { + ApplySettingsForOpaqueDisplay(); + } + else + { + ApplySettingsForTransparentDisplay(); + } + } + + public override void Enable() + { + if (Application.isPlaying) + { + if (profile.IsCameraPersistent) + { + CameraCache.Main.transform.root.DontDestroyOnLoad(); + } + } + } + + /// + public override void Update() + { + if (IsOpaque != cameraOpaqueLastFrame) + { + cameraOpaqueLastFrame = IsOpaque; + + if (IsOpaque) + { + ApplySettingsForOpaqueDisplay(); + } + else + { + ApplySettingsForTransparentDisplay(); + } + } + } + + /// + /// Applies opaque settings from camera profile. + /// + private void ApplySettingsForOpaqueDisplay() + { + CameraCache.Main.clearFlags = profile.CameraClearFlagsOpaqueDisplay; + CameraCache.Main.nearClipPlane = profile.NearClipPlaneOpaqueDisplay; + CameraCache.Main.backgroundColor = profile.BackgroundColorOpaqueDisplay; + QualitySettings.SetQualityLevel(profile.OpaqueQualityLevel, false); + } + + /// + /// Applies transparent settings from camera profile. + /// + private void ApplySettingsForTransparentDisplay() + { + CameraCache.Main.clearFlags = profile.CameraClearFlagsTransparentDisplay; + CameraCache.Main.backgroundColor = profile.BackgroundColorTransparentDisplay; + CameraCache.Main.nearClipPlane = profile.NearClipPlaneTransparentDisplay; + QualitySettings.SetQualityLevel(profile.TransparentQualityLevel, false); + } + } +} diff --git a/Services/CameraSystem/MixedRealityCameraSystem.cs.meta b/Services/CameraSystem/MixedRealityCameraSystem.cs.meta new file mode 100644 index 000000000..294c7058d --- /dev/null +++ b/Services/CameraSystem/MixedRealityCameraSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: bd8e1696436ac914aad1d8e18e6f4bd9 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/DiagnosticsSystem.meta b/Services/DiagnosticsSystem.meta new file mode 100644 index 000000000..3ddd2e0fc --- /dev/null +++ b/Services/DiagnosticsSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 7ec1626dc4194af49f28efda53153aa2 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs b/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs new file mode 100644 index 000000000..8f3847ff9 --- /dev/null +++ b/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs @@ -0,0 +1,253 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions.Diagnostics; +using XRTK.EventDatum.Diagnostics; +using XRTK.Interfaces.Diagnostics; +using Object = UnityEngine.Object; + +namespace XRTK.Services.DiagnosticsSystem +{ + /// + /// The default implementation of the + /// + public class MixedRealityDiagnosticsSystem : BaseEventSystem, IMixedRealityDiagnosticsSystem + { + public MixedRealityDiagnosticsSystem(MixedRealityDiagnosticsProfile profile) + : base(profile) + { + if (MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile == null) + { + throw new Exception("Missing Diagnostics system profile!"); + } + } + + #region IMixedRealityService Implementation + + /// + public override void Initialize() + { + base.Initialize(); + + if (!Application.isPlaying) { return; } + + eventData = new DiagnosticsEventData(EventSystem.current); + + ShowCpu = MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.ShowCpu; + CpuUseTracker = new CpuUseTracker(MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.CpuBuffer); + ShowFps = MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.ShowFps; + FpsUseTracker = new FpsUseTracker(MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.FpsBuffer); + ShowMemory = MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.ShowMemory; + MemoryUseTracker = new MemoryUseTracker(MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.MemoryBuffer); + + // Setting the visibility creates our GameObject reference, so set it last after we've configured our settings. + Visible = MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.Visible; + + RaiseDiagnosticsChanged(); + } + + /// + public override void Destroy() + { + base.Destroy(); + + diagnosticsHandler = null; + + if (diagnosticVisualization != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(diagnosticVisualization); + } + else + { + Object.Destroy(diagnosticVisualization); + } + + diagnosticVisualization = null; + } + + visible = false; + showCpu = false; + showFps = false; + showMemory = false; + + if (Application.isPlaying) + { + RaiseDiagnosticsChanged(); + } + } + + #endregion IMixedRealityService Implementation + + #region IMixedRealityDiagnosticsSystem + + private bool visible; + + /// + public bool Visible + { + get => visible; + set + { + if (value != visible) + { + visible = value; + DiagnosticVisualization.SetActive(value); + + RaiseDiagnosticsChanged(); + } + } + } + + private bool showCpu; + + /// + public bool ShowCpu + { + get => showCpu; + set + { + if (value != showCpu) + { + showCpu = value; + + if (!value) + { + CpuUseTracker.Reset(); + } + + RaiseDiagnosticsChanged(); + } + } + } + + /// + public CpuUseTracker CpuUseTracker { get; private set; } + + private bool showFps; + + /// + public bool ShowFps + { + get => showFps; + set + { + if (value != showFps) + { + showFps = value; + RaiseDiagnosticsChanged(); + } + } + } + + /// + public FpsUseTracker FpsUseTracker { get; private set; } + + private bool showMemory; + + /// + public bool ShowMemory + { + get => showMemory; + set + { + if (value != showMemory) + { + showMemory = value; + RaiseDiagnosticsChanged(); + } + } + } + + /// + public MemoryUseTracker MemoryUseTracker { get; private set; } + + private IMixedRealityDiagnosticsHandler diagnosticsHandler; + + private GameObject diagnosticVisualization; + + /// + public GameObject DiagnosticVisualization + { + get + { + if (diagnosticVisualization != null) + { + return diagnosticVisualization; + } + + if (!Visible) + { + // Don't create a GameObject if it's not needed + return null; + } + + diagnosticVisualization = GameObject.CreatePrimitive(PrimitiveType.Quad); + diagnosticVisualization.name = "Diagnostics"; + diagnosticVisualization.layer = Physics.IgnoreRaycastLayer; + + // Place it 2 meters in front of the user. + //diagnosticVisualization.transform.position = CameraCache.Main.transform.forward * 2f; + + var handlerType = MixedRealityToolkit.Instance.ActiveProfile.DiagnosticsSystemProfile.HandlerType; + + // TODO: Possibly add a collider and a solver to keep it in front of the users face? + + if (handlerType.Type != null) + { + diagnosticVisualization.AddComponent(handlerType.Type); + diagnosticsHandler = diagnosticVisualization.GetComponent(); + Debug.Assert(diagnosticsHandler != null); + return diagnosticVisualization; + } + + Debug.LogError("A handler type must be assigned to the diagnostics profile."); + return null; + } + } + + #endregion IMixedRealityDiagnosticsSystem + + #region IMixedRealityEventSource + + private DiagnosticsEventData eventData; + + /// + public uint SourceId => (uint)SourceName.GetHashCode(); + + /// + public string SourceName => "Mixed Reality Diagnostics System"; + + /// + public new bool Equals(object x, object y) => false; + + /// + public int GetHashCode(object obj) => SourceName.GetHashCode(); + + private void RaiseDiagnosticsChanged() + { + eventData.Initialize(this, Visible, ShowCpu, ShowFps, ShowMemory); + + // Manually send it to our diagnostics handler, no matter who's listening. + diagnosticsHandler?.OnDiagnosticSettingsChanged(eventData); + + HandleEvent(eventData, OnDiagnosticsChanged); + } + + /// + /// Event sent whenever the diagnostics visualization changes. + /// + private static readonly ExecuteEvents.EventFunction OnDiagnosticsChanged = + delegate (IMixedRealityDiagnosticsHandler handler, BaseEventData eventData) + { + var diagnosticsEventsData = ExecuteEvents.ValidateEventData(eventData); + handler.OnDiagnosticSettingsChanged(diagnosticsEventsData); + }; + + #endregion IMixedRealityEventSource + } +} diff --git a/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs.meta b/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs.meta new file mode 100644 index 000000000..65516c881 --- /dev/null +++ b/Services/DiagnosticsSystem/MixedRealityDiagnosticsSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: f9574807e4b64006b062311e4e4d3f4b +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/InputSystem.meta b/Services/InputSystem.meta new file mode 100644 index 000000000..9c32b9b4e --- /dev/null +++ b/Services/InputSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 850bbf63a96a430fa9050ce12260ab12 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/InputSystem/BaseGenericInputSource.cs b/Services/InputSystem/BaseGenericInputSource.cs new file mode 100644 index 000000000..66d07e985 --- /dev/null +++ b/Services/InputSystem/BaseGenericInputSource.cs @@ -0,0 +1,85 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections; +using XRTK.Interfaces.InputSystem; + +namespace XRTK.Services.InputSystem.Sources +{ + /// + /// Base class for input sources that don't inherit from MonoBehaviour. + /// This base class does not support adding or removing pointers, because many will never + /// pass pointers in their constructors and will fall back to either the Gaze or Mouse Pointer. + /// + public class BaseGenericInputSource : IMixedRealityInputSource + { + /// + /// Constructor. + /// + /// + /// + public BaseGenericInputSource(string name, IMixedRealityPointer[] pointers = null) + { + SourceId = MixedRealityToolkit.InputSystem.GenerateNewSourceId(); + SourceName = name; + Pointers = pointers ?? new[] { MixedRealityToolkit.InputSystem.GazeProvider.GazePointer }; + } + + /// + public uint SourceId { get; } + + /// + public string SourceName { get; } + + /// + public virtual IMixedRealityPointer[] Pointers { get; } + + #region IEquality Implementation + + public static bool Equals(IMixedRealityInputSource left, IMixedRealityInputSource right) + { + return left.Equals(right); + } + + /// + bool IEqualityComparer.Equals(object left, object right) + { + return left.Equals(right); + } + + /// + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { return false; } + if (ReferenceEquals(this, obj)) { return true; } + if (obj.GetType() != GetType()) { return false; } + + return Equals((IMixedRealityInputSource)obj); + } + + private bool Equals(IMixedRealityInputSource other) + { + return other != null && SourceId == other.SourceId && string.Equals(SourceName, other.SourceName); + } + + /// + int IEqualityComparer.GetHashCode(object obj) + { + return obj.GetHashCode(); + } + + /// + public override int GetHashCode() + { + unchecked + { + int hashCode = 0; + hashCode = (hashCode * 397) ^ (int)SourceId; + hashCode = (hashCode * 397) ^ (SourceName != null ? SourceName.GetHashCode() : 0); + return hashCode; + } + } + + #endregion IEquality Implementation + } +} diff --git a/Services/InputSystem/BaseGenericInputSource.cs.meta b/Services/InputSystem/BaseGenericInputSource.cs.meta new file mode 100644 index 000000000..ceebebc3e --- /dev/null +++ b/Services/InputSystem/BaseGenericInputSource.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c8ec08b487ad4d4d93bdb577519a4875 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/InputSystem/FocusProvider.cs b/Services/InputSystem/FocusProvider.cs new file mode 100644 index 000000000..db57ce0ab --- /dev/null +++ b/Services/InputSystem/FocusProvider.cs @@ -0,0 +1,959 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions.Physics; +using XRTK.EventDatum.Input; +using XRTK.Extensions; +using XRTK.Interfaces.InputSystem; +using XRTK.Utilities; +using XRTK.Utilities.Physics; + +namespace XRTK.Services.InputSystem +{ + /// + /// The focus provider handles the focused objects per input source. + /// + /// There are convenience properties for getting only Gaze Pointer if needed. + public class FocusProvider : BaseService, IMixedRealityFocusProvider + { + private readonly HashSet pointers = new HashSet(); + private readonly HashSet pendingOverallFocusEnterSet = new HashSet(); + private readonly HashSet pendingOverallFocusExitSet = new HashSet(); + private readonly List pendingPointerSpecificFocusChange = new List(); + + #region IFocusProvider Properties + + /// + public override string Name => "Focus Provider"; + + /// + public override uint Priority => 2; + + /// + float IMixedRealityFocusProvider.GlobalPointingExtent + { + get + { + if (MixedRealityToolkit.HasActiveProfile && + MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile != null) + { + return MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.PointingExtent; + } + + return 10f; + } + } + + private LayerMask[] focusLayerMasks = null; + + /// + public LayerMask[] FocusLayerMasks + { + get + { + if (focusLayerMasks == null) + { + if (MixedRealityToolkit.HasActiveProfile && + MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled && + MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile != null) + { + return focusLayerMasks = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.PointingRaycastLayerMasks; + } + + return focusLayerMasks = new LayerMask[] { Physics.DefaultRaycastLayers }; + } + + return focusLayerMasks; + } + } + + private Camera uiRaycastCamera = null; + + /// + public Camera UIRaycastCamera + { + get + { + if (uiRaycastCamera == null) + { + EnsureUiRaycastCameraSetup(); + } + + return uiRaycastCamera; + } + } + + /// + public GameObject OverrideFocusedObject { get; set; } + + #endregion IFocusProvider Properties + + /// + /// Checks if the is setup correctly to start this service. + /// + private bool IsSetupValid + { + get + { + if (!MixedRealityToolkit.Instance.ActiveProfile.IsInputSystemEnabled) { return false; } + + if (MixedRealityToolkit.InputSystem == null) + { + Debug.LogError($"Unable to start {Name}. An Input System is required for this feature."); + return false; + } + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile == null) + { + Debug.LogError($"Unable to start {Name}. An Input System Profile is required for this feature."); + return false; + } + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile == null) + { + Debug.LogError($"Unable to start {Name}. An Pointer Profile is required for this feature."); + return false; + } + + return true; + } + } + + /// + /// GazeProvider is a little special, so we keep track of it even if it's not a registered pointer. For the sake + /// of StabilizationPlaneModifier and potentially other components that care where the user's looking, we need + /// to do a gaze raycast even if gaze isn't used for focus. + /// + private PointerData gazeProviderPointingData; + + /// + /// Cached reference to the new raycast position. + /// + /// Only used to update UI raycast results. + private Vector3 newUiRaycastPosition = Vector3.zero; + + [Serializable] + private class PointerData : IPointerResult, IEquatable + { + public readonly IMixedRealityPointer Pointer; + + /// + public Vector3 StartPoint { get; private set; } + + /// + public FocusDetails Details => focusDetails; + + private FocusDetails focusDetails = new FocusDetails(); + + /// + public GameObject CurrentPointerTarget => Details.Object; + + /// + public GameObject PreviousPointerTarget { get; private set; } + + /// + public int RayStepIndex { get; private set; } + + /// + /// The graphic input event data used for raycasting uGUI elements. + /// + public GraphicInputEventData GraphicEventData + { + get + { + if (graphicData == null) + { + graphicData = new GraphicInputEventData(EventSystem.current); + graphicData.Clear(); + } + + Debug.Assert(graphicData != null); + + return graphicData; + } + } + + private GraphicInputEventData graphicData; + private Vector3 pointLocalSpace; + private Vector3 normalLocalSpace; + private bool pointerWasLocked; + + /// + /// Constructor. + /// + /// + public PointerData(IMixedRealityPointer pointer) + { + Pointer = pointer; + } + + /// + /// Update focus information from a physics raycast + /// + public void UpdateHit(RaycastHit hit, RayStep sourceRay, int rayStepIndex) + { + PreviousPointerTarget = Details.Object; + RayStepIndex = rayStepIndex; + StartPoint = sourceRay.Origin; + + focusDetails.LastRaycastHit = hit; + focusDetails.Point = hit.point; + focusDetails.Normal = hit.normal; + focusDetails.Object = hit.transform.gameObject; + + pointerWasLocked = false; + } + + /// + /// Update focus information from a Canvas raycast + /// + public void UpdateHit(RaycastResult result, RaycastHit hit, RayStep sourceRay, int rayStepIndex) + { + // We do not update the PreviousPointerTarget here because + // it's already been updated in the first physics raycast. + + RayStepIndex = rayStepIndex; + StartPoint = sourceRay.Origin; + + focusDetails.Point = hit.point; + focusDetails.Normal = hit.normal; + focusDetails.Object = result.gameObject; + } + + public void UpdateHit() + { + PreviousPointerTarget = Details.Object; + + RayStep firstStep = Pointer.Rays[0]; + RayStep finalStep = Pointer.Rays[Pointer.Rays.Length - 1]; + RayStepIndex = 0; + + StartPoint = firstStep.Origin; + + focusDetails.Point = finalStep.Terminus; + focusDetails.Normal = -finalStep.Direction; + focusDetails.Object = null; + + pointerWasLocked = false; + } + + /// + /// Update focus information while focus is locked. If the object is moving, + /// this updates the hit point to its new world transform. + /// + public void UpdateFocusLockedHit() + { + if (!pointerWasLocked) + { + PreviousPointerTarget = focusDetails.Object; + pointLocalSpace = focusDetails.Object.transform.InverseTransformPoint(focusDetails.Point); + normalLocalSpace = focusDetails.Object.transform.InverseTransformDirection(focusDetails.Normal); + pointerWasLocked = true; + } + + if (focusDetails.Object != null && focusDetails.Object.transform != null) + { + // In case the focused object is moving, we need to update the focus point based on the object's new transform. + focusDetails.Point = focusDetails.Object.transform.TransformPoint(pointLocalSpace); + focusDetails.Normal = focusDetails.Object.transform.TransformDirection(normalLocalSpace); + } + + StartPoint = Pointer.Rays[0].Origin; + + // In order to provide a correct RayStepIndex, we + // need to check to see which RayStep now contains the hit point. + // This is needed if the object moved closer or further away. + for (int i = 0; i < Pointer.Rays.Length; i++) + { + if (Pointer.Rays[i].Contains(focusDetails.Point)) + { + RayStepIndex = i; + break; + } + } + } + + public void ResetFocusedObjects(bool clearPreviousObject = true) + { + PreviousPointerTarget = clearPreviousObject ? null : CurrentPointerTarget; + focusDetails.Point = Details.Point; + focusDetails.Normal = Details.Normal; + focusDetails.Object = null; + } + + /// + public bool Equals(PointerData other) + { + if (ReferenceEquals(null, other)) return false; + if (ReferenceEquals(this, other)) return true; + return Pointer.PointerId == other.Pointer.PointerId; + } + + /// + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) return false; + if (ReferenceEquals(this, obj)) return true; + if (obj.GetType() != GetType()) return false; + return Equals((PointerData)obj); + } + + /// + public override int GetHashCode() => Pointer != null ? Pointer.GetHashCode() : 0; + } + + #region IMixedRealityService Implementation + + /// + public override void Initialize() + { + base.Initialize(); + + if (!IsSetupValid) { return; } + + foreach (var inputSource in MixedRealityToolkit.InputSystem.DetectedInputSources) + { + RegisterPointers(inputSource); + } + + if (Application.isEditor && !Application.isPlaying) + { + UpdateCanvasEventSystems(); + } + } + + /// + public override void Update() + { + base.Update(); + + if (!IsSetupValid) { return; } + + UpdatePointers(); + UpdateFocusedObjects(); + } + + public override void Destroy() + { + base.Destroy(); + + if (uiRaycastCamera != null) + { + if (Application.isEditor) + { + UnityEngine.Object.DestroyImmediate(uiRaycastCamera.gameObject); + } + else + { + UnityEngine.Object.Destroy(uiRaycastCamera.gameObject); + } + } + } + + #endregion IMixedRealityService Implementation + + #region Focus Details by IMixedRealityPointer + + /// + public GameObject GetFocusedObject(IMixedRealityPointer pointingSource) + { + if (OverrideFocusedObject != null) { return OverrideFocusedObject; } + + if (pointingSource == null) + { + Debug.LogError("No Pointer passed to get focused object"); + return null; + } + + return !TryGetFocusDetails(pointingSource, out FocusDetails focusDetails) ? null : focusDetails.Object; + } + + /// + public bool TryGetFocusDetails(IMixedRealityPointer pointer, out FocusDetails focusDetails) + { + if (TryGetPointerData(pointer, out PointerData pointerData)) + { + focusDetails = pointerData.Details; + return true; + } + + focusDetails = default; + return false; + } + + /// + public bool TryGetSpecificPointerGraphicEventData(IMixedRealityPointer pointer, out GraphicInputEventData graphicInputEventData) + { + if (TryGetPointerData(pointer, out PointerData pointerData)) + { + Debug.Assert(pointerData.GraphicEventData != null); + graphicInputEventData = pointerData.GraphicEventData; + graphicInputEventData.selectedObject = pointerData.GraphicEventData.pointerCurrentRaycast.gameObject; + return true; + } + + graphicInputEventData = null; + return false; + } + + #endregion Focus Details by IMixedRealityPointer + + #region Utilities + + /// + public uint GenerateNewPointerId() + { + var newId = (uint)UnityEngine.Random.Range(1, int.MaxValue); + + foreach (var pointerData in pointers) + { + if (pointerData.Pointer.PointerId == newId) + { + return GenerateNewPointerId(); + } + } + + return newId; + } + + /// + /// Utility for validating the UIRaycastCamera. + /// + /// The UIRaycastCamera + private void EnsureUiRaycastCameraSetup() + { + const string uiRayCastCameraName = "UIRaycastCamera"; + var cameraTransform = CameraCache.Main.transform; + var uiCameraTransform = cameraTransform.Find(uiRayCastCameraName); + GameObject cameraObject = null; + + if (uiCameraTransform != null) + { + cameraObject = uiCameraTransform.gameObject; + } + + if (cameraObject == null) + { + cameraObject = new GameObject { name = uiRayCastCameraName }; + cameraObject.transform.parent = cameraTransform; + } + + Debug.Assert(cameraObject.transform.parent == cameraTransform); + cameraObject.transform.localPosition = Vector3.zero; + cameraObject.transform.localRotation = Quaternion.identity; + + // The raycast camera is used to raycast into the UI scene, + // it doesn't need to render anything so is disabled + // The default settings are all that is necessary + uiRaycastCamera = cameraObject.EnsureComponent(); + uiRaycastCamera.enabled = false; + } + + /// + /// Helper for assigning world space canvases event cameras. + /// + /// Warning! Very expensive. Use sparingly at runtime. + public void UpdateCanvasEventSystems() + { + Debug.Assert(UIRaycastCamera != null, "You must assign a UIRaycastCamera on the FocusProvider before updating your canvases."); + + // This will also find disabled GameObjects in the scene. + // Warning! this look up is very expensive! + var sceneCanvases = Resources.FindObjectsOfTypeAll(); + + for (var i = 0; i < sceneCanvases.Length; i++) + { + if (sceneCanvases[i].isRootCanvas && sceneCanvases[i].renderMode == RenderMode.WorldSpace) + { + sceneCanvases[i].worldCamera = UIRaycastCamera; + } + } + } + + /// + public bool IsPointerRegistered(IMixedRealityPointer pointer) + { + Debug.Assert(pointer.PointerId != 0, $"{pointer} does not have a valid pointer id!"); + return TryGetPointerData(pointer, out PointerData _); + } + + /// + public bool RegisterPointer(IMixedRealityPointer pointer) + { + Debug.Assert(pointer.PointerId != 0, $"{pointer} does not have a valid pointer id!"); + + if (IsPointerRegistered(pointer)) { return false; } + + pointers.Add(new PointerData(pointer)); + return true; + } + + private void RegisterPointers(IMixedRealityInputSource inputSource) + { + // If our input source does not have any pointers, then skip. + if (inputSource.Pointers == null) { return; } + + for (int i = 0; i < inputSource.Pointers.Length; i++) + { + RegisterPointer(inputSource.Pointers[i]); + + // Special Registration for Gaze + if (inputSource.SourceId == MixedRealityToolkit.InputSystem.GazeProvider.GazeInputSource.SourceId && gazeProviderPointingData == null) + { + gazeProviderPointingData = new PointerData(inputSource.Pointers[i]); + } + } + } + + /// + public bool UnregisterPointer(IMixedRealityPointer pointer) + { + Debug.Assert(pointer.PointerId != 0, $"{pointer} does not have a valid pointer id!"); + + if (!TryGetPointerData(pointer, out PointerData pointerData)) { return false; } + + // Raise focus events if needed. + if (pointerData.CurrentPointerTarget != null) + { + GameObject unfocusedObject = pointerData.CurrentPointerTarget; + bool objectIsStillFocusedByOtherPointer = false; + + foreach (var otherPointer in pointers) + { + if (otherPointer.Pointer.PointerId != pointer.PointerId && otherPointer.CurrentPointerTarget == unfocusedObject) + { + objectIsStillFocusedByOtherPointer = true; + break; + } + } + + if (!objectIsStillFocusedByOtherPointer) + { + // Policy: only raise focus exit if no other pointers are still focusing the object + MixedRealityToolkit.InputSystem.RaiseFocusExit(pointer, unfocusedObject); + } + + MixedRealityToolkit.InputSystem.RaisePreFocusChanged(pointer, unfocusedObject, null); + } + + pointers.Remove(pointerData); + return true; + } + + /// + /// Returns the registered PointerData for the provided pointing input source. + /// + /// the pointer who's data we're looking for + /// The data associated to the pointer + /// Pointer Data if the pointing source is registered. + private bool TryGetPointerData(IMixedRealityPointer pointer, out PointerData data) + { + foreach (var pointerData in pointers) + { + if (pointerData.Pointer.PointerId == pointer.PointerId) + { + data = pointerData; + return true; + } + } + + data = null; + return false; + } + + private void UpdatePointers() + { + int pointerCount = 0; + + foreach (var pointer in pointers) + { + UpdatePointer(pointer); + + var pointerProfile = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile; + + if (pointerProfile != null && pointerProfile.DebugDrawPointingRays) + { + MixedRealityRaycaster.DebugEnabled = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.DebugDrawPointingRays; + + Color rayColor; + + if ((pointerProfile.DebugDrawPointingRayColors != null) && (pointerProfile.DebugDrawPointingRayColors.Length > 0)) + { + rayColor = pointerProfile.DebugDrawPointingRayColors[pointerCount++ % pointerProfile.DebugDrawPointingRayColors.Length]; + } + else + { + rayColor = Color.green; + } + + Debug.DrawRay(pointer.StartPoint, (pointer.Details.Point - pointer.StartPoint), rayColor); + } + } + } + + private void UpdatePointer(PointerData pointer) + { + // Call the pointer's OnPreRaycast function + // This will give it a chance to prepare itself for raycasts + // eg, by building its Rays array + pointer.Pointer.OnPreRaycast(); + + // If pointer interaction isn't enabled, clear its result object and return + if (!pointer.Pointer.IsInteractionEnabled) + { + // Don't clear the previous focused object since we still want to trigger FocusExit events + pointer.ResetFocusedObjects(false); + } + else + { + // If the pointer is locked + // Keep the focus objects the same + // This will ensure that we execute events on those objects + // even if the pointer isn't pointing at them + if (!pointer.Pointer.IsFocusLocked) + { + // Otherwise, continue + LayerMask[] prioritizedLayerMasks = (pointer.Pointer.PrioritizedLayerMasksOverride ?? FocusLayerMasks); + + // Perform raycast to determine focused object + RaycastPhysics(pointer, prioritizedLayerMasks); + + // If we have a unity event system, perform graphics raycasts as well to support Unity UI interactions + if (EventSystem.current != null) + { + // NOTE: We need to do this AFTER RaycastPhysics so we use the current hit point to perform the correct 2D UI Raycast. + RaycastGraphics(pointer, prioritizedLayerMasks); + } + + // Set the pointer's result last + pointer.Pointer.Result = pointer; + } + else + { + pointer.UpdateFocusLockedHit(); + } + } + + // Call the pointer's OnPostRaycast function + // This will give it a chance to respond to raycast results + // eg by updating its appearance + pointer.Pointer.OnPostRaycast(); + } + + #region Physics Raycasting + + /// + /// Perform a Unity physics Raycast to determine which scene objects with a collider is currently being gazed at, if any. + /// + /// + /// + private static void RaycastPhysics(PointerData pointerData, LayerMask[] prioritizedLayerMasks) + { + RayStep[] pointerRays = pointerData.Pointer.Rays; + + if (pointerRays == null) + { + Debug.LogError($"No valid rays for {pointerData.Pointer.PointerName} pointer."); + return; + } + + if (pointerRays.Length <= 0) + { + Debug.LogError($"No valid rays for {pointerData.Pointer.PointerName} pointer"); + return; + } + + // Check raycast for each step in the pointing source + for (int i = 0; i < pointerRays.Length; i++) + { + RaycastHit physicsHit; + switch (pointerData.Pointer.RaycastMode) + { + case RaycastMode.Simple: + if (MixedRealityRaycaster.RaycastSimplePhysicsStep(pointerRays[i], prioritizedLayerMasks, out physicsHit)) + { + // Set the pointer source's origin ray to this step + UpdatePointerRayOnHit(pointerData, pointerRays, in physicsHit, i); + return; + } + break; + case RaycastMode.Box: + Debug.LogWarning("Box Raycasting Mode not supported for pointers."); + break; + case RaycastMode.Sphere: + if (MixedRealityRaycaster.RaycastSpherePhysicsStep(pointerRays[i], pointerData.Pointer.SphereCastRadius, prioritizedLayerMasks, out physicsHit)) + { + // Set the pointer source's origin ray to this step + UpdatePointerRayOnHit(pointerData, pointerRays, in physicsHit, i); + return; + } + break; + default: + Debug.LogError($"Invalid raycast mode {pointerData.Pointer.RaycastMode} for {pointerData.Pointer.PointerName} pointer."); + break; + } + } + + pointerData.UpdateHit(); + } + + private static void UpdatePointerRayOnHit(PointerData pointerData, RayStep[] raySteps, in RaycastHit physicsHit, int hitRayIndex) + { + Vector3 origin = raySteps[hitRayIndex].Origin; + Vector3 terminus = physicsHit.point; + raySteps[hitRayIndex].UpdateRayStep(ref origin, ref terminus); + pointerData.UpdateHit(physicsHit, raySteps[hitRayIndex], hitRayIndex); + } + + #endregion Physics Raycasting + + #region uGUI Graphics Raycasting + + /// + /// Perform a Unity Graphics Raycast to determine which uGUI element is currently being gazed at, if any. + /// + /// + /// + private void RaycastGraphics(PointerData pointerData, LayerMask[] prioritizedLayerMasks) + { + Debug.Assert(UIRaycastCamera != null, "Missing UIRaycastCamera!"); + + RaycastResult raycastResult = default; + bool overridePhysicsRaycast = false; + RayStep rayStep = default; + int rayStepIndex = 0; + + if (pointerData.Pointer.Rays == null) + { + Debug.LogError($"No valid rays for {pointerData.Pointer.PointerName} pointer."); + return; + } + + if (pointerData.Pointer.Rays.Length <= 0) + { + Debug.LogError($"No valid rays for {pointerData.Pointer.PointerName} pointer"); + return; + } + + // Cast rays for every step until we score a hit + for (int i = 0; i < pointerData.Pointer.Rays.Length; i++) + { + if (RaycastGraphicsStep(pointerData, pointerData.Pointer.Rays[i], prioritizedLayerMasks, out overridePhysicsRaycast, out raycastResult)) + { + rayStepIndex = i; + rayStep = pointerData.Pointer.Rays[i]; + break; + } + } + + // Check if we need to overwrite the physics raycast info + if ((pointerData.CurrentPointerTarget == null || overridePhysicsRaycast) && + raycastResult.isValid && + raycastResult.module != null && + raycastResult.module.eventCamera == UIRaycastCamera) + { + newUiRaycastPosition.x = raycastResult.screenPosition.x; + newUiRaycastPosition.y = raycastResult.screenPosition.y; + newUiRaycastPosition.z = raycastResult.distance; + + Vector3 worldPos = UIRaycastCamera.ScreenToWorldPoint(newUiRaycastPosition); + + var hitInfo = new RaycastHit + { + point = worldPos, + normal = -raycastResult.gameObject.transform.forward + }; + + pointerData.UpdateHit(raycastResult, hitInfo, rayStep, rayStepIndex); + } + } + + /// + /// Raycasts each graphic + /// + /// + /// + /// + /// + /// + /// + private bool RaycastGraphicsStep(PointerData pointerData, RayStep step, LayerMask[] prioritizedLayerMasks, out bool overridePhysicsRaycast, out RaycastResult uiRaycastResult) + { + Debug.Assert(step.Direction != Vector3.zero, "RayStep Direction is Invalid."); + + // Move the uiRaycast camera to the current pointer's position. + var cameraTransform = UIRaycastCamera.transform; + cameraTransform.position = step.Origin; + cameraTransform.forward = step.Direction; + + // We always raycast from the center of the camera. + pointerData.GraphicEventData.position = new Vector2(UIRaycastCamera.pixelWidth * 0.5f, UIRaycastCamera.pixelHeight * 0.5f); + + // Graphics raycast + uiRaycastResult = EventSystem.current.Raycast(pointerData.GraphicEventData, prioritizedLayerMasks); + pointerData.GraphicEventData.pointerCurrentRaycast = uiRaycastResult; + + overridePhysicsRaycast = false; + + if (uiRaycastResult.gameObject == null) { return false; } + + // If we have a raycast result, check if we need to overwrite the physics raycast info + + if (pointerData.CurrentPointerTarget == null) { return true; } + + var distance = 0f; + + for (int i = 0; i < pointerData.RayStepIndex; i++) + { + distance += pointerData.Pointer.Rays[i].Length; + } + + // Check layer prioritization + if (prioritizedLayerMasks.Length > 1) + { + // Get the index in the prioritized layer masks + int uiLayerIndex = uiRaycastResult.gameObject.layer.FindLayerListIndex(prioritizedLayerMasks); + int threeDLayerIndex = pointerData.Details.LastRaycastHit.collider.gameObject.layer.FindLayerListIndex(prioritizedLayerMasks); + + if (threeDLayerIndex > uiLayerIndex) + { + overridePhysicsRaycast = true; + } + else if (threeDLayerIndex == uiLayerIndex) + { + if (distance > uiRaycastResult.distance) + { + overridePhysicsRaycast = true; + } + } + } + else + { + if (distance > uiRaycastResult.distance) + { + overridePhysicsRaycast = true; + } + } + + return true; + } + + #endregion uGUI Graphics Raycasting + + /// + /// Raises the Focus Events to the Input Manger if needed. + /// + private void UpdateFocusedObjects() + { + Debug.Assert(pendingPointerSpecificFocusChange.Count == 0); + Debug.Assert(pendingOverallFocusExitSet.Count == 0); + Debug.Assert(pendingOverallFocusEnterSet.Count == 0); + + // NOTE: We compute the set of events to send before sending the first event + // just in case someone responds to the event by adding/removing a + // pointer which would change the structures we're iterating over. + + foreach (var pointer in pointers) + { + if (pointer.PreviousPointerTarget != pointer.CurrentPointerTarget) + { + pendingPointerSpecificFocusChange.Add(pointer); + + // Initially, we assume all pointer-specific focus changes will + // also result in an overall focus change... + + if (pointer.PreviousPointerTarget != null) + { + pendingOverallFocusExitSet.Add(pointer.PreviousPointerTarget); + } + + if (pointer.CurrentPointerTarget != null) + { + pendingOverallFocusEnterSet.Add(pointer.CurrentPointerTarget); + } + } + } + + // ... but now we trim out objects whose overall focus was maintained the same by a different pointer: + + foreach (var pointer in pointers) + { + pendingOverallFocusExitSet.Remove(pointer.CurrentPointerTarget); + pendingOverallFocusEnterSet.Remove(pointer.PreviousPointerTarget); + } + + // Now we raise the events: + for (int iChange = 0; iChange < pendingPointerSpecificFocusChange.Count; iChange++) + { + PointerData change = pendingPointerSpecificFocusChange[iChange]; + GameObject pendingUnfocusObject = change.PreviousPointerTarget; + GameObject pendingFocusObject = change.CurrentPointerTarget; + + MixedRealityToolkit.InputSystem.RaisePreFocusChanged(change.Pointer, pendingUnfocusObject, pendingFocusObject); + + if (pendingOverallFocusExitSet.Contains(pendingUnfocusObject)) + { + MixedRealityToolkit.InputSystem.RaiseFocusExit(change.Pointer, pendingUnfocusObject); + pendingOverallFocusExitSet.Remove(pendingUnfocusObject); + } + + if (pendingOverallFocusEnterSet.Contains(pendingFocusObject)) + { + MixedRealityToolkit.InputSystem.RaiseFocusEnter(change.Pointer, pendingFocusObject); + pendingOverallFocusEnterSet.Remove(pendingFocusObject); + } + + MixedRealityToolkit.InputSystem.RaiseFocusChanged(change.Pointer, pendingUnfocusObject, pendingFocusObject); + } + + Debug.Assert(pendingOverallFocusExitSet.Count == 0); + Debug.Assert(pendingOverallFocusEnterSet.Count == 0); + pendingPointerSpecificFocusChange.Clear(); + } + + #endregion Accessors + + #region ISourceState Implementation + + /// + public void OnSourceDetected(SourceStateEventData eventData) + { + RegisterPointers(eventData.InputSource); + } + + /// + public void OnSourceLost(SourceStateEventData eventData) + { + // If the input source does not have pointers, then skip. + if (eventData.InputSource.Pointers == null) { return; } + + for (var i = 0; i < eventData.InputSource.Pointers.Length; i++) + { + // Special unregistration for Gaze + if (gazeProviderPointingData != null && eventData.InputSource.Pointers[i].PointerId == gazeProviderPointingData.Pointer.PointerId) + { + // If the source lost is the gaze input source, then reset it. + if (eventData.InputSource.SourceId == MixedRealityToolkit.InputSystem.GazeProvider.GazeInputSource.SourceId) + { + gazeProviderPointingData.ResetFocusedObjects(); + gazeProviderPointingData = null; + } + // Otherwise, don't unregister the gaze pointer, since the gaze input source is still active. + else + { + continue; + } + } + + UnregisterPointer(eventData.InputSource.Pointers[i]); + } + } + + #endregion ISourceState Implementation + } +} diff --git a/Services/InputSystem/FocusProvider.cs.meta b/Services/InputSystem/FocusProvider.cs.meta new file mode 100644 index 000000000..69e96f7cd --- /dev/null +++ b/Services/InputSystem/FocusProvider.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: c97021ae2d394e87bf9981a3ef50e96e +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/InputSystem/GenericPointer.cs b/Services/InputSystem/GenericPointer.cs new file mode 100644 index 000000000..8de5eda87 --- /dev/null +++ b/Services/InputSystem/GenericPointer.cs @@ -0,0 +1,184 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections; +using UnityEngine; +using XRTK.Definitions.Physics; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.InputSystem.Handlers; +using XRTK.Interfaces.Physics; +using XRTK.Interfaces.TeleportSystem; + +namespace XRTK.Services.InputSystem.Pointers +{ + /// + /// Base Class for pointers that don't inherit from MonoBehaviour. + /// + public class GenericPointer : IMixedRealityPointer + { + /// + /// Constructor. + /// + /// + /// + public GenericPointer(string pointerName, IMixedRealityInputSource inputSourceParent) + { + PointerId = MixedRealityToolkit.InputSystem.FocusProvider.GenerateNewPointerId(); + PointerName = pointerName; + this.inputSourceParent = inputSourceParent; + } + + /// + public virtual IMixedRealityController Controller + { + get => controller; + set + { + controller = value; + inputSourceParent = controller.InputSource; + } + } + + private IMixedRealityController controller; + + /// + public uint PointerId { get; } + + /// + public string PointerName { get; set; } + + /// + public virtual IMixedRealityInputSource InputSourceParent + { + get => inputSourceParent; + protected set => inputSourceParent = value; + } + + private IMixedRealityInputSource inputSourceParent; + + /// + public IMixedRealityCursor BaseCursor { get; set; } + + /// + public ICursorModifier CursorModifier { get; set; } + + /// + public IMixedRealityTeleportHotSpot TeleportHotSpot { get; set; } + + /// + public bool IsInteractionEnabled { get; set; } + + /// + public bool IsFocusLocked { get; set; } + + /// + public virtual float PointerExtent { get; set; } = 10f; + + /// + public RayStep[] Rays { get; protected set; } = { new RayStep(Vector3.zero, Vector3.forward) }; + + /// + public LayerMask[] PrioritizedLayerMasksOverride { get; set; } + + /// + public IMixedRealityFocusHandler FocusTarget { get; set; } + + /// + public IPointerResult Result { get; set; } + + /// + public IBaseRayStabilizer RayStabilizer { get; set; } + + /// + public RaycastMode RaycastMode { get; set; } = RaycastMode.Simple; + + /// + public float SphereCastRadius { get; set; } + + public float PointerOrientation { get; } = 0f; + + /// + public virtual void OnPreRaycast() + { + if (TryGetPointingRay(out Ray pointingRay)) + { + Rays[0].CopyRay(pointingRay, PointerExtent); + } + + if (RayStabilizer != null) + { + RayStabilizer.UpdateStability(Rays[0].Origin, Rays[0].Direction); + Rays[0].CopyRay(RayStabilizer.StableRay, PointerExtent); + } + } + + /// + public virtual void OnPostRaycast() { } + + /// + public virtual bool TryGetPointerPosition(out Vector3 position) + { + position = Vector3.zero; + return false; + } + + /// + public virtual bool TryGetPointingRay(out Ray pointingRay) + { + pointingRay = default; + return false; + } + + /// + public virtual bool TryGetPointerRotation(out Quaternion rotation) + { + rotation = Quaternion.identity; + return false; + } + + #region IEquality Implementation + + public static bool Equals(IMixedRealityPointer left, IMixedRealityPointer right) + { + return left.Equals(right); + } + + bool IEqualityComparer.Equals(object left, object right) + { + return left.Equals(right); + } + + public override bool Equals(object obj) + { + if (ReferenceEquals(null, obj)) { return false; } + if (ReferenceEquals(this, obj)) { return true; } + if (obj.GetType() != GetType()) { return false; } + + return Equals((IMixedRealityPointer)obj); + } + + private bool Equals(IMixedRealityPointer other) + { + return other != null && PointerId == other.PointerId && string.Equals(PointerName, other.PointerName); + } + + int IEqualityComparer.GetHashCode(object obj) + { + return obj.GetHashCode(); + } + + public override int GetHashCode() + { + unchecked + { + int hashCode = 0; + hashCode = (hashCode * 397) ^ (int)PointerId; + hashCode = (hashCode * 397) ^ (PointerName != null ? PointerName.GetHashCode() : 0); + return hashCode; + } + } + + #endregion IEquality Implementation + } +} diff --git a/Services/InputSystem/GenericPointer.cs.meta b/Services/InputSystem/GenericPointer.cs.meta new file mode 100644 index 000000000..05d895ca2 --- /dev/null +++ b/Services/InputSystem/GenericPointer.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: ef8f1f72b93d49258cf6455882737ab1 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 8ac5213854cf4dbabd140decf8df1946, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/InputSystem/MixedRealityInputSystem.cs b/Services/InputSystem/MixedRealityInputSystem.cs new file mode 100644 index 000000000..cfec7d553 --- /dev/null +++ b/Services/InputSystem/MixedRealityInputSystem.cs @@ -0,0 +1,1510 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions.Devices; +using XRTK.Definitions.InputSystem; +using XRTK.Definitions.Utilities; +using XRTK.EventDatum.Input; +using XRTK.Extensions; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.InputSystem.Handlers; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Services.InputSystem.Sources; +using XRTK.Utilities; + +namespace XRTK.Services.InputSystem +{ + /// + /// The Mixed Reality Toolkit's specific implementation of the + /// + public class MixedRealityInputSystem : BaseEventSystem, IMixedRealityInputSystem + { + /// + /// Constructor. + /// + /// + public MixedRealityInputSystem(MixedRealityInputSystemProfile profile) : base(profile) + { + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionRulesProfile == null) + { + throw new Exception("The Input system is missing the required Input Action Rules Profile!"); + } + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile == null) + { + throw new Exception("The Input system is missing the required Pointer Profile!"); + } + + if (MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.GazeProviderType?.Type == null) + { + throw new Exception("The Input system is missing the required GazeProviderType!"); + } + } + + /// + public event Action InputEnabled; + + /// + public event Action InputDisabled; + + /// + public HashSet DetectedInputSources { get; } = new HashSet(); + + /// + public HashSet DetectedControllers { get; } = new HashSet(); + + private IMixedRealityFocusProvider focusProvider = null; + + /// + public IMixedRealityFocusProvider FocusProvider => focusProvider ?? (focusProvider = MixedRealityToolkit.GetService()); + + /// + public IMixedRealityGazeProvider GazeProvider { get; private set; } + + private readonly Stack modalInputStack = new Stack(); + private readonly Stack fallbackInputStack = new Stack(); + + /// + public bool IsInputEnabled => disabledRefCount <= 0; + + private int disabledRefCount; + + private SourceStateEventData sourceStateEventData; + private SourcePoseEventData sourceTrackingEventData; + private SourcePoseEventData sourceVector2EventData; + private SourcePoseEventData sourcePositionEventData; + private SourcePoseEventData sourceRotationEventData; + private SourcePoseEventData sourcePoseEventData; + + private FocusEventData focusEventData; + + private InputEventData inputEventData; + private MixedRealityPointerEventData pointerEventData; + + private InputEventData floatInputEventData; + private InputEventData vector2InputEventData; + private InputEventData positionInputEventData; + private InputEventData rotationInputEventData; + private InputEventData poseInputEventData; + + private SpeechEventData speechEventData; + private DictationEventData dictationEventData; + + private MixedRealityInputActionRulesProfile CurrentInputActionRulesProfile { get; } = MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.InputActionRulesProfile; + + #region IMixedRealityManager Implementation + + /// + /// + /// Input system is critical, so should be processed before all other managers + /// + public override uint Priority => 1; + + /// + public override void Initialize() + { + base.Initialize(); + + bool addedComponents = false; + + if (!Application.isPlaying) + { + var standaloneInputModules = UnityEngine.Object.FindObjectsOfType(); + + CameraCache.Main.transform.position = Vector3.zero; + CameraCache.Main.transform.rotation = Quaternion.identity; + + if (standaloneInputModules.Length == 0) + { + CameraCache.Main.gameObject.EnsureComponent(); + addedComponents = true; + } + else + { + bool raiseWarning; + + if (standaloneInputModules.Length == 1) + { + raiseWarning = standaloneInputModules[0].gameObject != CameraCache.Main.gameObject; + } + else + { + raiseWarning = true; + } + + if (raiseWarning) + { + Debug.LogWarning("Found an existing Standalone Input Module in your scene. The Mixed Reality Input System requires only one, and must be found on the main camera."); + } + } + } + else + { + sourceStateEventData = new SourceStateEventData(EventSystem.current); + + sourceTrackingEventData = new SourcePoseEventData(EventSystem.current); + sourceVector2EventData = new SourcePoseEventData(EventSystem.current); + sourcePositionEventData = new SourcePoseEventData(EventSystem.current); + sourceRotationEventData = new SourcePoseEventData(EventSystem.current); + sourcePoseEventData = new SourcePoseEventData(EventSystem.current); + + focusEventData = new FocusEventData(EventSystem.current); + + inputEventData = new InputEventData(EventSystem.current); + pointerEventData = new MixedRealityPointerEventData(EventSystem.current); + + floatInputEventData = new InputEventData(EventSystem.current); + vector2InputEventData = new InputEventData(EventSystem.current); + positionInputEventData = new InputEventData(EventSystem.current); + rotationInputEventData = new InputEventData(EventSystem.current); + poseInputEventData = new InputEventData(EventSystem.current); + + speechEventData = new SpeechEventData(EventSystem.current); + dictationEventData = new DictationEventData(EventSystem.current); + } + + if (!addedComponents) + { + CameraCache.Main.gameObject.EnsureComponent(); + } + + GazeProvider = CameraCache.Main.gameObject.EnsureComponent(MixedRealityToolkit.Instance.ActiveProfile.InputSystemProfile.PointerProfile.GazeProviderType.Type) as IMixedRealityGazeProvider; + } + + /// + public override void Enable() + { + InputEnabled?.Invoke(); + } + + /// + public override void Disable() + { + GazeProvider = null; + + if (!Application.isPlaying) + { + var component = CameraCache.Main.GetComponent() as Component; + + if (component != null) + { + UnityEngine.Object.DestroyImmediate(component); + } + + var inputModule = CameraCache.Main.GetComponent(); + + if (inputModule != null) + { + UnityEngine.Object.DestroyImmediate(inputModule); + } + } + + InputDisabled?.Invoke(); + } + + #endregion IMixedRealityManager Implementation + + #region IEventSystemManager Implementation + + /// + public override void HandleEvent(BaseEventData eventData, ExecuteEvents.EventFunction eventHandler) + { + if (disabledRefCount > 0) + { + return; + } + + Debug.Assert(eventData != null); + var baseInputEventData = ExecuteEvents.ValidateEventData(eventData); + Debug.Assert(baseInputEventData != null); + Debug.Assert(!baseInputEventData.used); + + if (baseInputEventData.InputSource == null) + { + Debug.LogError($"Failed to find an input source for {baseInputEventData}"); + return; + } + + // Send the event to global listeners + base.HandleEvent(eventData, eventHandler); + + if (baseInputEventData.used) + { + // All global listeners get a chance to see the event, + // but if any of them marked it used, + // we stop the event from going any further. + return; + } + + if (baseInputEventData.InputSource.Pointers == null) + { + Debug.LogError($"InputSource {baseInputEventData.InputSource.SourceName} doesn't have any registered pointers! Input Sources without pointers should use the GazeProvider's pointer as a default fallback."); + return; + } + + var modalEventHandled = false; + + // Get the focused object for each pointer of the event source + for (int i = 0; i < baseInputEventData.InputSource.Pointers.Length; i++) + { + GameObject focusedObject = FocusProvider?.GetFocusedObject(baseInputEventData.InputSource.Pointers[i]); + + // Handle modal input if one exists + if (modalInputStack.Count > 0 && !modalEventHandled) + { + GameObject modalInput = modalInputStack.Peek(); + + if (modalInput != null) + { + modalEventHandled = true; + + // If there is a focused object in the hierarchy of the modal handler, start the event bubble there + if (focusedObject != null && focusedObject.transform.IsChildOf(modalInput.transform)) + { + if (ExecuteEvents.ExecuteHierarchy(focusedObject, baseInputEventData, eventHandler) && baseInputEventData.used) + { + return; + } + } + // Otherwise, just invoke the event on the modal handler itself + else + { + if (ExecuteEvents.ExecuteHierarchy(modalInput, baseInputEventData, eventHandler) && baseInputEventData.used) + { + return; + } + } + } + else + { + Debug.LogError("ModalInput GameObject reference was null!\nDid this GameObject get destroyed?"); + } + } + + // If event was not handled by modal, pass it on to the current focused object + if (focusedObject != null) + { + if (ExecuteEvents.ExecuteHierarchy(focusedObject, baseInputEventData, eventHandler) && baseInputEventData.used) + { + return; + } + } + } + + // If event was not handled by the focused object, pass it on to any fallback handlers + if (fallbackInputStack.Count > 0) + { + GameObject fallbackInput = fallbackInputStack.Peek(); + if (ExecuteEvents.ExecuteHierarchy(fallbackInput, baseInputEventData, eventHandler) && baseInputEventData.used) + { + // return; + } + } + } + + /// + /// Register a to listen to events that will receive all input events, regardless + /// of which other s might have handled the event beforehand. + /// + /// Useful for listening to events when the is currently not being raycasted against by the . + /// Listener to add. + public override void Register(GameObject listener) + { + base.Register(listener); + } + + /// + /// Unregister a from listening to input events. + /// + /// + public override void Unregister(GameObject listener) + { + base.Unregister(listener); + } + + #endregion IEventSystemManager Implementation + + #region Input Disabled Options + + /// + /// Push a disabled input state onto the input manager. + /// While input is disabled no events will be sent out and the cursor displays + /// a waiting animation. + /// + public void PushInputDisable() + { + ++disabledRefCount; + + if (disabledRefCount == 1) + { + InputDisabled?.Invoke(); + + if (GazeProvider != null) + { + GazeProvider.Enabled = false; + } + } + } + + /// + /// Pop disabled input state. When the last disabled state is + /// popped off the stack input will be re-enabled. + /// + public void PopInputDisable() + { + --disabledRefCount; + Debug.Assert(disabledRefCount >= 0, "Tried to pop more input disable than the amount pushed."); + + if (disabledRefCount == 0) + { + InputEnabled?.Invoke(); + + if (GazeProvider != null) + { + GazeProvider.Enabled = true; + } + } + } + + /// + /// Clear the input disable stack, which will immediately re-enable input. + /// + public void ClearInputDisableStack() + { + bool wasInputDisabled = disabledRefCount > 0; + disabledRefCount = 0; + + if (wasInputDisabled) + { + InputEnabled?.Invoke(); + + if (GazeProvider != null) + { + GazeProvider.Enabled = true; + } + } + } + + #endregion Input Disabled Options + + #region Modal Input Options + + /// + /// Push a game object into the modal input stack. Any input handlers + /// on the game object are given priority to input events before any focused objects. + /// + /// The input handler to push + public void PushModalInputHandler(GameObject inputHandler) + { + modalInputStack.Push(inputHandler); + } + + /// + /// Remove the last game object from the modal input stack. + /// + public void PopModalInputHandler() + { + if (modalInputStack.Count > 0) + { + modalInputStack.Pop(); + + } + } + + /// + /// Clear all modal input handlers off the stack. + /// + public void ClearModalInputStack() + { + modalInputStack.Clear(); + } + + #endregion Modal Input Options + + #region Fallback Input Handler Options + + /// + /// Push a game object into the fallback input stack. Any input handlers on + /// the game object are given input events when no modal or focused objects consume the event. + /// + /// The input handler to push + public void PushFallbackInputHandler(GameObject inputHandler) + { + fallbackInputStack.Push(inputHandler); + } + + /// + /// Remove the last game object from the fallback input stack. + /// + public void PopFallbackInputHandler() + { + fallbackInputStack.Pop(); + } + + /// + /// Clear all fallback input handlers off the stack. + /// + public void ClearFallbackInputStack() + { + fallbackInputStack.Clear(); + } + + #endregion Fallback Input Handler Options + + #region IMixedRealityController Utilities + + /// + public bool TryGetController(IMixedRealityInputSource inputSource, out IMixedRealityController controller) + { + foreach (IMixedRealityController mixedRealityController in DetectedControllers) + { + if (inputSource.SourceId == mixedRealityController.InputSource.SourceId) + { + controller = mixedRealityController; + return true; + } + } + + controller = null; + return false; + } + + #endregion IMixedRealityController Utilities + + #region Input Events + + #region Input Source Events + + /// + public uint GenerateNewSourceId() + { + var newId = (uint)UnityEngine.Random.Range(1, int.MaxValue); + + foreach (var inputSource in DetectedInputSources) + { + if (inputSource.SourceId == newId) + { + return GenerateNewSourceId(); + } + } + + return newId; + } + + /// + public IMixedRealityInputSource RequestNewGenericInputSource(string name, IMixedRealityPointer[] pointers = null) => new BaseGenericInputSource(name, pointers); + + #region Input Source State Events + + /// + public void RaiseSourceDetected(IMixedRealityInputSource source, IMixedRealityController controller = null) + { + // Create input event + sourceStateEventData.Initialize(source, controller); + + Debug.Assert(!DetectedInputSources.Contains(source), $"{source.SourceName} has already been registered with the Input Manager!"); + + DetectedInputSources.Add(source); + + if (controller != null) + { + DetectedControllers.Add(controller); + } + + FocusProvider?.OnSourceDetected(sourceStateEventData); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceStateEventData, OnSourceDetectedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourceDetectedEventHandler = + delegate (IMixedRealitySourceStateHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnSourceDetected(casted); + }; + + /// + public void RaiseSourceLost(IMixedRealityInputSource source, IMixedRealityController controller = null) + { + // Create input event + sourceStateEventData.Initialize(source, controller); + + Debug.Assert(DetectedInputSources.Contains(source), $"{source.SourceName} was never registered with the Input Manager!"); + + DetectedInputSources.Remove(source); + + if (controller != null) + { + DetectedControllers.Remove(controller); + } + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceStateEventData, OnSourceLostEventHandler); + + FocusProvider?.OnSourceLost(sourceStateEventData); + } + + private static readonly ExecuteEvents.EventFunction OnSourceLostEventHandler = + delegate (IMixedRealitySourceStateHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnSourceLost(casted); + }; + + #endregion Input Source State Events + + #region Input Source Pose Events + + /// + public void RaiseSourceTrackingStateChanged(IMixedRealityInputSource source, IMixedRealityController controller, TrackingState state) + { + // Create input event + sourceTrackingEventData.Initialize(source, controller, state); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceTrackingEventData, OnSourceTrackingChangedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourceTrackingChangedEventHandler = + delegate (IMixedRealitySourcePoseHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSourcePoseChanged(casted); + }; + + /// + public void RaiseSourcePositionChanged(IMixedRealityInputSource source, IMixedRealityController controller, Vector2 position) + { + // Create input event + sourceVector2EventData.Initialize(source, controller, position); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceVector2EventData, OnSourcePoseVector2ChangedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourcePoseVector2ChangedEventHandler = + delegate (IMixedRealitySourcePoseHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSourcePoseChanged(casted); + }; + + /// + public void RaiseSourcePositionChanged(IMixedRealityInputSource source, IMixedRealityController controller, Vector3 position) + { + // Create input event + sourcePositionEventData.Initialize(source, controller, position); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourcePositionEventData, OnSourcePositionChangedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourcePositionChangedEventHandler = + delegate (IMixedRealitySourcePoseHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSourcePoseChanged(casted); + }; + + /// + public void RaiseSourceRotationChanged(IMixedRealityInputSource source, IMixedRealityController controller, Quaternion rotation) + { + // Create input event + sourceRotationEventData.Initialize(source, controller, rotation); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourceRotationEventData, OnSourceRotationChangedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourceRotationChangedEventHandler = + delegate (IMixedRealitySourcePoseHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSourcePoseChanged(casted); + }; + + /// + public void RaiseSourcePoseChanged(IMixedRealityInputSource source, IMixedRealityController controller, MixedRealityPose position) + { + // Create input event + sourcePoseEventData.Initialize(source, controller, position); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(sourcePoseEventData, OnSourcePoseChangedEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnSourcePoseChangedEventHandler = + delegate (IMixedRealitySourcePoseHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSourcePoseChanged(casted); + }; + + #endregion Input Source Pose Events + + #endregion Input Source Events + + #region Focus Events + + /// + public void RaisePreFocusChanged(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject) + { + focusEventData.Initialize(pointer, oldFocusedObject, newFocusedObject); + + // Raise Focus Events on the old and new focused objects. + if (oldFocusedObject != null) + { + ExecuteEvents.ExecuteHierarchy(oldFocusedObject, focusEventData, OnPreFocusChangedHandler); + } + + if (newFocusedObject != null) + { + ExecuteEvents.ExecuteHierarchy(newFocusedObject, focusEventData, OnPreFocusChangedHandler); + } + + // Raise Focus Events on the pointers cursor if it has one. + if (pointer.BaseCursor != null) + { + try + { + // When shutting down a game, we can sometime get old references to game objects that have been cleaned up. + // We'll ignore when this happens. + ExecuteEvents.ExecuteHierarchy(pointer.BaseCursor.GameObjectReference, focusEventData, OnPreFocusChangedHandler); + } + catch (Exception) + { + // ignored. + } + } + } + + private static readonly ExecuteEvents.EventFunction OnPreFocusChangedHandler = + delegate (IMixedRealityFocusChangedHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnBeforeFocusChange(casted); + }; + + /// + public void RaiseFocusChanged(IMixedRealityPointer pointer, GameObject oldFocusedObject, GameObject newFocusedObject) + { + focusEventData.Initialize(pointer, oldFocusedObject, newFocusedObject); + + // Raise Focus Events on the old and new focused objects. + if (oldFocusedObject != null) + { + ExecuteEvents.ExecuteHierarchy(oldFocusedObject, focusEventData, OnFocusChangedHandler); + } + + if (newFocusedObject != null) + { + ExecuteEvents.ExecuteHierarchy(newFocusedObject, focusEventData, OnFocusChangedHandler); + } + + // Raise Focus Events on the pointers cursor if it has one. + if (pointer.BaseCursor != null) + { + try + { + // When shutting down a game, we can sometime get old references to game objects that have been cleaned up. + // We'll ignore when this happens. + ExecuteEvents.ExecuteHierarchy(pointer.BaseCursor.GameObjectReference, focusEventData, OnFocusChangedHandler); + } + catch (Exception) + { + // ignored. + } + } + } + + private static readonly ExecuteEvents.EventFunction OnFocusChangedHandler = + delegate (IMixedRealityFocusChangedHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnFocusChanged(casted); + }; + + /// + public void RaiseFocusEnter(IMixedRealityPointer pointer, GameObject focusedObject) + { + focusEventData.Initialize(pointer); + + ExecuteEvents.ExecuteHierarchy(focusedObject, focusEventData, OnFocusEnterEventHandler); + + if (FocusProvider.TryGetSpecificPointerGraphicEventData(pointer, out GraphicInputEventData graphicEventData)) + { + ExecuteEvents.ExecuteHierarchy(focusedObject, graphicEventData, ExecuteEvents.pointerEnterHandler); + } + } + + private static readonly ExecuteEvents.EventFunction OnFocusEnterEventHandler = + delegate (IMixedRealityFocusHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnFocusEnter(casted); + }; + + /// + public void RaiseFocusExit(IMixedRealityPointer pointer, GameObject unfocusedObject) + { + focusEventData.Initialize(pointer); + + ExecuteEvents.ExecuteHierarchy(unfocusedObject, focusEventData, OnFocusExitEventHandler); + + if (FocusProvider.TryGetSpecificPointerGraphicEventData(pointer, out GraphicInputEventData graphicEventData)) + { + ExecuteEvents.ExecuteHierarchy(unfocusedObject, graphicEventData, ExecuteEvents.pointerExitHandler); + } + } + + private static readonly ExecuteEvents.EventFunction OnFocusExitEventHandler = + delegate (IMixedRealityFocusHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnFocusExit(casted); + }; + + #endregion Focus Events + + #region Pointers + + #region Pointer Down + + private static readonly ExecuteEvents.EventFunction OnPointerDownEventHandler = + delegate (IMixedRealityPointerHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnPointerDown(casted); + }; + + /// + public void RaisePointerDown(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, IMixedRealityInputSource inputSource = null) + { + // Create input event + pointerEventData.Initialize(pointer, inputAction, inputSource); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(pointerEventData, OnPointerDownEventHandler); + FocusProvider.TryGetSpecificPointerGraphicEventData(pointer, out GraphicInputEventData graphicInputEventData); + + if (graphicInputEventData != null && graphicInputEventData.selectedObject != null) + { + ExecuteEvents.ExecuteHierarchy(graphicInputEventData.selectedObject, graphicInputEventData, ExecuteEvents.pointerDownHandler); + } + } + + #endregion Pointer Down + + #region Pointer Click + + private static readonly ExecuteEvents.EventFunction OnInputClickedEventHandler = + delegate (IMixedRealityPointerHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnPointerClicked(casted); + }; + + /// + public void RaisePointerClicked(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, int count, IMixedRealityInputSource inputSource = null) + { + // Create input event + pointerEventData.Initialize(pointer, inputAction, inputSource, count); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(pointerEventData, OnInputClickedEventHandler); + + // NOTE: In Unity UI, a "click" happens on every pointer up, so we have RaisePointerUp call the pointerClickHandler. + } + + #endregion Pointer Click + + #region Pointer Up + + private static readonly ExecuteEvents.EventFunction OnPointerUpEventHandler = + delegate (IMixedRealityPointerHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnPointerUp(casted); + }; + + /// + public void RaisePointerUp(IMixedRealityPointer pointer, MixedRealityInputAction inputAction, IMixedRealityInputSource inputSource = null) + { + // Create input event + pointerEventData.Initialize(pointer, inputAction); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(pointerEventData, OnPointerUpEventHandler); + + FocusProvider.TryGetSpecificPointerGraphicEventData(pointer, out GraphicInputEventData graphicInputEventData); + + if (graphicInputEventData != null) + { + if (graphicInputEventData.selectedObject != null) + { + ExecuteEvents.ExecuteHierarchy(graphicInputEventData.selectedObject, graphicInputEventData, ExecuteEvents.pointerUpHandler); + ExecuteEvents.ExecuteHierarchy(graphicInputEventData.selectedObject, graphicInputEventData, ExecuteEvents.pointerClickHandler); + } + + graphicInputEventData.Clear(); + } + } + + #endregion Pointer Up + + #endregion Pointers + + #region Generic Input Events + + #region Input Down + + private static readonly ExecuteEvents.EventFunction OnInputDownEventHandler = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnInputDown(casted); + }; + + /// + public void RaiseOnInputDown(IMixedRealityInputSource source, MixedRealityInputAction inputAction) + { + RaiseOnInputDown(source, Handedness.None, inputAction); + } + + /// + public void RaiseOnInputDown(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, true); + + // Create input event + inputEventData.Initialize(source, handedness, inputAction); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(inputEventData, OnInputDownEventHandler); + } + + #endregion Input Down + + #region Input Pressed + + /// + public void RaiseOnInputPressed(IMixedRealityInputSource source, MixedRealityInputAction inputAction) + { + RaiseOnInputPressed(source, Handedness.None, inputAction); + } + + /// + public void RaiseOnInputPressed(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, true); + + // Create input event + floatInputEventData.Initialize(source, handedness, inputAction); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(floatInputEventData, SingleAxisInputEventHandler); + } + + /// + public void RaiseOnInputPressed(IMixedRealityInputSource source, MixedRealityInputAction inputAction, float pressAmount) + { + RaiseOnInputPressed(source, Handedness.None, inputAction, pressAmount); + } + + /// + public void RaiseOnInputPressed(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, float pressAmount) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, pressAmount); + + // Create input event + floatInputEventData.Initialize(source, handedness, inputAction, pressAmount); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(floatInputEventData, SingleAxisInputEventHandler); + } + + #endregion Input Pressed + + #region Input Up + + private static readonly ExecuteEvents.EventFunction OnInputUpEventHandler = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnInputUp(casted); + }; + + /// + public void RaiseOnInputUp(IMixedRealityInputSource source, MixedRealityInputAction inputAction) + { + RaiseOnInputUp(source, Handedness.None, inputAction); + } + + /// + public void RaiseOnInputUp(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, false); + + // Create input event + inputEventData.Initialize(source, handedness, inputAction); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(inputEventData, OnInputUpEventHandler); + } + + #endregion Input Up + + #region Input Position Changed + + private static readonly ExecuteEvents.EventFunction> SingleAxisInputEventHandler = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnInputChanged(casted); + }; + + /// + public void RaisePositionInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, float inputPosition) + { + RaisePositionInputChanged(source, Handedness.None, inputAction, inputPosition); + } + + /// + public void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, float inputPosition) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, inputPosition); + + // Create input event + floatInputEventData.Initialize(source, handedness, inputAction, inputPosition); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(floatInputEventData, SingleAxisInputEventHandler); + } + + private static readonly ExecuteEvents.EventFunction> OnTwoDoFInputChanged = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnInputChanged(casted); + }; + + /// + public void RaisePositionInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, Vector2 inputPosition) + { + RaisePositionInputChanged(source, Handedness.None, inputAction, inputPosition); + } + + /// + public void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Vector2 inputPosition) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, inputPosition); + + // Create input event + vector2InputEventData.Initialize(source, handedness, inputAction, inputPosition); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(vector2InputEventData, OnTwoDoFInputChanged); + } + + private static readonly ExecuteEvents.EventFunction> OnPositionInputChanged = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnInputChanged(casted); + }; + + /// + public void RaisePositionInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, Vector3 position) + { + RaisePositionInputChanged(source, Handedness.None, inputAction, position); + } + + /// + public void RaisePositionInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Vector3 position) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, position); + + // Create input event + positionInputEventData.Initialize(source, handedness, inputAction, position); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(positionInputEventData, OnPositionInputChanged); + } + + #endregion Input Position Changed + + #region Input Rotation Changed + + private static readonly ExecuteEvents.EventFunction> OnRotationInputChanged = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnInputChanged(casted); + }; + + /// + public void RaiseRotationInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, Quaternion rotation) + { + RaiseRotationInputChanged(source, Handedness.None, inputAction, rotation); + } + + /// + public void RaiseRotationInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, Quaternion rotation) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, rotation); + + // Create input event + rotationInputEventData.Initialize(source, handedness, inputAction, rotation); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(positionInputEventData, OnRotationInputChanged); + } + + #endregion Input Rotation Changed + + #region Input Pose Changed + + private static readonly ExecuteEvents.EventFunction> OnPoseInputChanged = + delegate (IMixedRealityInputHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnInputChanged(casted); + }; + + /// + public void RaisePoseInputChanged(IMixedRealityInputSource source, MixedRealityInputAction inputAction, MixedRealityPose inputData) + { + RaisePoseInputChanged(source, Handedness.None, inputAction, inputData); + } + + /// + public void RaisePoseInputChanged(IMixedRealityInputSource source, Handedness handedness, MixedRealityInputAction inputAction, MixedRealityPose inputData) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + inputAction = ProcessRules(inputAction, inputData); + + // Create input event + poseInputEventData.Initialize(source, handedness, inputAction, inputData); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(poseInputEventData, OnPoseInputChanged); + } + + #endregion Input Pose Changed + + #endregion Generic Input Events + + #region Gesture Events + + private static readonly ExecuteEvents.EventFunction OnGestureStarted = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnGestureStarted(casted); + }; + + /// + public void RaiseGestureStarted(IMixedRealityController controller, MixedRealityInputAction action) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + + action = ProcessRules(action, true); + inputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action); + HandleEvent(inputEventData, OnGestureStarted); + } + + private static readonly ExecuteEvents.EventFunction OnGestureUpdated = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnGestureUpdated(casted); + }; + + /// + public void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, true); + inputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action); + HandleEvent(inputEventData, OnGestureUpdated); + } + + private static readonly ExecuteEvents.EventFunction> OnGestureVector2PositionUpdated = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureUpdated(casted); + }; + + /// + public void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Vector2 inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + vector2InputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(vector2InputEventData, OnGestureVector2PositionUpdated); + } + + private static readonly ExecuteEvents.EventFunction> OnGesturePositionUpdated = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureUpdated(casted); + }; + + /// + public void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Vector3 inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + positionInputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(positionInputEventData, OnGesturePositionUpdated); + } + + private static readonly ExecuteEvents.EventFunction> OnGestureRotationUpdated = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureUpdated(casted); + }; + + /// + public void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, Quaternion inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + rotationInputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(rotationInputEventData, OnGestureRotationUpdated); + } + + private static readonly ExecuteEvents.EventFunction> OnGesturePoseUpdated = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureUpdated(casted); + }; + + /// + public void RaiseGestureUpdated(IMixedRealityController controller, MixedRealityInputAction action, MixedRealityPose inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + poseInputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(poseInputEventData, OnGesturePoseUpdated); + } + + private static readonly ExecuteEvents.EventFunction OnGestureCompleted = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnGestureCompleted(casted); + }; + + /// + public void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, false); + inputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action); + HandleEvent(inputEventData, OnGestureCompleted); + } + + private static readonly ExecuteEvents.EventFunction> OnGestureVector2PositionCompleted = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureCompleted(casted); + }; + + /// + public void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Vector2 inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + vector2InputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(vector2InputEventData, OnGestureVector2PositionCompleted); + } + + private static readonly ExecuteEvents.EventFunction> OnGesturePositionCompleted = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureCompleted(casted); + }; + + /// + public void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Vector3 inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + positionInputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(positionInputEventData, OnGesturePositionCompleted); + } + + private static readonly ExecuteEvents.EventFunction> OnGestureRotationCompleted = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureCompleted(casted); + }; + + /// + public void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, Quaternion inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + rotationInputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(rotationInputEventData, OnGestureRotationCompleted); + } + + private static readonly ExecuteEvents.EventFunction> OnGesturePoseCompleted = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData>(eventData); + handler.OnGestureCompleted(casted); + }; + + /// + public void RaiseGestureCompleted(IMixedRealityController controller, MixedRealityInputAction action, MixedRealityPose inputData) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, inputData); + poseInputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action, inputData); + HandleEvent(poseInputEventData, OnGesturePoseCompleted); + } + + private static readonly ExecuteEvents.EventFunction OnGestureCanceled = + delegate (IMixedRealityGestureHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnGestureCanceled(casted); + }; + + /// + public void RaiseGestureCanceled(IMixedRealityController controller, MixedRealityInputAction action) + { + Debug.Assert(DetectedInputSources.Contains(controller.InputSource)); + action = ProcessRules(action, false); + inputEventData.Initialize(controller.InputSource, controller.ControllerHandedness, action); + HandleEvent(inputEventData, OnGestureCanceled); + } + + #endregion Gesture Events + + #region Speech Keyword Events + + private static readonly ExecuteEvents.EventFunction OnSpeechKeywordRecognizedEventHandler = + delegate (IMixedRealitySpeechHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnSpeechKeywordRecognized(casted); + }; + + /// + public void RaiseSpeechCommandRecognized(IMixedRealityInputSource source, MixedRealityInputAction inputAction, RecognitionConfidenceLevel confidence, TimeSpan phraseDuration, DateTime phraseStartTime, string text) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + // Create input event + speechEventData.Initialize(source, inputAction, confidence, phraseDuration, phraseStartTime, text); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(speechEventData, OnSpeechKeywordRecognizedEventHandler); + } + + #endregion Speech Keyword Events + + #region Dictation Events + + private static readonly ExecuteEvents.EventFunction OnDictationHypothesisEventHandler = + delegate (IMixedRealityDictationHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnDictationHypothesis(casted); + }; + + /// + public void RaiseDictationHypothesis(IMixedRealityInputSource source, string dictationHypothesis, AudioClip dictationAudioClip = null) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + // Create input event + dictationEventData.Initialize(source, dictationHypothesis, dictationAudioClip); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(dictationEventData, OnDictationHypothesisEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnDictationResultEventHandler = + delegate (IMixedRealityDictationHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnDictationResult(casted); + }; + + /// + public void RaiseDictationResult(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip = null) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + // Create input event + dictationEventData.Initialize(source, dictationResult, dictationAudioClip); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(dictationEventData, OnDictationResultEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnDictationCompleteEventHandler = + delegate (IMixedRealityDictationHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnDictationComplete(casted); + }; + + /// + public void RaiseDictationComplete(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + // Create input event + dictationEventData.Initialize(source, dictationResult, dictationAudioClip); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(dictationEventData, OnDictationCompleteEventHandler); + } + + private static readonly ExecuteEvents.EventFunction OnDictationErrorEventHandler = + delegate (IMixedRealityDictationHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnDictationError(casted); + }; + + /// + public void RaiseDictationError(IMixedRealityInputSource source, string dictationResult, AudioClip dictationAudioClip = null) + { + Debug.Assert(DetectedInputSources.Contains(source)); + + // Create input event + dictationEventData.Initialize(source, dictationResult, dictationAudioClip); + + // Pass handler through HandleEvent to perform modal/fallback logic + HandleEvent(dictationEventData, OnDictationErrorEventHandler); + } + + #endregion Dictation Events + + #endregion Input Events + + #region Rules + + private static MixedRealityInputAction ProcessRules_Internal(MixedRealityInputAction inputAction, T1[] inputActionRules, T2 criteria) where T1 : struct, IInputActionRule + { + for (int i = 0; i < inputActionRules.Length; i++) + { + if (inputActionRules[i].BaseAction == inputAction && inputActionRules[i].Criteria.Equals(criteria)) + { + if (inputActionRules[i].RuleAction == inputAction) + { + Debug.LogError("Input Action Rule cannot be the same as the rule's Base Action!"); + return inputAction; + } + + if (inputActionRules[i].BaseAction.AxisConstraint != inputActionRules[i].RuleAction.AxisConstraint) + { + Debug.LogError("Input Action Rule doesn't have the same Axis Constraint as the Base Action!"); + return inputAction; + } + + return inputActionRules[i].RuleAction; + } + } + + return inputAction; + } + + private MixedRealityInputAction ProcessRules(MixedRealityInputAction inputAction, bool criteria) + { + if (CurrentInputActionRulesProfile != null && CurrentInputActionRulesProfile.InputActionRulesDigital?.Length > 0) + { + return ProcessRules_Internal(inputAction, CurrentInputActionRulesProfile.InputActionRulesDigital, criteria); + } + + return inputAction; + } + + private MixedRealityInputAction ProcessRules(MixedRealityInputAction inputAction, float criteria) + { + if (CurrentInputActionRulesProfile != null && CurrentInputActionRulesProfile.InputActionRulesSingleAxis?.Length > 0) + { + return ProcessRules_Internal(inputAction, CurrentInputActionRulesProfile.InputActionRulesSingleAxis, criteria); + } + + return inputAction; + } + + private MixedRealityInputAction ProcessRules(MixedRealityInputAction inputAction, Vector2 criteria) + { + if (CurrentInputActionRulesProfile != null && CurrentInputActionRulesProfile.InputActionRulesDualAxis?.Length > 0) + { + return ProcessRules_Internal(inputAction, CurrentInputActionRulesProfile.InputActionRulesDualAxis, criteria); + } + + return inputAction; + } + + private MixedRealityInputAction ProcessRules(MixedRealityInputAction inputAction, Vector3 criteria) + { + if (CurrentInputActionRulesProfile != null && CurrentInputActionRulesProfile.InputActionRulesVectorAxis?.Length > 0) + { + return ProcessRules_Internal(inputAction, CurrentInputActionRulesProfile.InputActionRulesVectorAxis, criteria); + } + + return inputAction; + } + + private MixedRealityInputAction ProcessRules(MixedRealityInputAction inputAction, Quaternion criteria) + { + if (CurrentInputActionRulesProfile != null && CurrentInputActionRulesProfile.InputActionRulesQuaternionAxis?.Length > 0) + { + return ProcessRules_Internal(inputAction, CurrentInputActionRulesProfile.InputActionRulesQuaternionAxis, criteria); + } + + return inputAction; + } + + private MixedRealityInputAction ProcessRules(MixedRealityInputAction inputAction, MixedRealityPose criteria) + { + if (CurrentInputActionRulesProfile != null && CurrentInputActionRulesProfile.InputActionRulesPoseAxis?.Length > 0) + { + return ProcessRules_Internal(inputAction, CurrentInputActionRulesProfile.InputActionRulesPoseAxis, criteria); + } + + return inputAction; + } + + #endregion Rules + } +} diff --git a/Services/InputSystem/MixedRealityInputSystem.cs.meta b/Services/InputSystem/MixedRealityInputSystem.cs.meta new file mode 100644 index 000000000..d4d3cdc96 --- /dev/null +++ b/Services/InputSystem/MixedRealityInputSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 4dca115aff68406882a94d21234a678a +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/MixedRealityToolkit.cs b/Services/MixedRealityToolkit.cs new file mode 100644 index 000000000..7514b3ce9 --- /dev/null +++ b/Services/MixedRealityToolkit.cs @@ -0,0 +1,1884 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System; +using System.Collections.Generic; +using System.Linq; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions; +using XRTK.Definitions.Utilities; +using XRTK.Extensions; +using XRTK.Interfaces; +using XRTK.Interfaces.BoundarySystem; +using XRTK.Interfaces.CameraSystem; +using XRTK.Interfaces.Diagnostics; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.NetworkingSystem; +using XRTK.Interfaces.Providers.Controllers; +using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Interfaces.SpatialAwarenessSystem; +using XRTK.Interfaces.TeleportSystem; +using XRTK.Utilities; + +namespace XRTK.Services +{ + /// + /// This class is responsible for coordinating the operation of the Mixed Reality Toolkit. It is the only Singleton in the entire project. + /// It provides a service registry for all active services that are used within a project as well as providing the active configuration profile for the project. + /// The Profile can be swapped out at any time to meet the needs of your project. + /// + [ExecuteInEditMode] + [DisallowMultipleComponent] + public sealed class MixedRealityToolkit : MonoBehaviour, IDisposable + { + #region Mixed Reality Toolkit Profile configuration + + /// + /// Checks if there is a valid instance of the MixedRealityToolkit, then checks if there is there a valid Active Profile. + /// + public static bool HasActiveProfile + { + get + { + if (!IsInitialized) + { + return false; + } + + if (!ConfirmInitialized()) + { + return false; + } + + return Instance.ActiveProfile != null; + } + } + + /// + /// The active profile of the Mixed Reality Toolkit which controls which services are active and their initial configuration. + /// *Note configuration is used on project initialization or replacement, changes to properties while it is running has no effect. + /// + [SerializeField] + [Tooltip("The current active configuration for the Mixed Reality project")] + private MixedRealityToolkitConfigurationProfile activeProfile = null; + + /// + /// The public property of the Active Profile, ensuring events are raised on the change of the configuration + /// + public MixedRealityToolkitConfigurationProfile ActiveProfile + { + get + { +#if UNITY_EDITOR + if (!Application.isPlaying && activeProfile == null) + { + UnityEditor.Selection.activeObject = Instance; + UnityEditor.EditorGUIUtility.PingObject(Instance); + } +#endif // UNITY_EDITOR + return activeProfile; + } + set + { + ResetConfiguration(value); + } + } + + /// + /// When a configuration Profile is replaced with a new configuration, force all services to reset and read the new values + /// + /// + public void ResetConfiguration(MixedRealityToolkitConfigurationProfile profile) + { + if (isResetting) + { + Debug.LogWarning("Already attempting to reset the configurations!"); + return; + } + + isResetting = true; + + if (activeProfile != null) + { + DisableAllServices(); + DestroyAllServices(); + } + + activeProfile = profile; + + if (profile != null) + { + DisableAllServices(); + DestroyAllServices(); + } + + InitializeServiceLocator(); + + isResetting = false; + } + + private static bool isResetting = false; + + #endregion Mixed Reality Toolkit Profile configuration + + #region Mixed Reality runtime service registry + + private static readonly Dictionary activeSystems = new Dictionary(); + + /// + /// Current active systems registered with the MixedRealityToolkit. + /// + /// + /// Systems can only be registered once by + /// + public static IReadOnlyDictionary ActiveSystems => activeSystems; + + private static readonly List> registeredMixedRealityServices = new List>(); + + /// + /// Local service registry for the Mixed Reality Toolkit, to allow runtime use of the . + /// + /// + /// Services can have one or more instances registered. Best to get them out by name. + /// + public static IReadOnlyList> RegisteredMixedRealityServices => registeredMixedRealityServices; + + #endregion Mixed Reality runtime service registry + + #region Instance Management + + private static bool isGettingInstance = false; + + /// + /// Returns the Singleton instance of the classes type. + /// If no instance is found, then we search for an instance in the scene. + /// If more than one instance is found, we log an error and no instance is returned. + /// + public static MixedRealityToolkit Instance + { + get + { + if (IsInitialized) + { + return instance; + } + + if (isGettingInstance) + { + return null; + } + + if (Application.isPlaying && !searchForInstance) + { + return null; + } + + isGettingInstance = true; + + var objects = FindObjectsOfType(); + searchForInstance = false; + MixedRealityToolkit newInstance; + + switch (objects.Length) + { + case 0: + newInstance = new GameObject(nameof(MixedRealityToolkit)).AddComponent(); + break; + case 1: + newInstance = objects[0]; + break; + default: + Debug.LogError($"Expected exactly 1 {nameof(MixedRealityToolkit)} but found {objects.Length}."); + isGettingInstance = false; + return null; + } + + if (newInstance == null) + { + Debug.LogError("Failed to get instance!"); + isGettingInstance = false; + return null; + } + + if (!isApplicationQuitting) + { + // Setup any additional things the instance needs. + newInstance.InitializeInstance(); + } + else + { + // Don't do any additional setup because the app is quitting. + instance = newInstance; + } + + if (instance == null) + { + Debug.LogError("Failed to get instance!"); + isGettingInstance = false; + return null; + } + + isGettingInstance = false; + return instance; + } + } + + private static MixedRealityToolkit instance; + + /// + /// Lock property for the Mixed Reality Toolkit to prevent reinitialization + /// + private static readonly object InitializedLock = new object(); + + private void InitializeInstance() + { + lock (InitializedLock) + { + if (IsInitialized) { return; } + + instance = this; + + if (Application.isPlaying) + { + DontDestroyOnLoad(instance.transform.root); + } + + Application.quitting += () => + { + isApplicationQuitting = true; + }; + +#if UNITY_EDITOR + UnityEditor.EditorApplication.hierarchyChanged += OnHierarchyChanged; + UnityEditor.EditorApplication.playModeStateChanged += OnPlayModeStateChanged; + + void OnHierarchyChanged() + { + if (instance != null) + { + Debug.Assert(instance.transform.parent == null, "The MixedRealityToolkit should not be parented under any other GameObject!"); + Debug.Assert(instance.transform.childCount == 0, "The MixedRealityToolkit should not have GameObject children!"); + } + } + + void OnPlayModeStateChanged(UnityEditor.PlayModeStateChange playModeState) + { + if (playModeState == UnityEditor.PlayModeStateChange.ExitingEditMode || playModeState == UnityEditor.PlayModeStateChange.EnteredEditMode) + { + isApplicationQuitting = false; + } + + if (playModeState == UnityEditor.PlayModeStateChange.ExitingEditMode && activeProfile == null) + { + UnityEditor.EditorApplication.isPlaying = false; + UnityEditor.Selection.activeObject = Instance; + UnityEditor.EditorGUIUtility.PingObject(Instance); + } + } +#endif // UNITY_EDITOR + + if (HasActiveProfile) + { + InitializeServiceLocator(); + } + } + } + + /// + /// Flag to search for instance the first time Instance property is called. + /// Subsequent attempts will generally switch this flag false, unless the instance was destroyed. + /// + // ReSharper disable once StaticMemberInGenericType + private static bool searchForInstance = true; + + private static bool isInitializing = false; + + private static bool isApplicationQuitting = false; + + /// + /// Expose an assertion whether the MixedRealityToolkit class is initialized. + /// + public static void AssertIsInitialized() + { + Debug.Assert(IsInitialized, "The MixedRealityToolkit has not been initialized."); + } + + /// + /// Returns whether the instance has been initialized or not. + /// + public static bool IsInitialized => instance != null; + + /// + /// Static function to determine if the MixedRealityToolkit class has been initialized or not. + /// + /// + public static bool ConfirmInitialized() + { + // ReSharper disable once UnusedVariable + // Assigning the Instance to access is used Implicitly. + MixedRealityToolkit access = Instance; + return IsInitialized; + } + + /// + /// Once all services are registered and properties updated, the Mixed Reality Toolkit will initialize all active services. + /// This ensures all services can reference each other once started. + /// + private void InitializeServiceLocator() + { + if (isInitializing) { return; } + + isInitializing = true; + + //If the Mixed Reality Toolkit is not configured, stop. + if (ActiveProfile == null) + { + Debug.LogError("No Mixed Reality Configuration Profile found, cannot initialize the Mixed Reality Toolkit"); + isInitializing = false; + return; + } + +#if UNITY_EDITOR + if (ActiveSystems.Count > 0) + { + activeSystems.Clear(); + } + + if (RegisteredMixedRealityServices.Count > 0) + { + registeredMixedRealityServices.Clear(); + } +#endif + + ClearCoreSystemCache(); + EnsureMixedRealityRequirements(); + + #region Services Registration + + if (ActiveProfile.IsCameraSystemEnabled) + { + if (!CreateAndRegisterService(ActiveProfile.CameraSystemType, ActiveProfile.CameraProfile) || CameraSystem == null) + { + Debug.LogError("Failed to start the Camera System!"); + } + } + + if (ActiveProfile.IsInputSystemEnabled) + { +#if UNITY_EDITOR + // Make sure unity axis mappings are set. + Utilities.Editor.InputMappingAxisUtility.CheckUnityInputManagerMappings(Definitions.Devices.ControllerMappingLibrary.UnityInputManagerAxes); +#endif + + if (CreateAndRegisterService(ActiveProfile.InputSystemType, ActiveProfile.InputSystemProfile) && InputSystem != null) + { + if (CreateAndRegisterService(ActiveProfile.InputSystemProfile.FocusProviderType)) + { + if (ActiveProfile.InputSystemProfile.ControllerDataProvidersProfile != null) + { + foreach (var controllerDataProvider in ActiveProfile.InputSystemProfile.ControllerDataProvidersProfile.RegisteredControllerDataProviders) + { + if (!CreateAndRegisterService( + controllerDataProvider.DataProviderType, + controllerDataProvider.RuntimePlatform, + controllerDataProvider.DataProviderName, + controllerDataProvider.Priority, + controllerDataProvider.Profile)) + { + Debug.LogError($"Failed to start {controllerDataProvider.DataProviderName}!"); + } + } + } + } + else + { + inputSystem = null; + Debug.LogError("Failed to register the focus provider! The input system will not function without it."); + } + } + else + { + Debug.LogError("Failed to start the Input System!"); + } + } + else + { +#if UNITY_EDITOR + Utilities.Editor.InputMappingAxisUtility.RemoveMappings(Definitions.Devices.ControllerMappingLibrary.UnityInputManagerAxes); +#endif + } + + if (ActiveProfile.IsBoundarySystemEnabled) + { + if (!CreateAndRegisterService(ActiveProfile.BoundarySystemSystemType, ActiveProfile.BoundaryVisualizationProfile) || BoundarySystem == null) + { + Debug.LogError("Failed to start the Boundary System!"); + } + } + + if (ActiveProfile.IsSpatialAwarenessSystemEnabled) + { +#if UNITY_EDITOR + // Setup the default spatial awareness layers in the project settings. + LayerExtensions.SetupLayer(31, Definitions.SpatialAwarenessSystem.MixedRealitySpatialAwarenessSystemProfile.SpatialAwarenessMeshesLayerName); + LayerExtensions.SetupLayer(30, Definitions.SpatialAwarenessSystem.MixedRealitySpatialAwarenessSystemProfile.SpatialAwarenessSurfacesLayerName); +#endif + if (CreateAndRegisterService(ActiveProfile.SpatialAwarenessSystemSystemType, ActiveProfile.SpatialAwarenessProfile) && SpatialAwarenessSystem != null) + { + if (ActiveProfile.SpatialAwarenessProfile.RegisteredSpatialObserverDataProviders != null) + { + foreach (var spatialObserver in ActiveProfile.SpatialAwarenessProfile.RegisteredSpatialObserverDataProviders) + { + if (!CreateAndRegisterService( + spatialObserver.SpatialObserverType, + spatialObserver.RuntimePlatform, + spatialObserver.SpatialObserverName, + spatialObserver.Priority, + spatialObserver.Profile)) + { + Debug.LogError($"Failed to start {spatialObserver.SpatialObserverName}!"); + } + } + } + } + else + { + Debug.LogError("Failed to start the Spatial Awareness System!"); + } + } + else + { +#if UNITY_EDITOR + LayerExtensions.RemoveLayer(Definitions.SpatialAwarenessSystem.MixedRealitySpatialAwarenessSystemProfile.SpatialAwarenessMeshesLayerName); + LayerExtensions.RemoveLayer(Definitions.SpatialAwarenessSystem.MixedRealitySpatialAwarenessSystemProfile.SpatialAwarenessSurfacesLayerName); +#endif + } + + if (ActiveProfile.IsTeleportSystemEnabled) + { + // Note: The Teleport system doesn't have a profile, but might in the future. + var dummyProfile = ScriptableObject.CreateInstance(); + + if (!CreateAndRegisterService(ActiveProfile.TeleportSystemSystemType, dummyProfile) || TeleportSystem == null) + { + Debug.LogError("Failed to start the Teleport System!"); + } + } + + if (ActiveProfile.IsNetworkingSystemEnabled) + { + if (CreateAndRegisterService(ActiveProfile.NetworkingSystemSystemType, ActiveProfile.NetworkingSystemProfile) && NetworkingSystem != null) + { + if (ActiveProfile.NetworkingSystemProfile.RegisteredNetworkDataProviders != null) + { + foreach (var networkProvider in ActiveProfile.NetworkingSystemProfile.RegisteredNetworkDataProviders) + { + if (!CreateAndRegisterService( + networkProvider.DataProviderType, + networkProvider.RuntimePlatform, + networkProvider.DataProviderName, + networkProvider.Priority, + networkProvider.Profile)) + { + Debug.LogError($"Failed to start {networkProvider.DataProviderName}!"); + } + } + } + } + else + { + Debug.LogError("Failed to start the Networking System!"); + } + } + + if (ActiveProfile.IsDiagnosticsSystemEnabled) + { + if (!CreateAndRegisterService(ActiveProfile.DiagnosticsSystemSystemType, ActiveProfile.DiagnosticsSystemProfile) || DiagnosticsSystem == null) + { + Debug.LogError("Failed to start the Diagnostics System!"); + } + } + + if (ActiveProfile.RegisteredServiceProvidersProfile != null) + { + foreach (var configuration in ActiveProfile.RegisteredServiceProvidersProfile.Configurations) + { + if (CreateAndRegisterService( + configuration.ComponentType, + configuration.RuntimePlatform, + configuration.ComponentName, + configuration.Priority, + configuration.ConfigurationProfile)) + { + if (configuration.ConfigurationProfile == null) { continue; } + + foreach (var dataProvider in configuration.ConfigurationProfile.RegisteredDataProviders) + { + if (!CreateAndRegisterService( + dataProvider.DataModelType, + dataProvider.RuntimePlatform, + dataProvider.DataModelName, + dataProvider.Priority, + dataProvider.ConfigurationProfile)) + { + Debug.LogError($"Failed to register {dataProvider.DataModelName} data model for {configuration.ComponentName} extension service!"); + } + } + } + else + { + Debug.LogError($"Failed to register {configuration.ComponentName} extension service!"); + } + } + } + + #endregion Service Registration + + #region Services Initialization + + var orderedCoreSystems = activeSystems.OrderBy(m => m.Value.Priority).ToArray(); + activeSystems.Clear(); + + foreach (var system in orderedCoreSystems) + { + RegisterService(system.Key, system.Value); + } + + var orderedServices = registeredMixedRealityServices.OrderBy(service => service.Item2.Priority).ToArray(); + registeredMixedRealityServices.Clear(); + + foreach (var service in orderedServices) + { + RegisterService(service.Item1, service.Item2); + } + + InitializeAllServices(); + + #endregion Services Initialization + + isInitializing = false; + } + + /// + /// Returns the MixedRealityPlayspace for the local player + /// + public Transform MixedRealityPlayspace + { + get + { + AssertIsInitialized(); + + if (mixedRealityPlayspace) + { + return mixedRealityPlayspace; + } + + if (CameraCache.Main.transform.parent == null) + { + mixedRealityPlayspace = new GameObject(MixedRealityPlayspaceName).transform; + CameraCache.Main.transform.SetParent(mixedRealityPlayspace); + } + else + { + if (CameraCache.Main.transform.parent.name != MixedRealityPlayspaceName) + { + // Since the scene is set up with a different camera parent, its likely + // that there's an expectation that that parent is going to be used for + // something else. We print a warning to call out the fact that we're + // co-opting this object for use with teleporting and such, since that + // might cause conflicts with the parent's intended purpose. + Debug.LogWarning($"The Mixed Reality Toolkit expected the camera\'s parent to be named {MixedRealityPlayspaceName}. The existing parent will be renamed and used instead."); + // If we rename it, we make it clearer that why it's being teleported around at runtime. + CameraCache.Main.transform.parent.name = MixedRealityPlayspaceName; + } + + mixedRealityPlayspace = CameraCache.Main.transform.parent; + } + + // It's very important that the MixedRealityPlayspace align with the tracked space, + // otherwise world-locked things like playspace boundaries won't be aligned properly. + // For now, we'll just assume that when the playspace is first initialized, the + // tracked space origin overlaps with the world space origin. If a platform ever does + // something else (i.e, placing the lower left hand corner of the tracked space at world + // space 0,0,0), we should compensate for that here. + return mixedRealityPlayspace; + } + } + + private Transform mixedRealityPlayspace; + + private const string MixedRealityPlayspaceName = "MixedRealityPlayspace"; + + private static void EnsureMixedRealityRequirements() + { + // There's lots of documented cases that if the camera doesn't start at 0,0,0, things break with the WMR SDK specifically. + // We'll enforce that here, then tracking can update it to the appropriate position later. + CameraCache.Main.transform.position = Vector3.zero; + + bool addedComponents = false; + + if (!Application.isPlaying) + { + var eventSystems = FindObjectsOfType(); + + if (eventSystems.Length == 0) + { + CameraCache.Main.gameObject.EnsureComponent(); + addedComponents = true; + } + else + { + bool raiseWarning; + + if (eventSystems.Length == 1) + { + raiseWarning = eventSystems[0].gameObject != CameraCache.Main.gameObject; + } + else + { + raiseWarning = true; + } + + if (raiseWarning) + { + Debug.LogWarning("Found an existing event system in your scene. The Mixed Reality Toolkit requires only one, and must be found on the main camera."); + } + } + } + + if (!addedComponents) + { + CameraCache.Main.gameObject.EnsureComponent(); + } + } + + #endregion Instance Management + + #region MonoBehaviour Implementation + +#if UNITY_EDITOR + private void OnValidate() + { + if (!IsInitialized && !UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode) + { + ConfirmInitialized(); + } + } +#endif // UNITY_EDITOR + + private void Awake() + { + if (Application.isBatchMode || !Application.isEditor) + { + Application.SetStackTraceLogType(LogType.Log, StackTraceLogType.None); + } + + if (!Application.isPlaying) { return; } + + if (IsInitialized && instance != this) + { + if (Application.isEditor) + { + DestroyImmediate(gameObject); + } + else + { + Destroy(gameObject); + } + + Debug.LogWarning("Trying to instantiate a second instance of the Mixed Reality Toolkit. Additional Instance was destroyed"); + } + else if (!IsInitialized) + { + InitializeInstance(); + } + } + + private void OnEnable() + { + if (Application.isPlaying) + { + EnableAllServices(); + } + } + + private void Update() + { + if (Application.isPlaying) + { + UpdateAllServices(); + } + } + + private void OnDisable() + { + if (Application.isPlaying) + { + DisableAllServices(); + } + } + + private void OnDestroy() + { + DestroyAllServices(); + ClearCoreSystemCache(); + Dispose(); + } + + private void OnApplicationFocus(bool focus) + { + if (!Application.isPlaying) { return; } + + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + foreach (var system in activeSystems) + { + system.Value.OnApplicationFocus(focus); + } + + foreach (var service in registeredMixedRealityServices) + { + service.Item2.OnApplicationFocus(focus); + } + } + + private void OnApplicationPause(bool pause) + { + if (!Application.isPlaying) { return; } + + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + foreach (var system in activeSystems) + { + system.Value.OnApplicationPause(pause); + } + + foreach (var service in registeredMixedRealityServices) + { + service.Item2.OnApplicationPause(pause); + } + } + + #endregion MonoBehaviour Implementation + + #region Service Container Management + + #region Registration + + /// + /// Add a service instance to the Mixed Reality Toolkit active service registry. + /// + /// + /// + /// True, if the service was successfully registered. + public static bool RegisterService(IMixedRealityService serviceInstance) where T : IMixedRealityService + { + return RegisterServiceInternal(typeof(T), serviceInstance); + } + + /// + /// Add a service instance to the Mixed Reality Toolkit active service registry. + /// + /// The interface type for the system to be registered. E.G. InputSystem, BoundarySystem + /// The Instance of the service class to register + /// True, if the service was successfully registered. + private static bool RegisterService(Type interfaceType, IMixedRealityService serviceInstance) + { + return RegisterServiceInternal(interfaceType, serviceInstance); + } + + /// + /// Creates a new instance of a service and registers it to the Mixed Reality Toolkit service registry for the specified platform. + /// + /// The interface type for the system to be registered. + /// The concrete type to instantiate. + /// Optional arguments used when instantiating the concrete type. + /// True, if the service was successfully created and registered. + public static bool CreateAndRegisterService(Type concreteType, params object[] args) where T : IMixedRealityService + { + return CreateAndRegisterService(concreteType, (SupportedPlatforms)(-1), args); + } + + /// + /// Creates a new instance of a service and registers it to the Mixed Reality Toolkit service registry for the specified platform. + /// + /// The interface type for the system to be registered. + /// The concrete type to instantiate. + /// The runtime platform to check against when registering. + /// Optional arguments used when instantiating the concrete type. + /// True, if the service was successfully created and registered. + public static bool CreateAndRegisterService(Type concreteType, SupportedPlatforms supportedPlatforms, params object[] args) where T : IMixedRealityService + { + if (isApplicationQuitting) + { + return false; + } + +#if !UNITY_EDITOR + if (!Application.platform.IsPlatformSupported(supportedPlatforms)) +#else + if (!UnityEditor.EditorUserBuildSettings.activeBuildTarget.IsPlatformSupported(supportedPlatforms)) +#endif + { + // We return true so we don't raise en error. + // Even though we did not register the service, + // it's expected that this is the intended behavior. + return true; + } + + if (concreteType == null) + { + Debug.LogError($"Unable to register a service with a null concrete {typeof(T).Name} type."); + return false; + } + + if (!typeof(IMixedRealityService).IsAssignableFrom(concreteType)) + { + Debug.LogError($"Unable to register the {concreteType.Name} service. It does not implement {typeof(IMixedRealityService)}."); + return false; + } + + IMixedRealityService serviceInstance; + + try + { + serviceInstance = Activator.CreateInstance(concreteType, args) as IMixedRealityService; + } + catch (System.Reflection.TargetInvocationException e) + { + Debug.LogError($"Failed to register the {concreteType.Name} service: {e.InnerException?.GetType()} - {e.InnerException?.Message}\n{e.InnerException?.StackTrace}"); + return false; + } + catch (Exception e) + { + Debug.LogError($"Failed to register the {concreteType.Name} service: {e.GetType()} - {e.Message}\n{e.StackTrace}"); + return false; + } + + if (serviceInstance == null) + { + Debug.LogError($"Failed to create a valid instance of {concreteType.Name}!"); + return false; + } + + return RegisterServiceInternal(typeof(T), serviceInstance); + } + + /// + /// Internal service registration. + /// + /// The interface type for the system to be registered. + /// Instance of the service. + /// True if registration is successful, false otherwise. + private static bool RegisterServiceInternal(Type interfaceType, IMixedRealityService serviceInstance) + { + if (serviceInstance == null) + { + Debug.LogWarning($"Unable to add a {interfaceType.Name} service with a null instance."); + return false; + } + + if (!CanGetService(interfaceType, serviceInstance.Name)) { return false; } + + if (GetServiceByNameInternal(interfaceType, serviceInstance.Name, out var preExistingService)) + { + Debug.LogError($"There's already a {interfaceType.Name}.{preExistingService.Name} registered!"); + return false; + } + + if (IsCoreSystem(interfaceType)) + { + activeSystems.Add(interfaceType, serviceInstance); + } + else if (typeof(IMixedRealityDataProvider).IsAssignableFrom(interfaceType) || + typeof(IMixedRealityExtensionService).IsAssignableFrom(interfaceType)) + { + registeredMixedRealityServices.Add(new Tuple(interfaceType, serviceInstance)); + } + else + { + Debug.LogError($"Unable to register {interfaceType.Name}. Concrete type does not implement {typeof(IMixedRealityExtensionService).Name} or {typeof(IMixedRealityDataProvider).Name}."); + return false; + } + + if (!isInitializing) + { + try + { + serviceInstance.Initialize(); + serviceInstance.Enable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + return true; + } + + /// + /// Remove all services from the Mixed Reality Toolkit active service registry for a given type + /// + public static bool UnregisterServicesOfType() where T : IMixedRealityService + { + return UnregisterServiceInternal(typeof(T), string.Empty); + } + + /// + /// Removes a specific service with the provided name. + /// + /// The name of the service to be removed. (Only for runtime services) + public static bool UnregisterService(string serviceName) where T : IMixedRealityService + { + return UnregisterServiceInternal(typeof(T), serviceName); + } + + /// + /// Remove services from the Mixed Reality Toolkit active service registry for a given type and name + /// Name is only supported for Mixed Reality runtime services + /// + /// The interface type for the system to be removed. E.G. InputSystem, BoundarySystem + /// The name of the service to be removed. (Only for runtime services) + private static bool UnregisterServiceInternal(Type interfaceType, string serviceName) + { + if (interfaceType == null) + { + Debug.LogError("Unable to remove null service type."); + return false; + } + + if (string.IsNullOrEmpty(serviceName)) + { + return GetActiveServices(interfaceType).Aggregate(true, (current, service) => current & UnregisterServiceInternal(interfaceType, service.Name)); + } + + if (GetServiceByNameInternal(interfaceType, serviceName, out var serviceInstance)) + { + try + { + serviceInstance.Disable(); + serviceInstance.Destroy(); + serviceInstance.Dispose(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + + if (IsCoreSystem(interfaceType)) + { + activeSystems.Remove(interfaceType); + return true; + } + + Tuple registryInstance = registeredMixedRealityServices.FirstOrDefault(service => service.Item2.Name == serviceName); + + if (registeredMixedRealityServices.Contains(registryInstance)) + { + registeredMixedRealityServices.Remove(registryInstance); + return true; + } + + Debug.LogError($"Failed to find registry instance of [{interfaceType.Name}] \"{serviceInstance.Name}\"!"); + } + + return false; + } + + #endregion Registration + + #region Multiple Service Management + + /// + /// Enable all services in the Mixed Reality Toolkit active service registry for a given type + /// + /// The interface type for the system to be enabled. E.G. InputSystem, BoundarySystem + public static void EnableAllServicesOfType() where T : IMixedRealityService + { + EnableAllServicesByTypeAndName(typeof(T), string.Empty); + } + + /// + /// Enables a single service by name. + /// + /// The interface type for the system to be enabled. E.G. InputSystem, BoundarySystem + /// + public static void EnableService(string serviceName) where T : IMixedRealityService + { + EnableAllServicesByTypeAndName(typeof(T), serviceName); + } + + /// + /// Enable all services in the Mixed Reality Toolkit active service registry for a given type and name + /// + /// The interface type for the system to be enabled. E.G. InputSystem, BoundarySystem + /// Name of the specific service + private static void EnableAllServicesByTypeAndName(Type interfaceType, string serviceName) + { + if (interfaceType == null) + { + Debug.LogError("Unable to enable null service type."); + return; + } + + var services = new List(); + GetAllServicesByNameInternal(interfaceType, serviceName, ref services); + + for (int i = 0; i < services?.Count; i++) + { + try + { + services[i].Enable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + /// + /// Disable all services in the Mixed Reality Toolkit active service registry for a given type + /// + /// The interface type for the system to be enabled. E.G. InputSystem, BoundarySystem + public static void DisableAllServiceOfType() where T : IMixedRealityService + { + DisableAllServicesByTypeAndName(typeof(T), string.Empty); + } + + /// + /// Disable a single service by name. + /// + /// The interface type for the system to be enabled. E.G. InputSystem, BoundarySystem + /// Name of the specific service + public static void DisableService(string serviceName) where T : IMixedRealityService + { + DisableAllServicesByTypeAndName(typeof(T), serviceName); + } + + /// + /// Disable all services in the Mixed Reality Toolkit active service registry for a given type and name + /// + /// The interface type for the system to be disabled. E.G. InputSystem, BoundarySystem + /// Name of the specific service + private static void DisableAllServicesByTypeAndName(Type interfaceType, string serviceName) + { + if (interfaceType == null) + { + Debug.LogError("Unable to disable null service type."); + return; + } + + var services = new List(); + GetAllServicesByNameInternal(interfaceType, serviceName, ref services); + + for (int i = 0; i < services?.Count; i++) + { + try + { + services[i].Disable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + /// + /// Retrieve all services from the Mixed Reality Toolkit active service registry for a given type and an optional name + /// + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem. + /// An array of services that meet the search criteria + public static List GetActiveServices() where T : IMixedRealityService + { + return GetActiveServices(typeof(T)); + } + + /// + /// Retrieve all services from the Mixed Reality Toolkit active service registry for a given type and an optional name + /// + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem + /// An array of services that meet the search criteria + private static List GetActiveServices(Type interfaceType) + { + return GetActiveServices(interfaceType, string.Empty); + } + + /// + /// Retrieve all services from the Mixed Reality Toolkit active service registry for a given type and name + /// + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem + /// Name of the specific service + /// An array of services that meet the search criteria + private static List GetActiveServices(Type interfaceType, string serviceName) + { + var services = new List(); + + if (interfaceType == null) + { + Debug.LogWarning("Unable to get services with a type of null."); + return services; + } + + if (IsCoreSystem(interfaceType)) + { + foreach (var system in activeSystems) + { + if (system.Key.Name == interfaceType.Name) + { + services.Add(system.Value); + } + } + } + else + { + // If no name provided, return all services of the same type. Else return the type/name combination. + if (string.IsNullOrWhiteSpace(serviceName)) + { + GetAllServicesInternal(interfaceType, ref services); + } + else + { + GetAllServicesByNameInternal(interfaceType, serviceName, ref services); + } + } + + return services; + } + + private void InitializeAllServices() + { + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + // Initialize all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Initialize(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Initialize all registered runtime services + foreach (var service in registeredMixedRealityServices) + { + try + { + service.Item2.Initialize(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + private void ResetAllServices() + { + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + // Reset all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Reset(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Reset all registered runtime services + foreach (var service in registeredMixedRealityServices) + { + try + { + service.Item2.Reset(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + private void EnableAllServices() + { + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + // Enable all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Enable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Reset all registered runtime services + foreach (var service in registeredMixedRealityServices) + { + try + { + service.Item2.Enable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + private void UpdateAllServices() + { + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + // Update all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Update(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Update all registered runtime services + foreach (var service in registeredMixedRealityServices) + { + try + { + service.Item2.Update(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + private void DisableAllServices() + { + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + // Disable all registered runtime services in reverse priority order + for (var i = registeredMixedRealityServices.Count - 1; i >= 0; i--) + { + try + { + registeredMixedRealityServices[i].Item2.Disable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Disable all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Disable(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + } + + private void DestroyAllServices() + { + // If the Mixed Reality Toolkit is not configured, stop. + if (activeProfile == null) { return; } + + // Destroy all registered runtime services in reverse priority order + for (var i = registeredMixedRealityServices.Count - 1; i >= 0; i--) + { + try + { + registeredMixedRealityServices[i].Item2.Destroy(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Destroy all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Destroy(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Dispose all registered runtime services in reverse priority order + for (var i = registeredMixedRealityServices.Count - 1; i >= 0; i--) + { + try + { + registeredMixedRealityServices[i].Item2.Dispose(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + // Dispose all systems + foreach (var system in activeSystems) + { + try + { + system.Value.Dispose(); + } + catch (Exception e) + { + Debug.LogError($"{e.Message}\n{e.StackTrace}"); + } + } + + activeSystems.Clear(); + registeredMixedRealityServices.Clear(); + } + + #endregion Multiple Service Management + + #region Service Utilities + + /// + /// Generic function used to interrogate the Mixed Reality Toolkit registered services registry for the existence of a service. + /// + /// The interface type for the service to be retrieved. + /// + /// Note: type should be the Interface of the system to be retrieved and not the concrete class itself. + /// + /// True, there is a service registered with the selected interface, False, no service found for that interface + public static bool IsServiceRegistered() where T : IMixedRealityService + { + return GetService(typeof(T)) != null; + } + + /// + /// Generic function used to interrogate the Mixed Reality Toolkit active system registry for the existence of a core system. + /// + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem. + /// + /// Note: type should be the Interface of the system to be retrieved and not the concrete class itself. + /// + /// True, there is a system registered with the selected interface, False, no system found for that interface + /// Type is . + public static bool IsSystemRegistered() where T : IMixedRealityService + { + return activeSystems.TryGetValue(typeof(T), out _); + } + + private static bool IsCoreSystem(Type concreteType) + { + if (concreteType == null) + { + Debug.LogWarning("Null cannot be a core system."); + return false; + } + + return typeof(IMixedRealityCameraSystem).IsAssignableFrom(concreteType) || + typeof(IMixedRealityInputSystem).IsAssignableFrom(concreteType) || + typeof(IMixedRealityFocusProvider).IsAssignableFrom(concreteType) || + typeof(IMixedRealityTeleportSystem).IsAssignableFrom(concreteType) || + typeof(IMixedRealityBoundarySystem).IsAssignableFrom(concreteType) || + typeof(IMixedRealitySpatialAwarenessSystem).IsAssignableFrom(concreteType) || + typeof(IMixedRealityNetworkingSystem).IsAssignableFrom(concreteType) || + typeof(IMixedRealityDiagnosticsSystem).IsAssignableFrom(concreteType); + } + + private static void ClearCoreSystemCache() + { + cameraSystem = null; + inputSystem = null; + teleportSystem = null; + boundarySystem = null; + spatialAwarenessSystem = null; + diagnosticsSystem = null; + } + + /// + /// Generic function used to retrieve a service from the Mixed Reality Toolkit active service registry + /// + /// Should the logs show when services cannot be found? + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem. + /// *Note type should be the Interface of the system to be retrieved and not the class itself + /// The instance of the service class that is registered with the selected Interface + public static T GetService(bool showLogs = true) where T : IMixedRealityService + { + return (T)GetService(typeof(T), showLogs); + } + + /// + /// Retrieve a service from the Mixed Reality Toolkit active service registry + /// + /// Name of the specific service + /// Should the logs show when services cannot be found? + /// The Mixed Reality Toolkit of the specified type + public static T GetService(string serviceName, bool showLogs = true) where T : IMixedRealityService + { + return (T)GetService(typeof(T), serviceName, showLogs); + } + + /// + /// Retrieve a service from the Mixed Reality Toolkit active service registry + /// + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem + /// Should the logs show when services cannot be found? + /// The Mixed Reality Toolkit of the specified type + private static IMixedRealityService GetService(Type interfaceType, bool showLogs = true) + { + return GetService(interfaceType, string.Empty, showLogs); + } + + /// + /// Retrieve a service from the Mixed Reality Toolkit active service registry + /// + /// The interface type for the system to be retrieved. E.G. InputSystem, BoundarySystem + /// Name of the specific service + /// Should the logs show when services cannot be found? + /// The Mixed Reality Toolkit of the specified type + private static IMixedRealityService GetService(Type interfaceType, string serviceName, bool showLogs = true) + { + if (!GetServiceByNameInternal(interfaceType, serviceName, out var serviceInstance) && showLogs) + { + Debug.LogError($"Unable to find {(string.IsNullOrWhiteSpace(serviceName) ? interfaceType.Name : serviceName)} service."); + } + + return serviceInstance; + } + + /// + /// Retrieve the first service from the registry that meets the selected type and name + /// + /// Interface type of the service being requested + /// Name of the specific service + /// return parameter of the function + private static bool GetServiceByNameInternal(Type interfaceType, string serviceName, out IMixedRealityService serviceInstance) + { + serviceInstance = null; + + if (!CanGetService(interfaceType, serviceName)) { return false; } + + if (IsCoreSystem(interfaceType)) + { + if (activeSystems.TryGetValue(interfaceType, out serviceInstance)) + { + if (CheckServiceMatch(interfaceType, serviceName, interfaceType, serviceInstance)) + { + return true; + } + + serviceInstance = null; + } + } + else + { + var foundServices = GetActiveServices(interfaceType, serviceName); + + switch (foundServices.Count) + { + case 0: + return false; + case 1: + serviceInstance = foundServices[0]; + return true; + default: + Debug.LogError($"Found multiple instances of {interfaceType.Name}! For better results, pass the name of the service or use GetActiveServices()"); + return false; + } + } + + return false; + } + + /// + /// Gets all services by type. + /// + /// The interface type to search for. + /// Memory reference value of the service list to update. + private static void GetAllServicesInternal(Type interfaceType, ref List services) + { + GetAllServicesByNameInternal(interfaceType, string.Empty, ref services); + } + + /// + /// Gets all services by type and name. + /// + /// The interface type to search for. + /// The name of the service to search for. If the string is empty than any matching will be added to the list. + /// Memory reference value of the service list to update. + private static void GetAllServicesByNameInternal(Type interfaceType, string serviceName, ref List services) + { + if (!CanGetService(interfaceType, serviceName)) { return; } + + if (IsCoreSystem(interfaceType)) + { + if (GetServiceByNameInternal(interfaceType, serviceName, out var serviceInstance) && + CheckServiceMatch(interfaceType, serviceName, interfaceType, serviceInstance)) + { + services.Add(serviceInstance); + } + } + else + { + for (int i = 0; i < registeredMixedRealityServices.Count; i++) + { + if (CheckServiceMatch(interfaceType, serviceName, registeredMixedRealityServices[i].Item1, registeredMixedRealityServices[i].Item2)) + { + services.Add(registeredMixedRealityServices[i].Item2); + } + } + } + } + + /// + /// Check if the interface type and name matches the registered interface type and service instance found. + /// + /// The interface type of the service to check. + /// The name of the service to check. + /// The registered interface type. + /// The instance of the registered service. + /// True, if the registered service contains the interface type and name. + private static bool CheckServiceMatch(Type interfaceType, string serviceName, Type registeredInterfaceType, IMixedRealityService serviceInstance) + { + bool isValid = string.IsNullOrEmpty(serviceName) || serviceInstance.Name == serviceName; + + if ((registeredInterfaceType.Name == interfaceType.Name || serviceInstance.GetType().Name == interfaceType.Name) && isValid) + { + return true; + } + + var interfaces = serviceInstance.GetType().GetInterfaces(); + + for (int i = 0; i < interfaces?.Length; i++) + { + if (interfaces[i].Name == interfaceType.Name && isValid) + { + return true; + } + } + + return false; + } + + /// + /// Checks if the system is ready to get a service. + /// + /// + /// + /// + private static bool CanGetService(Type interfaceType, string serviceName) + { + if (isApplicationQuitting) + { + return false; + } + + if (interfaceType == null) + { + Debug.LogError($"{serviceName} interface type is null."); + return false; + } + + if (!typeof(IMixedRealityService).IsAssignableFrom(interfaceType)) + { + Debug.LogError($"{interfaceType.Name} does not implement {typeof(IMixedRealityService).Name}."); + return false; + } + + return true; + } + + #endregion Service Utilities + + #endregion Service Container Management + + #region Core System Accessors + + private static IMixedRealityCameraSystem cameraSystem = null; + + /// + /// The current Camera System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealityCameraSystem CameraSystem + { + get + { + if (isApplicationQuitting) + { + return null; + } + + if (cameraSystem != null) + { + return cameraSystem; + } + + cameraSystem = GetService(showLogs: logCameraSystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logCameraSystem = cameraSystem != null; + return cameraSystem; + } + } + + private static bool logCameraSystem = true; + + private static IMixedRealityInputSystem inputSystem = null; + + /// + /// The current Input System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealityInputSystem InputSystem + { + get + { + if (!IsInitialized || + isApplicationQuitting || + instance.activeProfile == null || + (instance.activeProfile != null && !instance.activeProfile.IsInputSystemEnabled)) + { + return null; + } + + if (inputSystem != null) + { + return inputSystem; + } + + inputSystem = GetService(showLogs: logInputSystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logInputSystem = inputSystem != null; + return inputSystem; + } + } + + private static bool logInputSystem = true; + + private static IMixedRealityBoundarySystem boundarySystem = null; + + /// + /// The current Boundary System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealityBoundarySystem BoundarySystem + { + get + { + if (!IsInitialized || + isApplicationQuitting || + instance.activeProfile == null || + (instance.activeProfile != null && !instance.activeProfile.IsBoundarySystemEnabled)) + { + return null; + } + + if (boundarySystem != null) + { + return boundarySystem; + } + + boundarySystem = GetService(showLogs: logBoundarySystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logBoundarySystem = boundarySystem != null; + return boundarySystem; + } + } + + private static bool logBoundarySystem = true; + + private static IMixedRealitySpatialAwarenessSystem spatialAwarenessSystem = null; + + /// + /// The current Spatial Awareness System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealitySpatialAwarenessSystem SpatialAwarenessSystem + { + get + { + if (!IsInitialized || + isApplicationQuitting || + instance.activeProfile == null || + (instance.activeProfile != null && !instance.activeProfile.IsSpatialAwarenessSystemEnabled)) + { + return null; + } + + if (spatialAwarenessSystem != null) + { + return spatialAwarenessSystem; + } + + spatialAwarenessSystem = GetService(showLogs: logSpatialAwarenessSystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logSpatialAwarenessSystem = spatialAwarenessSystem != null; + return spatialAwarenessSystem; + } + } + + private static bool logSpatialAwarenessSystem = true; + + private static IMixedRealityTeleportSystem teleportSystem = null; + + /// + /// The current Teleport System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealityTeleportSystem TeleportSystem + { + get + { + if (!IsInitialized || + isApplicationQuitting || + instance.activeProfile == null || + (instance.activeProfile != null && !instance.activeProfile.IsTeleportSystemEnabled)) + { + return null; + } + + if (teleportSystem != null) + { + return teleportSystem; + } + + teleportSystem = GetService(showLogs: logTeleportSystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logTeleportSystem = teleportSystem != null; + return teleportSystem; + } + } + + private static bool logTeleportSystem = true; + + private static IMixedRealityNetworkingSystem networkingSystem = null; + + /// + /// The current Networking System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealityNetworkingSystem NetworkingSystem + { + get + { + if (!IsInitialized || + isApplicationQuitting || + instance.activeProfile == null || + (instance.activeProfile != null && !instance.activeProfile.IsNetworkingSystemEnabled)) + { + return null; + } + + if (networkingSystem != null) + { + return networkingSystem; + } + + networkingSystem = GetService(showLogs: logNetworkingSystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logNetworkingSystem = networkingSystem != null; + return networkingSystem; + } + } + + private static bool logNetworkingSystem = true; + + private static IMixedRealityDiagnosticsSystem diagnosticsSystem = null; + + /// + /// The current Diagnostics System registered with the Mixed Reality Toolkit. + /// + public static IMixedRealityDiagnosticsSystem DiagnosticsSystem + { + get + { + if (!IsInitialized || + isApplicationQuitting || + instance.activeProfile == null || + (instance.activeProfile != null && !instance.activeProfile.IsDiagnosticsSystemEnabled)) + { + return null; + } + + if (diagnosticsSystem != null) + { + return diagnosticsSystem; + } + + diagnosticsSystem = GetService(showLogs: logDiagnosticsSystem); + // If we found a valid system, then we turn logging back on for the next time we need to search. + // If we didn't find a valid system, then we stop logging so we don't spam the debug window. + logDiagnosticsSystem = diagnosticsSystem != null; + return diagnosticsSystem; + } + } + + private static bool logDiagnosticsSystem = true; + + #endregion Core System Accessors + + #region IDisposable Implementation + + private bool disposed; + + ~MixedRealityToolkit() + { + OnDispose(true); + } + + public void Dispose() + { + if (disposed) { return; } + disposed = true; + GC.SuppressFinalize(this); + OnDispose(false); + } + + private void OnDispose(bool finalizing) + { + if (instance == this) + { + instance = null; + searchForInstance = true; + } + } + + #endregion IDisposable Implementation + } +} \ No newline at end of file diff --git a/Services/MixedRealityToolkit.cs.meta b/Services/MixedRealityToolkit.cs.meta new file mode 100644 index 000000000..c3c5523e0 --- /dev/null +++ b/Services/MixedRealityToolkit.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6f0863d1e64745cebe447efdcc7e45b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: + - activeProfile: {instanceID: 0} + executionOrder: 25 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/NetworkingSystem.meta b/Services/NetworkingSystem.meta new file mode 100644 index 000000000..58dccc2e8 --- /dev/null +++ b/Services/NetworkingSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 9a1db752e2ec47bf8761187d65660d9c +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/NetworkingSystem/MixedRealityNetworkingSystem.cs b/Services/NetworkingSystem/MixedRealityNetworkingSystem.cs new file mode 100644 index 000000000..8cbe32222 --- /dev/null +++ b/Services/NetworkingSystem/MixedRealityNetworkingSystem.cs @@ -0,0 +1,63 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using XRTK.Definitions.NetworkingSystem; +using XRTK.Interfaces.NetworkingSystem; + +namespace XRTK.Services.NetworkingSystem +{ + /// + /// The Mixed Reality Toolkit's default implementation of the + /// + public class MixedRealityNetworkingSystem : BaseEventSystem, IMixedRealityNetworkingSystem + { + /// + /// Constructor. + /// + /// + public MixedRealityNetworkingSystem(MixedRealityNetworkSystemProfile profile) + : base(profile) + { + } + + #region IMixedRealityNetworkingSystem Implementation + + /// + public HashSet NetworkDataProviders { get; } = new HashSet(); + + /// + public uint RequestNetworkDataProviderSourceId() + { + return 0; + } + + /// + public void RaiseNetworkDataProviderDetected(IMixedRealityNetworkDataProvider networkDataProvider) + { + } + + /// + public void RaiseNetworkDataProviderLost(IMixedRealityNetworkDataProvider networkDataProvider) + { + } + + /// + public void SendData(T data) + { + // Notes: we can mix and match or do some special routing here if we wanted. + foreach (var networkDataProvider in NetworkDataProviders) + { + networkDataProvider.SendData(data); + } + } + + /// + public void RaiseDataReceived(T data) + { + // TODO forward to all the registered listeners. + } + + #endregion IMixedRealityNetworkingSystem Implementation + } +} \ No newline at end of file diff --git a/Services/NetworkingSystem/MixedRealityNetworkingSystem.cs.meta b/Services/NetworkingSystem/MixedRealityNetworkingSystem.cs.meta new file mode 100644 index 000000000..f96f7c18e --- /dev/null +++ b/Services/NetworkingSystem/MixedRealityNetworkingSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 20f0416c2bad45819fe1c7b68162332c +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/SpatialAwarenessSystem.meta b/Services/SpatialAwarenessSystem.meta new file mode 100644 index 000000000..79f3158d0 --- /dev/null +++ b/Services/SpatialAwarenessSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 214c68b86a924dc181aa659d92e77c9f +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs b/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs new file mode 100644 index 000000000..15fc650d9 --- /dev/null +++ b/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs @@ -0,0 +1,338 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using System.Collections.Generic; +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions; +using XRTK.Definitions.SpatialAwarenessSystem; +using XRTK.EventDatum.SpatialAwarenessSystem; +using XRTK.Interfaces.Providers.SpatialObservers; +using XRTK.Interfaces.SpatialAwarenessSystem; +using XRTK.Interfaces.SpatialAwarenessSystem.Handlers; + +namespace XRTK.Services.SpatialAwarenessSystem +{ + /// + /// Class providing the default implementation of the interface. + /// + public class MixedRealitySpatialAwarenessSystem : BaseEventSystem, IMixedRealitySpatialAwarenessSystem + { + /// + /// Constructor. + /// + /// + public MixedRealitySpatialAwarenessSystem(BaseMixedRealityProfile profile) : base(profile) + { + } + + private GameObject spatialAwarenessParent = null; + + /// + /// Parent which will encapsulate all of the spatial awareness system created scene objects. + /// + public GameObject SpatialAwarenessRootParent => spatialAwarenessParent != null ? spatialAwarenessParent : (spatialAwarenessParent = CreateSpatialAwarenessParent); + + /// + /// Creates the parent for spatial awareness objects so that the scene hierarchy does not get overly cluttered. + /// + /// + /// The to which spatial awareness created objects will be parented. + /// + private GameObject CreateSpatialAwarenessParent => new GameObject("Spatial Awareness System"); + + private GameObject meshParent = null; + + /// + public GameObject SpatialMeshesParent => meshParent != null ? meshParent : (meshParent = CreateSecondGenerationParent("Meshes")); + + private GameObject surfaceParent = null; + + /// + public GameObject SurfacesParent => surfaceParent != null ? surfaceParent : (surfaceParent = CreateSecondGenerationParent("Surfaces")); + + /// + /// Creates a parent that is a child of the Spatial Awareness System parent so that the scene hierarchy does not get overly cluttered. + /// + /// + /// The to which spatial awareness objects will be parented. + /// + private GameObject CreateSecondGenerationParent(string name) + { + var secondGeneration = new GameObject(name); + secondGeneration.transform.parent = SpatialAwarenessRootParent.transform; + return secondGeneration; + } + + #region IMixedRealitySpatialAwarenessSystem Implementation + + /// + public HashSet DetectedSpatialObservers { get; } = new HashSet(); + + /// + public bool IsObserverRunning(IMixedRealitySpatialObserverDataProvider observer) + { + foreach (var detectedObserver in DetectedSpatialObservers) + { + if (detectedObserver.SourceId == observer.SourceId) + { + return observer.IsRunning; + } + } + + return false; + } + + /// + public uint GenerateNewObserverId() + { + var newId = (uint)Random.Range(1, int.MaxValue); + + foreach (var observer in DetectedSpatialObservers) + { + if (observer.SourceId == newId) + { + return GenerateNewObserverId(); + } + } + + return newId; + } + + /// + public void StartObserver(IMixedRealitySpatialObserverDataProvider observer) + { + foreach (var spatialObserver in DetectedSpatialObservers) + { + if (spatialObserver.SourceId == observer.SourceId) + { + spatialObserver.StartObserving(); + break; + } + } + } + + /// + public void SuspendObserver(IMixedRealitySpatialObserverDataProvider observer) + { + foreach (var spatialObserver in DetectedSpatialObservers) + { + if (spatialObserver.SourceId == observer.SourceId) + { + spatialObserver.StopObserving(); + break; + } + } + } + + /// + public void RaiseSpatialAwarenessObserverDetected(IMixedRealitySpatialObserverDataProvider observer) + { + DetectedSpatialObservers.Add(observer); + } + + /// + public void RaiseSpatialAwarenessObserverLost(IMixedRealitySpatialObserverDataProvider observer) + { + DetectedSpatialObservers.Remove(observer); + } + + #endregion IMixedRealitySpatialAwarenessSystem Implementation + + #region IMixedRealityService Implementation + + private MixedRealitySpatialAwarenessEventData meshEventData = null; + private MixedRealitySpatialAwarenessEventData surfaceFindingEventData = null; + + /// + public override void Initialize() + { + base.Initialize(); + + if (Application.isPlaying) + { + meshEventData = new MixedRealitySpatialAwarenessEventData(EventSystem.current); + surfaceFindingEventData = new MixedRealitySpatialAwarenessEventData(EventSystem.current); + } + } + + /// + public override void Destroy() + { + base.Destroy(); + + // Cleanup game objects created during execution. + if (Application.isPlaying) + { + // Detach the child objects and clean up the parent. + if (spatialAwarenessParent != null) + { + + if (Application.isEditor) + { + Object.DestroyImmediate(spatialAwarenessParent); + } + else + { + spatialAwarenessParent.transform.DetachChildren(); + Object.Destroy(spatialAwarenessParent); + } + + spatialAwarenessParent = null; + } + + // Detach the mesh objects (they are to be cleaned up by the observer) and cleanup the parent + if (meshParent != null) + { + + if (Application.isEditor) + { + Object.DestroyImmediate(meshParent); + } + else + { + meshParent.transform.DetachChildren(); + Object.Destroy(meshParent); + } + + meshParent = null; + } + + // Detach the surface objects (they are to be cleaned up by the observer) and cleanup the parent + if (surfaceParent != null) + { + + if (Application.isEditor) + { + Object.DestroyImmediate(surfaceParent); + } + else + { + surfaceParent.transform.DetachChildren(); + Object.Destroy(surfaceParent); + } + + surfaceParent = null; + } + } + } + + #region Mesh Events + + /// + public void RaiseMeshAdded(IMixedRealitySpatialMeshObserver observer, SpatialMeshObject spatialMeshObject) + { + // Parent the mesh object + spatialMeshObject.GameObject.transform.parent = SpatialMeshesParent.transform; + + meshEventData.Initialize(observer, spatialMeshObject.Id, spatialMeshObject); + HandleEvent(meshEventData, OnMeshAdded); + } + + /// + /// Event sent whenever a mesh is added. + /// + private static readonly ExecuteEvents.EventFunction> OnMeshAdded = + delegate (IMixedRealitySpatialAwarenessMeshHandler handler, BaseEventData eventData) + { + var spatialEventData = ExecuteEvents.ValidateEventData>(eventData); + handler.OnMeshAdded(spatialEventData); + }; + + /// + public void RaiseMeshUpdated(IMixedRealitySpatialMeshObserver observer, SpatialMeshObject spatialMeshObject) + { + // Parent the mesh object + spatialMeshObject.GameObject.transform.parent = SpatialMeshesParent.transform; + + meshEventData.Initialize(observer, spatialMeshObject.Id, spatialMeshObject); + HandleEvent(meshEventData, OnMeshUpdated); + } + + /// + /// Event sent whenever a mesh is updated. + /// + private static readonly ExecuteEvents.EventFunction> OnMeshUpdated = + delegate (IMixedRealitySpatialAwarenessMeshHandler handler, BaseEventData eventData) + { + var spatialEventData = ExecuteEvents.ValidateEventData>(eventData); + handler.OnMeshUpdated(spatialEventData); + }; + + /// + public void RaiseMeshRemoved(IMixedRealitySpatialMeshObserver observer, SpatialMeshObject spatialMeshObject) + { + meshEventData.Initialize(observer, spatialMeshObject.Id, spatialMeshObject); + HandleEvent(meshEventData, OnMeshRemoved); + } + + /// + /// Event sent whenever a mesh is discarded. + /// + private static readonly ExecuteEvents.EventFunction> OnMeshRemoved = + delegate (IMixedRealitySpatialAwarenessMeshHandler handler, BaseEventData eventData) + { + var spatialEventData = ExecuteEvents.ValidateEventData>(eventData); + handler.OnMeshRemoved(spatialEventData); + }; + + #endregion Mesh Events + + #region Surface Finding Events + + /// + public void RaiseSurfaceAdded(IMixedRealitySurfaceObserver observer, int surfaceId, GameObject surfaceObject) + { + surfaceFindingEventData.Initialize(observer, surfaceId, surfaceObject); + HandleEvent(surfaceFindingEventData, OnSurfaceAdded); + } + + /// + /// Event sent whenever a planar surface is added. + /// + private static readonly ExecuteEvents.EventFunction> OnSurfaceAdded = + delegate (IMixedRealitySpatialAwarenessSurfaceFindingHandler handler, BaseEventData eventData) + { + var spatialEventData = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSurfaceAdded(spatialEventData); + }; + + /// + public void RaiseSurfaceUpdated(IMixedRealitySurfaceObserver observer, int surfaceId, GameObject surfaceObject) + { + surfaceFindingEventData.Initialize(observer, surfaceId, surfaceObject); + HandleEvent(surfaceFindingEventData, OnSurfaceUpdated); + } + + /// + /// Event sent whenever a planar surface is updated. + /// + private static readonly ExecuteEvents.EventFunction> OnSurfaceUpdated = + delegate (IMixedRealitySpatialAwarenessSurfaceFindingHandler handler, BaseEventData eventData) + { + var spatialEventData = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSurfaceUpdated(spatialEventData); + }; + + /// + public void RaiseSurfaceRemoved(IMixedRealitySurfaceObserver observer, int surfaceId) + { + surfaceFindingEventData.Initialize(observer, surfaceId, null); + HandleEvent(surfaceFindingEventData, OnSurfaceRemoved); + } + + /// + /// Event sent whenever a planar surface is discarded. + /// + private static readonly ExecuteEvents.EventFunction> OnSurfaceRemoved = + delegate (IMixedRealitySpatialAwarenessSurfaceFindingHandler handler, BaseEventData eventData) + { + var spatialEventData = ExecuteEvents.ValidateEventData>(eventData); + handler.OnSurfaceRemoved(spatialEventData); + }; + + #endregion Surface Finding Events + + #endregion IMixedRealityService Implementation + } +} diff --git a/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs.meta b/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs.meta new file mode 100644 index 000000000..ea2d4d14a --- /dev/null +++ b/Services/SpatialAwarenessSystem/MixedRealitySpatialAwarenessSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: 95be363c06624d7cb40cb296aa02a5b2 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/TeleportSystem.meta b/Services/TeleportSystem.meta new file mode 100644 index 000000000..6186d9df2 --- /dev/null +++ b/Services/TeleportSystem.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 11fa729770a7487196d82601770cfc2d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Services/TeleportSystem/MixedRealityTeleportSystem.cs b/Services/TeleportSystem/MixedRealityTeleportSystem.cs new file mode 100644 index 000000000..ad6fcf1e2 --- /dev/null +++ b/Services/TeleportSystem/MixedRealityTeleportSystem.cs @@ -0,0 +1,252 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +using UnityEngine; +using UnityEngine.EventSystems; +using XRTK.Definitions; +using XRTK.EventDatum.Teleport; +using XRTK.Interfaces.InputSystem; +using XRTK.Interfaces.TeleportSystem; +using XRTK.Utilities; + +namespace XRTK.Services.Teleportation +{ + /// + /// The Mixed Reality Toolkit's specific implementation of the + /// + public class MixedRealityTeleportSystem : BaseEventSystem, IMixedRealityTeleportSystem + { + /// + /// Constructor. + /// + /// + public MixedRealityTeleportSystem(BaseMixedRealityProfile profile) + : base(profile) + { + } + + private TeleportEventData teleportEventData; + + private bool isTeleporting = false; + private bool isProcessingTeleportRequest = false; + + private Vector3 targetPosition = Vector3.zero; + private Vector3 targetRotation = Vector3.zero; + + /// + /// only used to clean up event system when shutting down if this system created one. + /// + private GameObject eventSystemReference = null; + + #region IMixedRealityService Implementation + + /// + public override void Initialize() + { + base.Initialize(); + + if (!Application.isPlaying) { return; } + + teleportEventData = new TeleportEventData(EventSystem.current); + } + + /// + public override void Destroy() + { + base.Destroy(); + + if (eventSystemReference != null) + { + if (Application.isEditor) + { + Object.DestroyImmediate(eventSystemReference); + } + else + { + Object.Destroy(eventSystemReference); + } + } + } + + #endregion IMixedRealityService Implementation + + #region IEventSystemManager Implementation + + /// + public override void HandleEvent(BaseEventData eventData, ExecuteEvents.EventFunction eventHandler) + { + Debug.Assert(eventData != null); + var teleportData = ExecuteEvents.ValidateEventData(eventData); + Debug.Assert(teleportData != null); + Debug.Assert(!teleportData.used); + + // Process all the event listeners + base.HandleEvent(teleportData, eventHandler); + } + + /// + /// Unregister a from listening to Teleport events. + /// + /// + public override void Register(GameObject listener) + { + base.Register(listener); + } + + /// + /// Unregister a from listening to Teleport events. + /// + /// + public override void Unregister(GameObject listener) + { + base.Unregister(listener); + } + + #endregion IEventSystemManager Implementation + + #region IMixedRealityTeleportSystem Implementation + + private float teleportDuration = 0.25f; + + /// + public float TeleportDuration + { + get => teleportDuration; + set + { + if (isProcessingTeleportRequest) + { + Debug.LogWarning("Couldn't change teleport duration. Teleport in progress."); + return; + } + + teleportDuration = value; + } + } + + private static readonly ExecuteEvents.EventFunction OnTeleportRequestHandler = + delegate (IMixedRealityTeleportHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnTeleportRequest(casted); + }; + + /// + public void RaiseTeleportRequest(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot) + { + // initialize event + teleportEventData.Initialize(pointer, hotSpot); + + // Pass handler + HandleEvent(teleportEventData, OnTeleportRequestHandler); + } + + private static readonly ExecuteEvents.EventFunction OnTeleportStartedHandler = + delegate (IMixedRealityTeleportHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnTeleportStarted(casted); + }; + + /// + public void RaiseTeleportStarted(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot) + { + if (isTeleporting) + { + Debug.LogError("Teleportation already in progress"); + return; + } + + isTeleporting = true; + + // initialize event + teleportEventData.Initialize(pointer, hotSpot); + + // Pass handler + HandleEvent(teleportEventData, OnTeleportStartedHandler); + + ProcessTeleportationRequest(teleportEventData); + } + + private static readonly ExecuteEvents.EventFunction OnTeleportCompletedHandler = + delegate (IMixedRealityTeleportHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnTeleportCompleted(casted); + }; + + /// + /// Raise a teleportation completed event. + /// + /// The pointer that raised the event. + /// The teleport target + private void RaiseTeleportComplete(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot) + { + if (!isTeleporting) + { + Debug.LogError("No Active Teleportation in progress."); + return; + } + + // initialize event + teleportEventData.Initialize(pointer, hotSpot); + + // Pass handler + HandleEvent(teleportEventData, OnTeleportCompletedHandler); + + isTeleporting = false; + } + + private static readonly ExecuteEvents.EventFunction OnTeleportCanceledHandler = + delegate (IMixedRealityTeleportHandler handler, BaseEventData eventData) + { + var casted = ExecuteEvents.ValidateEventData(eventData); + handler.OnTeleportCanceled(casted); + }; + + /// + public void RaiseTeleportCanceled(IMixedRealityPointer pointer, IMixedRealityTeleportHotSpot hotSpot) + { + // initialize event + teleportEventData.Initialize(pointer, hotSpot); + + // Pass handler + HandleEvent(teleportEventData, OnTeleportCanceledHandler); + } + + #endregion IMixedRealityTeleportSystem Implementation + + private void ProcessTeleportationRequest(TeleportEventData eventData) + { + isProcessingTeleportRequest = true; + + var cameraParent = MixedRealityToolkit.Instance.MixedRealityPlayspace; + + targetRotation = Vector3.zero; + targetRotation.y = eventData.Pointer.PointerOrientation; + targetPosition = eventData.Pointer.Result.Details.Point; + + if (eventData.HotSpot != null) + { + targetPosition = eventData.HotSpot.Position; + + if (eventData.HotSpot.OverrideTargetOrientation) + { + targetRotation.y = eventData.HotSpot.TargetOrientation; + } + } + + float height = targetPosition.y; + targetPosition -= CameraCache.Main.transform.position - cameraParent.position; + targetPosition.y = height; + cameraParent.position = targetPosition; + + cameraParent.RotateAround(CameraCache.Main.transform.position, Vector3.up, targetRotation.y - CameraCache.Main.transform.eulerAngles.y); + + isProcessingTeleportRequest = false; + + // Raise complete event using the pointer and hot spot provided. + RaiseTeleportComplete(eventData.Pointer, eventData.HotSpot); + } + } +} diff --git a/Services/TeleportSystem/MixedRealityTeleportSystem.cs.meta b/Services/TeleportSystem/MixedRealityTeleportSystem.cs.meta new file mode 100644 index 000000000..5b3a41c4b --- /dev/null +++ b/Services/TeleportSystem/MixedRealityTeleportSystem.cs.meta @@ -0,0 +1,11 @@ +fileFormatVersion: 2 +guid: d74911f5b1714ad6b5af640c9883af40 +MonoImporter: + externalObjects: {} + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {fileID: 2800000, guid: 5e1c8765530949369db753b5770399e9, type: 3} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets.meta b/StandardAssets.meta new file mode 100644 index 000000000..b0376a206 --- /dev/null +++ b/StandardAssets.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 08445f9412164ffbb1141de07a8fc4c0 +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Fonts.meta b/StandardAssets/Fonts.meta new file mode 100644 index 000000000..3e15c79f3 --- /dev/null +++ b/StandardAssets/Fonts.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: fbf4d278053f4b5ba11799116429379d +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Fonts/LICENSE.txt b/StandardAssets/Fonts/LICENSE.txt new file mode 100644 index 000000000..ac8fdb956 --- /dev/null +++ b/StandardAssets/Fonts/LICENSE.txt @@ -0,0 +1,91 @@ +Copyright 2015, Microsoft Corporation (www.microsoft.com), with Reserved Font Name Selawik. All Rights Reserved. Selawik is a trademark of Microsoft Corporation in the United States and/or other countries. + +This Font Software is licensed under the SIL Open Font License, Version 1.1. +This license is copied below, and is also available with a FAQ at: +http://scripts.sil.org/OFL + +----------------------------------------------------------- +SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007 +----------------------------------------------------------- +PREAMBLE +The goals of the Open Font License (OFL) are to stimulate worldwide +development of collaborative font projects, to support the font creation +efforts of academic and linguistic communities, and to provide a free and +open framework in which fonts may be shared and improved in partnership +with others. + +The OFL allows the licensed fonts to be used, studied, modified and +redistributed freely as long as they are not sold by themselves. The +fonts, including any derivative works, can be bundled, embedded, +redistributed and/or sold with any software provided that any reserved +names are not used by derivative works. The fonts and derivatives, +however, cannot be released under any other type of license. The +requirement for fonts to remain under this license does not apply +to any document created using the fonts or their derivatives. + +DEFINITIONS +"Font Software" refers to the set of files released by the Copyright +Holder(s) under this license and clearly marked as such. This may +include source files, build scripts and documentation. + +"Reserved Font Name" refers to any names specified as such after the +copyright statement(s). + +"Original Version" refers to the collection of Font Software components as +distributed by the Copyright Holder(s). + +"Modified Version" refers to any derivative made by adding to, deleting, +or substituting -- in part or in whole -- any of the components of the +Original Version, by changing formats or by porting the Font Software to a +new environment. + +"Author" refers to any designer, engineer, programmer, technical +writer or other person who contributed to the Font Software. + +PERMISSION & CONDITIONS +Permission is hereby granted, free of charge, to any person obtaining +a copy of the Font Software, to use, study, copy, merge, embed, modify, +redistribute, and sell modified and unmodified copies of the Font +Software, subject to the following conditions: + +1) Neither the Font Software nor any of its individual components, +in Original or Modified Versions, may be sold by itself. + +2) Original or Modified Versions of the Font Software may be bundled, +redistributed and/or sold with any software, provided that each copy +contains the above copyright notice and this license. These can be +included either as stand-alone text files, human-readable headers or +in the appropriate machine-readable metadata fields within text or +binary files as long as those fields can be easily viewed by the user. + +3) No Modified Version of the Font Software may use the Reserved Font +Name(s) unless explicit written permission is granted by the corresponding +Copyright Holder. This restriction only applies to the primary font name as +presented to the users. + +4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font +Software shall not be used to promote, endorse or advertise any +Modified Version, except to acknowledge the contribution(s) of the +Copyright Holder(s) and the Author(s) or with their explicit written +permission. + +5) The Font Software, modified or unmodified, in part or in whole, +must be distributed entirely under this license, and must not be +distributed under any other license. The requirement for fonts to +remain under this license does not apply to any document created +using the Font Software. + +TERMINATION +This license becomes null and void if any of the above conditions are +not met. + +DISCLAIMER +THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT +OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE +COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, +INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL +DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING +FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM +OTHER DEALINGS IN THE FONT SOFTWARE. diff --git a/StandardAssets/Fonts/LICENSE.txt.meta b/StandardAssets/Fonts/LICENSE.txt.meta new file mode 100644 index 000000000..6fd65dec4 --- /dev/null +++ b/StandardAssets/Fonts/LICENSE.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: b7b981c8f52e416a86ce31cd69f2bd43 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Fonts/selawk.ttf b/StandardAssets/Fonts/selawk.ttf new file mode 100644 index 0000000000000000000000000000000000000000..736bac3c210abb56f305c0c2307da8e002cd6c91 GIT binary patch literal 44224 zcmd44dt6mT_dh)SmC_^T!XJnZ0MvthHv%S~F|b z%-)AkLP#@GN<>naIG|^b-!kHY2w8KJ5U+1~Bqk+GL_A5z>=`K4t4CVD0m~=!If(oB z32{p8F<@Xqamk9$2zkzt5b1Ki0pU?8ecrAlgtGEkVR*Mib9vKc1;swBKhx>r>lS^jI z|0riN?ynM}Da|VwlfAR(IV(c!vj`DRPtKlENDB$*qrgY>`Pq}lF7GgCA|WMbfqzk9 zL2*gl5fTObpo!=~3yKP>#qVZL7}c!ve+UIA{C$>qd;m|=znD{d!?e+QwC)J*bwpsf z_(MJ2FLHlEtoPO4sL8h;%^@kzlmb~Shh~u+)apYd^%29z{zN>Lq<*xVXwVL$bRKz| zlvFrRqJ$JHjbN)0B>WRZJkzmC=D$7z^m@{b*!%fwK9~Dbd#fFSpeJMa^1{hoMA8_03#Pcq`spxHu>A&fAmk{!xDBZ#-jam`#Zs!`a7ynVz+ z@I(DtavbR~!LRNt!c|;vLi!oP6Si5J_4|j|9zpvin&Y;(qS@2nn|)WW0A7!aFX?`AS@v5cv)879F~$-q@~1{ z{zg_J>_m8;{#JJ#;Uun0k)9U+V$bRp;JzEu92UeHvXce1PPypBuiFWW$xg_syY?oB z%V0kq4v8lQt}fi2Cblu1d z-8S-^@F|%f+$W2QQ#&9`K^kWAh{I4B(@p8WX+GDqA% zri%vhGW`+(W8@XoU3$>1;G)LzieIPm(#R31h~yw;Ar~P7Aq^o(Gn0IVa9at~Q8SYTa$DL)s&H+m zT}9HY_mMPn8G488WkFX(_G-tW4SPt2t|i&Q0@^f48%|O|LmtZC!f+YE0wHooLQHQV zC(>gG@wl$WbaMmOpCGuRxjqOZkUxcxI!7Ua6btzzPsE#(Hj^u9|No49mMQTlcCU?j$>{s`edG{1K~9l($p_?Pa*=#Ru91I{ z8{|i7OO4cy2BUFWVndvWC+SMMlaXX9nMtOT8DuV*Ll%-1WHnhuo+B@km&g{fmApaT zBuB_$@)kKxJ|maOCGt6qqn)Xq2GWkCmd28gXb0M!cB1KYFkst}9$+KpcEmxnElV5y z%_GOChEf`e=K<^qb))X24i`FNOHxQr@(y*TPSlHfQydwP@JqQBAK1xLYM z2o>UlZm?xWB8(PtgnVI|Fbmgngi@hQSS37<>*obvwfK9Mp8WqtCm@eZp8e22?Py0j z81n2!L#ZqJX*gs(3M0e=$ah;v`$IaA`~`{qll(#cLp6|E5mIE!b;=G})dG6u1&M5{ zN~9~aERjoP3h7S6pdF*QY>p&(q&N8px;GWtHy8Rh2Qs)2+P8x1-%HRyrhiMIfk&W& zhoOIOK^u-i2R~z4NWLQ{p&3?W7AA*j7{z8|{jh*IlSRallo2yvrq|cL< zWDRLfRuX@*o&=B$#6VskL8O9&K|aID4iZW>lMqq~t9&PEN2*B-*+ZhC6S0uq_GB;V zMD~*|y{cntVydk#ERk@;x+r3b{p!$!$_Zej)?OIWmlV3a!mhbv6@PGK}`5 z-Dn~-rZ)wDCXnkSmwZjelW$1@xmiDgG{;!gm9JtHu?&IM zuO(-wBl7cTHT?@xog-`!E<&GE#R~Ddq?MedWGP*mD6Nq8NtZMZn)aF@ni-mE%?Zt4 z+C=R#?IrCUovY4Y7p6-E;>Z3LUXHp^_z+S=KUx2?AQ%`U>O)b5(Sk9~suMEiaA*Bl%iQXJ+voM@(Pmfozo z*`JP9jscDdjuRbMI95AeaD3p@(J9MmmD53|Th5`*Db8ii@4MKz>E7NPd zSBY1tSGm^_uM1xHy=uIzyj{KZ-l5*@z05PO6@EMX_W2$4JL4z&JNqa5 zm-$!vUoyBGS{s%a-VbmH=oYXo;9$V*z@Wfhfx`j|1D_8(6nG}^O5mS?a!|*hw4m~! z%|ZKujtAWcx*POYus%36I4-zX@c7`8;IiQI;BCP>gUX`wlxciQ%C zo8R_)SV-8~u;XF(!=-S2cxw2t@M+=8!mGoNhF=K35n&VI9}y9e9FY-G7_lW{PsEXk z8xi*-Y9l=(TSulu4vSnAxg~N>r8 zh%_iD*r3(wMDdns zTCL%6+6B7`ZKWouWBU}{4%@8@>7b?&wksIhDzt6L*n)@BQ}G62M0Q~9qlQ4E#t_^D zLh&u?vY5J_+DucL#?|@GotZTYn?!>#m-mIv6YXmb8?Fs&VNi6t7-N*Xn=4wVZ@4kI zJjPS{W_!P+sHhab7(MNmoERC^BhgsiG!?D_h`Dsq&CzAV#ZH3)OX?A&Oo$zQqe0~5UvyLL zD*mUYHo9FT> z?ICA+*tUeY8MttHFeQpMG7<9+3Jz+DEPAFWdtgB4(2({mdrb>XiwQ_Hw(j6fziE;# z?d}nIrCwgmJ+qSYI(vJ2c+{+JiXcArXcuDaX$BjE1iJY-F`@QjDT3%kwF^yFrho4~ zCbkg6Oc&|zvO~3;SW%(yzd|-_lx=9N7*%@#Z99&YX}IP^Kw^9+u}*#p!*y=H=xQ`g zR9J3sa$y&K2B+h+qF~>c8F{12`^>t$u+RJ#7SBHQWBD%ml~Yu+x$pYi*>40%wj(xX z%{ew!Y*#j?V6+@*8oQ)aHq~MXAS3GTN?SCCU=0x|K!|SV9AJ#{&|%mNGWctO(V6uz z#7=7v9Ods{*h_oCE5zo{F{}uMNh$K!(>N z_SvZE)csXeZ^-u-&3r0$n!pwNi%9B@G5POHPi2xoj@8MUE}9Bh>d+q-KRt1B z6(oZuFe<<~+R;zvbd0W|Gw8f`<(Gew7t;C1sog5moBz^O$h+mOH{?SHg$>K7bVLXd z9&Ug~qz2cwzGAamZCM(TmWk9Ha?DFzlXPPNGqp_$Zyv7tnzHeC>8c}7g zUSFTJm+@7ReM=CZnp^o*BOt7Ci|fJE!?9A}Fx?H-8FUt;(EHq2c=4^4jo?__nK^S& z0~|iKiHEc`+%AANKG`a;B$6gRZV#Bgv_zz}ecTS1(ty{@M<(mcOJZS*7%UM9l3B3j zibmiYB)QZK)eKXBRH1Lc+eV;no;kNwzGVqSC)~7Pg_)NsvRE#_rM)!mWqY2IKKO8p$-&L$DdDa46cMQj>r zC!gQGpZ57B^WwlVrm~LRz&nmldk1n94*ZR*=lWUY$@rHvvZk**gBq>7*{uHi@-qknEuc*{ zsJv+PPq-n*#4w9R_e`$b2==M$9Q6#|$nyu5^dItW4>ON+Oy?N2Y&c#m+^ViNc|oX5(}m?Vxxy^d62?m(tm)RG zJo5$i|DHYHB3G)SuBm(< zK0XY}cdDzK9Q-(Z0lsfSmvI@u?zbg$gAM@yZSLfOfYQ*9rAk{qL){!58{g1o5#t-H z5{_|Ahelv9<0#PPD`-P1AIDfZ^apEjYc_tNPuZx&3sRCV7t(#;En7>Q$14NtLv@^@ z`;>8Ne0AqXN2i+H`hkg(B-vMJ12~MsaY8g8Kzow%m-Mar`>K4%K61`f&096;_rI`J z`dWHXa~|Uap(3Qm=oAwRS2;BZeSWU4PBaMiZ_DlJrE|hP`KBBW>5I*1EzE6h`n(qY zTlD*J=(18DRQnk$VF-%a21_rVlV>*o`<^N3)W_gGY|qs)SshoaK);5|ANU37?`HCZ z5Xuz{=TUI63Nj(Gkyn*9l%kuMv*amK^-=j4lw+nPlX4s?(guuQZ}~pd_ZF>99?uQ*cs@iaT2Rc zo-e*wO;h9}6%~SiRz;R@!?f)D=8t7&v@m$uBEZA?!o^74-93!4=mf}!Q@dE^nZcF< zTr}=(P{r%?h+}Ijtz&=_efLt8tz_-uD7&Z29^TC)%}biiwJn2+eA|o*68}|`E57(% zaX?J)!vj)EbbQypd4F+Sns}_8Fj}a%pixdn7ocD`IFf6^1-oDyNu%9KFPQx7d~LLn zv{Uoq!xvq9y9F-kB>rBLE6sFH@N!!k_wWzKM~p%7T=%_|{?I6`cnq?*l-pyjO(MV; z@$wT;)Z<`w8n~pcQJ#c`?pBR9Q(e=TnDw^kDY#^V$|HE5p2Q_;mXsz@&;yF-Jb`KT z(gb-#pUA!(AFu^t{i+L&6JmLfv)*vBAykkVC@{{EwF zrDN}f6QyFmKD=+xXJ5Lc@;*CUgORkJk6y6yu)7MofEgf<`v#uGS#dmf1|&B25SSvG zr9C`4JkexSxPoe2z)*tf!)9Ywq38Cc%uK&4upRP2u>lYH&6$`kz38 za6z3aXFi<@HjDm!?%8xm3Lh|@GGAmX>}EEyg&NPYNjG z8*hELPX5nRY0>_6@#4k5KYTVb8swSV845ozpFK;M=s9MFOnN#IudVv~%(F>g{qYHQ zx;}>#`C~^A<`h?6_!)Jg)_5`LbZhz-%jb!-V|MWNh*_newk@@dg_t*ceAOmfvI~^e0A4- zCb~u(Fpep@>Ev@%+&BNz)Y_f%8u+7QV_yh%C7(R{J*)e~{H8`hdB@Ya_~>Z(_o-*| zl#h!#XN-&9pqW_}{yJEOW+im@a5tipxet{vFJ!Ef!dIQMDL*=Y?TB;om6u+py}k_} z7nTzs6e%v0+Vsg+HoiW4)Y8}fGq0k;*5M@WdzrD%N@JrepXmY&kv`G@FUCcT%_lG- zw}yRU$1GD9)!C{wV6j0JN2|{11YPmMS0#(@Z9G;@2UnliTXjaWdGx6j&s~~g`d)Z* z^Tu_{sp$}#f6TBPm<2*qKRH{r7~PD{+)=J`G78_Suy*}0mBBh7RVu*bZ(xj>ye;5m z${RKJz#p!E5?|2SUj13YTR{3m{tF{j=wO^LZ-;zx3UCs?#% z?d77ER?@w)``f!-I&(nCF>TRo9=dPtx{KkaIl{x0%jQj^rW!U!F@Ej9*v!T_to7I) zo6D1+3l-RE3vCjEw%wV(wNFH2#)IVvn~N|5(?ISD!#bephR|C1u3}`-UQHu(`-S;_ ze|aiStR2ie)AQ9sBWyutuGKFjc3ic@6~}q!tt=-jI5=Hp-^2IR6$P3@((3*rUe@el zdm&O#a4g?T#LyEI90vb#4D;u6Q;2QYxO=GE2z2R*nekIzPTRV=-_+b0YjSHpf3-Tk zd0bxVf?YlHvgd6pEV{PI*4Xidj%^oD?l+-ZtH_LsX-D7czSY{(YsA>D!@9JI&8nU^ z>y0cX_Z&aBHQ;ODmc~D&LfFkrj_%JUh1nf%{UdVf>0$OXwjNZ!r|?fn`dGEEhx`Mg z_!hvGe?}JTCpnGxQ)fOps6C-`W80#Q_64+0rIki09W?yFoQZsQAk>TP4oo^Z`w9Ii zQMJ1!?;2;{v3{Fi7d3Wjx_fz_$_7=Y*v`dM39^tXvpegbNLMyrMf?*PlS|a~DR{`d zYIYclpw1K?MNAL|dPW{2{veO8)(909H8PlMQI0J_G5#`5XO1IQMaVyYzWV#`StX4i zi)&1)gpxJXRKeHZ96sM8aHy9ZQAPB=DjLozKE4eg|DYlTZP@E!w0S|_AMaI+nVeoB z*|OV06j%+rHwVqF5CG4hww1L)C8D0i=2mxAR%5*Fjn`hg>uyV5fF86&B2HMZJNoIB zgzl~*)wG0;uQvV56DRMy#mTkXvEmO-T~L?#t_7wOmp9D0K+tN zPZOZ(VX?IU^ZqD)G3UnMgcYjcA7ufNTlpU~1yfY$!`#8_dRPyZ9?nOs`o@UpjV6rv zkOrhpTI}C8MT40~%tq%tf`$GFu2LA}=Ne!$>$}P300QT?YHzzUE~(abV~E1qdgFRu z16;+DKHCJ5DvjK3W;8OZxiLh#m>J0d7QkQ;f7k>l=+thxkjs-VAUQc|RL`AyBmq`% zy@*L)$en}Qx4<3)JB^SLQ~L)OHu!M%n65>-#V5FDutNx)W&~ORlS_l}G2K;pp-YFo z;m!B=xnC6Xm}*hMIe{|={`~v_-tw`OYhj_qv4gfaa==a!$UirE7F#O%GSZro^O5B~RBYz)4+6{@3(Uw_%p~5*QmO0dhwr8!hPt^q(xNtp^g!J zP1LXp(s+z`27$s)kB=D-*Zd<|n;K50Je_oNKeBO!_apWe6+hXN`cYVlai+HN9}&cS z_fN-9p>;&sig&5lIK)KOEVHW6GN0{3Ir%&dw(+%*T02nVNx2I>|FL|?%0(v`L)WOtN2yqB;?qT|p={JS7Po!+<2Ii$k@G+I&kd4P_qSn<~wDzF` z4#>gPf`hoqRBUhb^otdqtDRxG&tM1&49oe+$&ykhgK(0`_G8c>#Sbq&4$us*@f_vy z2uPyJ=^u}SWg_|Tx5ogpl?~de%HUJysYf|6=y92oe|`*cQ}R_SK1PSRed=7r_N&Fl zjr$8CWc3($NJ|r~Vtp8mcBP>Yu}cxlO%pb^L<*F+fS@M{z!$-bWykc%)e(SA?KC@PaA3ly3X$HxC zr^QFjN|;m{oz*osD>o`5BCafZa%be*+g3T)ojM`kSodOXOisMDPs`p3Z4xl< zVjqXoq_x2aQi67hw3|4#AzyQ%K0jXU+K{hxsLxLnS2pBp=GEu-5RWwEYe{{6Pxgj` z8LuX?KEJnkkoW&^oL68xYKwF7_2(F4pT#T8@ka6pzjiloW{5lUe5l(~xVC$U{89to z|2^TjIL|M!iKiU^=;`R!Vg;C#%=ZaY2skUWAOZEZKik^J8@m` zo)QUA&dtF`*hnDS#afDl2bT-10CgIy+XbyIkXbiD1`-42G)Rdic0+Gtk84A>T<<7M zcxA96EX(K9dTF^iH15>wrH6;On^N2lZTYO+Mra{K6$~f2(K zZ%DzE&f~hMQsi!%q{`6?z5C8RSKP0kX6bU_)2fvkPrJnFy-mj9eSfnzW{NbK0wAqt*>*)#-Ry{(?x1F{A2!#+wH} zvGtUs=#xhb^Ma|ipL#BlzIv^w!MVxOL0zd6c&F z+8O)mo`d_m^%eR6)_)u>*NsxvZ_o{lPWAbA=vO5_K}^SU(1CS3qXQ@99y`OwT`Vz= z)1`A0&P|fX2-%OW=y`iGe zl_Kl}T>=?X_mwnGbC0;P9UhE3I9<~)?!YW&V@s4 z#wAr4Uh+1@l_!i{pVnKrS+TKbqw{3l^@U^Q?ISbUDiv!GJ18N-p`G8pZCl5?GKjs6<;2=ar8p3 zSjlr>+l=y&*xiuBDj%#`Hu{a}w0!j8IWt}#1+u^+@IvDPUijnPKh~%HHF2C?#-k0$ z_hG$9!4lo0e8Rdq8V*`FI5I7HB{|YTYZ|djzDz@_mdITiI3`ur?pgO@cMHBz{hH&) z*F3!S2;&&ve#ZEB7rtERjd^4UaN=_W)1pVzUpTDj`(3%V_}Zq&^;*$n6V+AyIPGz@ z1wS}GF5}BNKe~yS2kP^gj4SyG;u?#5HvTL5iQ?vld_Mjw`8~uBE%KR6D)}kGj}7^J zUQqIT3fmj<`MjXy_ZHvf{gcJ#g}YcSu(Mq1`Sw@{@}sF71H_Rs>3cgO2zxa$TR-5V z5N>Xg(D~;)U9%zwQW|tp{(Pm$+6@-5DcIe?e*6DoVSng6Rgs&FB1ephcwdYM=9b z?L_pUlAkQXeyK0d`c}zL5t-#m@g6M^A3&F2)3T8tE;YUm*RdTA4F19&`vzA{oH3}P zQ&m;*TjK4U14X87Lc7^py2O}5H1|v^rT_-k!yE?I7>~k$e-4VsTzZXQEnQkg+sI!$ z22t9#X5YRw^0_I1B;fr$LMLjjW1S9PnRCNJkIhSlkGpk?2=CS{d|*|TRHs}gwd4t64~i{Se8zPomEwgv3LYtJP+WJT#uj+Y_1USK4@KC-F4(Ub9+h2PZVbH z{FBI!;QFHE_Yih*IHkZ*z{hYUKZSn4%b!Mmf37b|eowl9mtQISiZjq2e|Cxsl)Wrq zwFJC)Dim-%Qp)#M^{X4sSC!VoH{e}Bzz4mlv>2&Smm~YC{DIwT$sbyOit3Yugs`yq z_%L}w>5BGM53fjd%6(YE-zS|0ZJZ~ruT3`HvjaFnIXuQQoWm09A#719$|o#~gTHmM zcmp;Av;0+IQO{usN2;nqd}-+`@=-eFFunh={H^A0t#w>Wy1`4XFtN1*`e3JNBd_nz zBoJ*%5-uR7Z5S)>3tF}ow5EUyp@2T3iuWFCjW}2zDkT`SeOwrbq zI}IeD4ye}-z!-qp8nW*Jwc&HKj;oS#DH^ag<12+2qb7TM8m$s?iu$jPc3^4hvS^`7 znAvj5+qo}CMX(1$s=UZhgaN6SGI40xIb>%Rx$~rHI_sIyqQi7v&|KH(nQ7w zc4qh|sjqlTJ%eLjow>W~6gwq03~M&Cq4L2`^XLCm@xu4B==4=`; zpki$Ec|UF3bf>iR=gk$j=4~7N()fuxh7Q{?Y5cZ9z|C=R9vuQs#v`Ql`D|`g@)N~t z4f%YmQ1W|7m@Debv$d6y-&6Rm$^2gUR!Mz%J|-yTdrOqz2R+xMO!2>%$NahVqqbH( zw4g3f-En9^J+q*73t-0;qTpu|Z%4J`t>4~lT;FlA9l?)L+q+KbSNnP=`t5+JITabg z>PR^xV;W@d7VU2h>ZHrCvqyjqH}>_N>##d<2g92b9aQ3dbLg%{&HUwrOy zOUl%vQ3orA)u`+dW0juH$;=-6xPfJgvFv&#U%TYi(m=?y6VanR_3I)wH8P@=g%Lzd z=fsyqtv(osWzoHaS7rrwe|-#=MeCOKd8N`6yZcJcxcCSzHW5DsoA7eNf$S$?qvuWUB&9xvkl8LF+;(x|yXR<Q7iJ#oun}vo*>6-A%Ep`fS~c<%M{mW|&a)I;@mk_vXZP7*TtK z8OhqLI`y`URsfKPalDn{Su72$vW-t^fZ*1@ep&jqb@!*Wh0%*~p3!Bd zH;LInpm!(6TUUJdstfKg*YQ&a2CNTpI>93*xc+cLOe~BCZbfRjJ!$raV1~l>l2F{X zd#65Ql3!Xgc>PG9(MuCo(D3BWeMWYVNNOL|DP-(`{46-i+bz#wf3jtwsr}DZay(nMkbGl(YI*Zqg}sINpsU59+HO5d1qYT=SSww zi}Q795vm8xZR&0d3p8zDqhqDWWH~C$GW0(}gx`=tz0T8VgwLya}^uxo$Lq7p=a?0GQNH{?ih!3VF?%yY--{^_n#* za4sjHRg8v@-XGtxVRGMJ%&I%U@XBet4LA#8*@oc9L|g#9mPncyg$qx6=HQq&t?Oc4tj21 zud2xvQ`W;Z5j;M#ReJmU{S$-{rYj4#O`412Hgnd!2$|#Xxb9r!Z8zH@NV5Bs95eQcG)SFmhq zZSZY2ZYei1jFRB)Yv?m@TtZ4Kw@2DNq+ehw?y*cy>^40inh42(_E~UKiP9xYmYBF zHPha}YRZ)2*xA9Zhn;Z9lwzIaVAI7#c)PZ(u-2`swRKll(`1kg{&Kv$Utu4yv0UnA zk7$xoDW8}fO-D)~L6bq)EvUzPlxB16FUwZ!!bPq5npwis~+OvFE$FCRbt8?2_I z@v`Yv5@EU^1QuD`5yRITLT;>$4Y)rVFuvwJsNQ$+H2i-k0#7? zPjok(6*|{`Y!t25h1dQGwlO&Hf{GJ4JwGCY*{_O>Dfw(pQt}hTl!o$r&8g(42wPB3 zAOq`u6iu3gijP?0r(^Tz(FC zyE?qs=efgjcP%a7GQ0i6WNT-yq#21v{`13-xn1S2u4L|M^_G)&(Q?{+CAC^Kv6+Lg zL9%t&cv`-hCfSZzpKzUbm@3;GJ`Zi%vH zKm7Taoy<0}UT|`B27GSrp#!-2%C|uHCW5bE6n=hZ$jndX%72}nBcI8g@0&Gf>l;0# zR+~$v&22w-^yC%ZRMgLzFD{z@anYu01#|(vI_FO(?e(Z~n)^*vyA+eSt1RRBp-FA+ zT9v-JjI|Xbr1&S=%H##!Uk?ld!KO}Pxgfh8m1?(*sCf_MVNH?=pDmN)7Vve$j#2j@ zVjC8Z?1dKfJY~bqhvMyi^qy8+n%HM%;>gJ(56>O__Ke9Ry3gn{`SZ1%a}$g?NlBAB z#Z2ruqO{9^vK}K!yY?;X<1zK!DVdwcdquxII&1g1{yS%m-Vx(9antak)5YT0*hxJ* zPwE~wDZWEqvMD@cVb9F6gp5T!vdge=V){1-bpN1v1M_VV?wy?+1spGoWr7&PJgX}G z&au&a(aS9p(dm*bpBa|xIy!A}Wvb1#lw^hdXeY3;+hrna8pU@N^qwRX*l%X`kuhz&J*ZpG2J z8K7yGN|T#%hPi<%vzoxi>m<^-oP_685+tKsLMQGUKYrEkmiXk{3c-PzzAbwlGeD}0 zg{(xL1CAd!jx!GF#X3?STyKhd7YZc+r zY?+g5)bP%!vpgmD8U0f7yU24MrJa%qVzD4mfAzGx0l@WiH<({%O9DVx~{qB>zU6RZN>ceOd)=CjYx)8hoU;>KsKY zyniY}F=DCCYq79(fo5~m-_umTa{>L6rU_p#AEKp4c5jz1Mq^x@k^ZTq#x9_#irNWV z@C{L{64{10+aj*_SKTV^-n}?6acWXhNfNcgCDP=n-4lzuqcFyU;dOUtj(8Jzu(Gkl zBv|;#ccrGb?~t0>p}m?4KlY4??b$Onrl(0`z5*S=*sDt;H`)1H_%-nEx}Xd09(8DN z&(m`c%$y_tF$Q+Ta^RbYbqQ8qUIbqo6$Nk-_Jk;*rJ&~xJZIk)P`{lZ8Z2r0c(2P+ z7nK7z^mamCTh9e%qa4H+rPskyv!z5x7JoU#;CYhi(pvcZyt#iu#HSSC-Go`^;unh# zF(DX5SbHoVy8+^qZq&Pl{7c6CjE5OB2FU+zL9M&W-?gBg8M6o04xT@l+O&}8)^>d; zZj~=jlBeQRHdE;8Ni=j4T`T9)4f4cE@?|swyeL3B($G${%H4vK=KgbUAY34G>h6dw zF_-wVxvzdG3<~yFPllL{54T3lph@j|b!ywre^%j$O@WCo_I&e9WKxIl*nsW9Du)D{ zyjA@|{i9N2GRILvg|qAa%CU=khX%AC+_hRRGZO&5O_xJNFY!0#0a<#;KSU{4tj1TGJmk~??+tJtz1 zm2=91ZhuOO(b%Jh@fep9F`$Rhn1ru&^{Dky1qNV1ABCtD-a}gp^MF4AFr6Ti-KnjB)q;W_xXvQK zJ@Ofc{4h9UgX%0TynbCS*KD3%<1n4u&Dgzoh1a!jRCm36K?u~$Vb++$tQ@Qj*%y^O zaDZ<0%FS7`3Q87?UPxcSmsM@)3vZ?Em)HFKgS_U=GzK$WzCeFK-R`uRFx`S4LeJ`M z3q9GG!fY4a?FXK^+w|-L#uq%3@I?XhGYOw}l#s`tmD97rLFE}U>B2bckFnAE0SU%Il|~{%7X; zvFu=*`o9+qmp{G6cJubuUu`s3HKzc<`j~7KvN;Tuf_mI$lqd$;Tccb!%5|q6!b&rr z>gwot`GK$oIEH489ow@;Pt9`EZM5^&1+*|1bVa!_~|^3zaG1awH_UB z*HG~TS_V8Kkx7*F3C}Z+y#n$WEl29Y#eYlhz@GMlgz4N2FzDE+vsi4SLIto*4QDXC z``Bti1I6LXix;2B8FOMuamv#0kes4US^bTsIkTtFE3vgX{*GPg*K1dQy~N?#m!hx7 z&M+%es_5lgL4#g(7pk3izrgV2klB)hWWYEJ<&TZUkjG|4X1n9PM|Oq*lO^oSU>!T+ zW;sLUtVm5=k+~wjtaS3q%;kOiF3(&(e(CaYE9l8-Nj;`@?=iJ|($u7{mlVz|o3t!z zd7nPZvzASnGqYq#7OQs!&l0C4A;y2STO>JX_ib$k&J2X|uO4t4iZ$P$RSYhp6K4eH z1AqA`*eO6^0)JaA*h%=gV%(|MCrau|Gt$hpxo2LTxN|$+fEt$~f0~;;Jddu+9Gxi& zW2$CWo^O8PjPkOK;1W5YVtUn^E(c!|yKS}h@S<|msWD-+qS^5NwS}_>56usinaxc} zF21W4fHfd&;6N>yLW1G$V;n;gqjp#g9U>J624N5l>(9urC*RAwwgXp5Xa99 zr7iw7V@ag%s=)G-f%I3CEQ*34I|UqC+IepG_<%^N`Eyl!ePr8J|D`se8|*#a+PkWC zXk_@RJ#V#UdjphY$alme7@JyPtmJC|7Z*@~rLWn+uEWbQqTsi#Yk;@khLGXo=J?nS zUNt1%=&KJ~>)CSWv0)wM>+&7PGJO76n6u*R!3%r1EOn^7xWY6;9trqq=#Uwjeeeyi zH#jj8!>y^DlW=DTCD=&`W~aE}p_^7G&Zxaw`_)(buY0x&HaIr(w2o*#uCNugmjCN; zZrQSBYme=nP49mGyS24$uBZ|0l9v?xMd$844aH_{LGMd!j7D47X;c2sfYUqtABGs! zQ$>x!Vd^FyVV|VfCU2oR2yNw!2dNJ`SFG`osQpgi=&H9@{roc`e68XYoGx~XvlfN} z$7ghjv`0A3&VFDC$Bt|&{lY%YiG?~dyL5)j$#XJd^ZKOp5ANJsSgKn$FRrj}=hT2z z+NJczRlOr4+5~0yU%$f`85DGY$?I)WD6N+|VnyV@;1b1Fz>Lp78f9@SRCMmtc3kH+ za)7wEHiPbs>(X{?$2MY4m(Z}Tlft^3Um}m}+$Jo3a$9zWQXsc!oU~rd0|sSw;xEhI zW>tB}TO?m&ekru;cX%VUnJ%Q@IM-FUP+F%SH-=HguRPRpMZB&a*5Oj{wD10s;6Ls*&a9lNDEti zvI}<)@wnpZT{?URZS3ofku!v^>^vI#dqJ`tsgm*~Et`$3@%0Gy2^SqjHqDUtj>Ole zGe*jLc_i<{k=aJ~BUu@cgLf3)*T!p3fmiJPaU<*uzBUyaE#~=&HOqlZIUvl$fUVXZ zdkn8TTd`KJA2@7l_V9HX!?t8~>>Ju9H9RsctZm;2;rAyz;EPEyeCXy;V|HW?t{5@4 zYUFe6M|Z~8FQZ3x=r}T_cG?pkv9H0SE!LwOwPgUo^upHK|6_Ypmqva29v!%)M+Wl$ zrNP1(i`JW(Tku8fZ*lX#@j|d<%xX)X36?jIW60xe$o+b$4U-!#uly@Gcr{?QJejUr zOxMeKiv{N;be%kT3BCvqeZu&%UaCfUW*aaGS8K5EOj*{FCo=^TR-5ZiU(E6C#TlD! zT3^T*x0Cm-U$6Cjz(@h?hG(j+4cG>hU}b7wlXulZN|ka;w6&Uc_})J|Qw))d#x&mO z{BR>D0y|L7`bY>c_)E;Vl%Qv@GbMvQfSH^DetOB->5(JU+S)OnRSQo$b{;)-;v)Iy z8~>I+U%i$Z|GUvt8Z}M6cTBz{FF&}C7SLeWtb=!$Xu}z6+P`ilrB6DbK6Qrs=bzl6 zh7~W!AJoe72QPF^nAtn=4LS?I6A?J=9t$e z<-9y1_od=xm(y29O$}c@@YBB@zB)R0(SVqd9XpMR-TB&}A1W3sO|^uCj=Fzo=W32YDqE6{kWup|68HxI@C6xsCeu;?o^&J`-`;y)-gWLA9eVy_I^?5| zw$$oIBwqb|G0zcXg+>1D~wBm5^9tSNipxlWlqLwjyY_G5L<)1l{3 z=lprO`lFSV)MM{n>RDMS-`=}d{<(7Z#52p5o|{ammq&TT3+py-@bFpW(-O-MOWNDA z9R{LOZT`@M^CQ#~_?)qJXZ!wmFjdli|G+d?lyxIbV@_V~?tCUlR0llv8KOeRH zX6YJveV5chFZ9wJGm~p3zh?iVbPH!^`pTzhkbF&apEYH1Y|KK+c+PyNCq;_$cQI_H zfCY`o8paH~d5|vi(Ex}X@)RoprViT=Qx6HivloD(N&#dG?{=kc@9zCt|Cm1IFkVH|W?@)=pT0C_5 zMj8^h+z>=*>+XROU4y;!U5bVeU0`T6fBcfQKFwEpdect*j0r)We%;FQGUgbLbuxH( z4(Zahr>|9JAKoVX292f!a)@t~KoVg&F&ShVVQlU11g0~#Q|(c~;hl}Ndh2`AnJp`% zcRC%B7HPEW*PCQvgPckanI_T-c{~e@PkG`3VS{E5mrYnUjkJ=T|F)b>sd0Wv%Dg^( zOM9lw@7pG&b*q%n(3DoKdbAN2^epY$XKqT$T=sBkn_g{MeoAQDURY>Qa!V-08SaDJ zeqnD;;-9c8o}SwvAJWPnuhSf?Jt0goVTppW5pVf=J{)&}Zh>f?CYrwE`-ZQ4 zhYCJp^i(HxX4~|xTU<@g3q`Kjv_d_yfY)=wjn0ErGoYF#HW(3{MuBehGlPNZEFKp0kGtcXbh4czDGo349^u9}b#`T$=!0P1# zW+l$HXmP_nWg!|&`NdUL)2}Sj+Wq*Wd>GmCH!$WR@LLqlfZg!PVYn~&*9Pi{`d-2q zw%v~-1Nb?)#`=|gMIlxhYJxGqjg?;f=?zH&o^W|$6YaQf6mo70JlS~`y*4HiM z{i3db^N<=ER~ z?{lki#PpvTU6$XAH%)o`wK!?D-(%l_XKj#=N!#l7V1LpMg32XRfoQmAe!WZDR{xP= zRz4nWzK8~+ub>qMIUeuCX^DIq)lJoS_A7tJtZ1;D1$kQ8Z&~#8;{Rl`Vl<8wCA9X2 z^h(_YoX2BuU^&#@5bm3tHIb`uD}N#vGJg=WFbH3(8`+WeD9l|3`IFG7h&g4-Thnr3 zWyGKkk+YN8o6nu!jM){Q{UV)ZoHTl{z=5yBwT9#OM~Ju^*_Uak8bK37l1TfQuM{7Y*$ zoBEWH^y(vDP6IgR{gckteS!0|Tu(&9<=vBqXzsFK#R470(rKJl;5vj=o`I&|_cv%)Gw!)V-bn3M=v7z4TwJmmI0@Z6fi)(w5N>kK)2NFcrLl3D0KRkY8=%{*4 ziG$Ery%var=&4?d#8(VbuO*8z8saG?s`>b`rI@K+>&P^5mU?YPTGO-YwKZ|Y{)B?p zmLyB;w*nXqb{5z6q(bVY<~xv7>HFRKsEEjDeV++qiVBJga!d5x3yKO0in2>46y)ne zrca+9Hrf0rY)rxAR-yXo6H3PG)5jK%Et)nqN1t4fU!w1epJCMx7@L zFDaTZwm2+(?6|3U*+nWYkil;UjV&r>^hSn7M5>S4K2q{=Vi?YbW{)c>m|DnaL?a8c z^BJ!A>>|KS7@LE?k9G9NsTE zwQXcrBz{3lkKfc{zwQ@}t3LRpsxkPbs{;JuRRMmnsswr6aaBYLd7O=$3AoBfeh7XS zjQtBElOL-U1}Fu{Zw1e*9%Uw=-gsQ4x}7K-@8k6$%I7inW_j z&T!@fTR3nOaZE}bcFkHmmA9n`wOQ#f-rjM@WvwZCq+JR(8lDb9og&mS^EVRpS-&*q zM%!n={3o0-x3j6<9tRp&I|_O07$23MEaWXWw=15vN0EaB(4B{WS3}-g3#^XK%vC@VH$r!+Uv;;627g-M}CGwDt!F@isrt}r#Ka&O4ALdpL zz;D2%;=Ug+u(Fmim)Zydlhvkrf%Qb=))lC*n3hZhHbzAlu8YVxw7oH1#mMOgIZws; zB?gIGq-^@BdlQ=1)E_q0*(`v4H5)z~z;ec)KXOHc+wjG9qkV{ot-Ahf6sFza(-8PS zrKWPN#B6oQ{#Xo{fOrUViIA9_nn4`$vP<&uPOiiX02?b~122zN{IDcFiR&Jpp(iQb z(-EiljvuBcnSJ`D>Pc>Tzdm|Wn8BXT%1H06$1nORwQ(Lmy%LzU&moG;&gNH`mDDQ@ zvq5+s`wbA~ivMC5&$D8yC4OZMFR?2d_Q@1H*pRMVYmx>rpPs;Rl&5%vBA()V>A=`Px{n&0TI z@btFsdo{hUrhoFZ#++|O*u9n3%I=ZWx#8Z*)5_N>0Hs*kT1_L=G)7H3t7(Forl@IO zHAQ_~4YSJNX|7e4n&$DesQ!Kizn^Eds3EmlVO4Im0kv0HZL!+H({ih7HQlGCht%|_ znx0bAGir+ZxVmI@o~PHXuJZJzn*L>V$Lcpc|I4aYP5HgGP@ivpuH-vdTe14qUe>N^ zs#nt>o`%-vNAdea>-N@hD4%HEOHI?%bdZ{6s;Rl$=tu6yTgO@FTbEeR;_#MOmo`ch ztyl5#71nEceuecmHLc?59yR~4^#Oi=*!sAdp62OUHUEN|Ubeo*^Bd9|{Qj1jf0w1! zzuQRG53FUD+SsV6qnf&_sgIJ@m-Bz*KEztKue51r6UN}%bhGKGrpaoWs;22`I)tY= zHY0gjXfshwr>W^2H7!%qWjtMP^SqjFR#RXDzV$ZHFPptK2W_B7JUyYN@2lxYY6`vL z&#$QIH)?9G_q}?5o2U0}xSrV(n;M1(zxb(DQ?6II_vH7!_4!;sY-4O&+d{J%r?#DK z6KqqE%TnkQPoYOV9j2yPYMQI2&@2ADNKH{6SMzLV@DzB|lgKV zNtJs$D|5bj?_lR@=Vf1M7i6bzpcnNv*o7+hc2O*~Yj4>e{ydK7r`aXi^}_QsyFqH2 zsivdVbiA6H%jG|EUt-q_zv4Q}Zi(G0z%}=`IaT>=S7Eo73I?1$J<&0oTD zH0ODKDxok9073egL6H8?^g@1bc;pdtm>=<+S^WA79jkkuSqZ`%c&ynqenMV(zhBtG zOKxLNMI(brYk92zo*&NZ2JyNQm59*;#+YtghIM*Tq*F*iXXf zI->kC(?)*H@P5hRf62;FUyhNTT&2{B<%p|!t<@Zw4}(u#7+%E87ItBH$tpFU;mzkI z^Eu3P&Vh7(?aeS!M@=`tJiyC*&#`#Ja>C1{oSq7nFLFPuAak0zT_{>J_&D&vIQAhg zNpxYzkysfGZ>h*_HL)2lsbv(3TF#mIY7S^a4r*z+ENO-@?3yx;C63b>$8rFZ^;#E3 zr!baNp28>;y6Wa34rAB_J+GzbPuno~fC>m_%WOw{)VCu&!4vExZ3mHe4Xc{@G>d9`~aTQi__nW^|iQ%Qw}c~D6wX` zBe=p#O$A%{qY=aV%dVG#4~x|NyFA~A=N|-wo}AjAyzVe1W;ygLevNldaD9{2rC-BW z4bF4EeXUuH>*1`7w1bz#*;qh(pVI@6Jf3>;d;`bp#p`-;db}7tf)|58*C|iob*K0y z44~0?UUvkif3=p$*a(g*k>@A!G7`f=9WW1yU+Bl_Pv)(& z=dzTHT|z1hVP&K(EEb0Fl4E$uVVncQc#nLpr-arbw1#p$qT~2eu0fIu!zdLq zI6^X~Fqu<$l2e$>DNKeJoYFfS*B#!Xo4ou@e*G&id5hP*#rt;@r{oGRe}&WbE5H7g zU)S)bzp?W4KF|3#$H?COqx4f=@>8CFjpuyETl5+4Q)Ht|H>~_A)_m@KrHPd^zjDU< zu+hv^$BvXy`2pvGD~;fF;@Aou9&f_V4#Mj}aMqWwcd`gJl;I^I@ShOE=7&;*B?zmq zy3ZoH@NN{58Dt(-{VPa0*+91Z-_3pUe%4a?Jd=ERIcu+6%J@?^ifMs7fbpj;nsGq> zotGTS`bECU`b9nj`GL;^T){p&_l-E<9!IhH+wWcRMY7IhDLIGV(fSxZlr!LhK)cf< z#tqborwKHXCet4HW=~Jri}t2{D7c1``j0*{KViO-Yr^}Dd?~(sh0eSeA~U+ zN&@$$q;YS`NbXI^6KIYFf+*9DM-f7_*YEBI59e$?*=ad7~J1h8Cyh)&X2hTrzK|v%qJ3Ft0 z+~x6~Jg#Lim3VB&V^<#g@Hl|Sp*(IkX3XS5+BvrlRJU-9kOFX{H z;xW8#xc=Yc zW{{u|_?SDAM3M^6YbJcBdC>bg(Ct-ZJzxSZWxGl&ZO5s=Srh0!qemdinC^4jJJl2x zD!<>Mrj=^CO-;?^VbSn%6>4iXsQ1^^`)?GS5@bL?8fuUUMJUti|&1vO^#$|bbVhUgJ%p=*D@+iFdI z0X&x8!*hxJN4*xvKJ>#tGK^GVborG0MgEIJ`U8;>N6S*f%y?T2#gTP-YRP_R#qAfXqBlCuP}82)VnTuSbcyPVeo zzhX48GB5K|chDw`peSc#-*Dlzl%648AL8B>0e@a6Bg(vvX{}o?Nm=q=d#V#E%e?j? zt6HEm(l)|ct7+pP!ki%y*;<=6T6}PzEEe5VIUu5cM5slM&ko;G9}L6nUq4JX%zd5* z*E!oztB9IKc%G_Vv_K4d|NA$rJ}lS{LE}tM1I>p<3SnKEohGwz2QKEW;UQ zY*BV8jb${lXV1DT;(nyD(Gk10I z@$+>-2?G3-7C3_Adya2QY7->_2vN3EBe=hBxA5?BMS}T9AAey}U2Q;+YdZ=9D1rG= z74SpR8WfcQSoQTmUJY&*a}85sitw%^3m93=%vd=&+Kbv^tk*-$;4zOX(HtF8+e zppi;|sxnef-#`^50f>G5NBlqiM>sHF3nm)@B2;wi3`4={6e5%v0=C1ch)^hm{LZJn zR;K+{fqj3H36fgZ@W{>zo$gM{)PY5u^0B@ceR0pGo1Jds=Nk%{Gv^}>?#VRwD?eGt zT4(iho3&@>xpUinY0f?|y6}QT@e&5HMpS52wZ}aQ;&12)*;(Q|X_AmiGn>N|@bU@c zQtwefnL<6wdB#u5 zP9bY_mM11?!i=wC!LmP7RX5ryyMkQ}@h=87g7BmyVKj~~?P29RYayi7r$$8$+Fvda zN)OHm4IltcsQ?p<6UIJ&%}6>p%+lZ7i9B6Y9x9ABe7UxvLjqzjZh$kKT@1bStGR(c zd|K;s(C1Rwk~&N&GhjhEUI?}y*asM88D{B6>;9J9btZWKKC`ai@8zKYwkr4&{9KMY z2Od%Qb{Z*qxuKSzR?36B00(Kefu>4B0~YbajDfwto=q8`iq`nkWc9`mxDx(L&w&7f zGF}N7BLLs*l6u=#bpZ_$R2L{DuGIKm|J3#~(LDAekkRCdKC&@fKOYRqJ6mSjl)3Rbv%y#nR`VYkX~fB&)2yRz2Hu&$XBi z|HT{WuRh=sH2ni0>klWxR@b*VGw(CAy2-&4A1Jt9^`H=wrkVMHg}v|iqR`XfqaQ8> zZYOd6%0|vkBXzS)Kz538Fp@!xO@SEe-GZ?e?>DdT);8|4|iV>j^99r2GEL%Ajs4JfC4fMpz=)wA|n5hvHbwD--t~8Cq({B zFkKF?o2E5bIo+CJQ*O{$GE~N@MoqfSapX|?Lyc)aLUEiSRuH}o^? zv7(72lTW8a2e`75qnhdUqKEuOZ?6_<>E+)zFSeU#l+kzD$`oP6ePmsiktExD3eW=Y zX8Q`JL*Pu={>)IRx6n$+e%Q`54j=t+uLc=5cKyuV)|yDbjAGoZFpw8{27n&whx4NZ zpeU+DgOE`|Vbn0PPH07xsvAlPsqE(Lh(xOaZb&s}vl(l`|^1mG#ZDFibCKm=xi2#nVMp8yEzGN{QQ_Z$FKq!J1VUVVWL z1X^$M2}B?k03o<3g9zO9_Yn9eeFy$vxf{GYW;^-p7tQtup^?8v-6+w`I11n=?vR+5o(kMG1-CSV|8rn1#mt6%t~Rf#>X%#-z{xv`gRGVVL@<<3c& zPS7Qd`JlI}TE0}-fk{$VP4AudjIv`AWwj3lh&0t8@AAI#4(_NV$-CjLp?;Vwz+uBd zgVSGp}IvNZxXVEXAqySC4hDVtoY23ydZFY|AZSqlMYSMc{MY z^B;ul3rI7hd%h+ym~k|QTzEw9)U${eA0Esr=QZ2vzbqzczTR;-nfH1=;Rt??D{*8E zlSs&V8ss2&Og}P8m9z7R4b6Rb^SJyw9tzKS7`|KzlpYRJuoz$mtd_dtoYq>K9Sl&W zl~RZiEr3jrX4xUysDjnZQq+uZ&sL?4vc=+wJ7j1S%lADqaUShPI?d^8juvf$EE;5I zcG<*A;>L~_?wvOvt7xcZmL0Rr=gN$0Wxa^ks4b#*pzhfum_0}^Yk-+T1_Ttk4x<66 z!LKd!`YA~$Ual$c)u&q*c)-vXmglMY9xjdvoS>5>?}w2mWDxngZ$rYYef zc14;B#`kjy@ab>-t18NtLhc$7KJA*&KGibB$mP+RpDv7CVKA-7w zk&q-4;FHF?#6OFB>fR>0ZY$896Z=5wPKYyJFUPEXc|7+ZejtrXUr)hd;rXpzqN49= zUJ_zt(qr^Sj@-j0Sr#VO3s+uz%voWRq<2+KoI5VGx2kIhKh_z1ncKD*!|5=PAYgO> z`H+OxQX1)JqL^Y$e3%ee%`oXb>4dHi-YvCL{<)TyEKelHW%2Ey zw*ExUb%zJ$D^DX8xSHM(RM-~$Zfm#`m(B0QDRH_AGMyV>dF8U;*J04x!!;gK4=d~W zEH@~0F0%;!86l-b8d)B?amt{I?vSDDAuVi)&J=dKG$^DWj;8nF4@U_NGg%D0&Hnt> zkcH%uvTn*LA67#na(p;RTgsy@;bKyATz{I#t?jnyvpKh-4@WY3BCCSDAOe?3^PHiJ zoRQ*{F=WpILzF`5%Qpd<&mbqA47)mFnk%?hmK8JXX zg+7=%OUL|)36?T@woRy2N&HO4{DM2b+-m4(jKIVwHaELg4A&C3qEDvpv@h-~(ShYG zU-M3If41YL0j?yv^X(1;d8wjklLO|ABh+%AJ>%m6-!mVqfQ*%sPm@c>M3PS~bt67( zE64emm+8k}-2(yNZp11j?N*RH(nA}uH)r|ubyh=mdg9g7(+7gTKvM-ww?#o%0E6lB zS7HWL^+=1W#e%`wsAFwugF7P=vK^`J3T(f<`YG)Wv_o{C#riT$-D6>fO?ux1>3#jb z(fg+h;os4l^`aQ2_!H`_VS@gH|Dh%6x_&g{Ke`6S~b z2N&oN@~;0k)c;#ccW|y*lF!xIQtK%XjF*v)z32!r+Yh}h9~fZc!-%-q@i6pag?ukt zPOOhpg(X!hRv2M=W#G8huw_;8!Bl?mAy3goRl)P;JEwL+XNDhMgwr&|?HQiMaSWK; zyfiWz=h+ut`z~>wRw0Ud{1+KNlnc(z)cu@2<)cQW+rd(#!sv2TbekD|EW4hO=ybYv&Zb?|d0F zYl;Z~e8*4kq_Fs7y?eG~xcHyCXy0!P5#D-*1*5GnA{4UIM4&~TP#Bq2Rsnrl_QBbf z_T0D=sJEdcrgLyUJ<| zRd)GW?=p$!LG$XEqJvAbEkBeGP~FK=hX>`CXMlqe~lzS>6XCr$8@IGm_< z=%5T(#Lj;$B5|)|>C~@Ok1#cjC-L=HUqs~(rt_0s{r8D>ey*+;XUZ)&**d|Z<3j4m zki2rVY2|^r{@ntL&m6S*G7QtEZ#tic+z!M(7I-%~Blzkm4G$}9hopYWMt-PE~q}l-xsl>mZBU%)ZiUVw7 z-O$Pl|C$%@^Nhq6owNhEzmJ+4#qdp_gMu3QP3LG(%o|ZQGzyHOC@G^=tpA{qd}_2d z<+%*0zG914nW@IRTWl^%Y}FMo)JoA6M}!$N$tPC0GkXAk{g!9e$0U~-QL$0K{bxRQ zCB0LKsjI11A$B}jX}I_7QHwE^KsBrUkl<&|&Y;_d*{bP8k zTRXdPJ%1`M`RHn(ytP^30rgc)+OTmY^{Z3+wFllxabPRpb+CQCvDiomYb8M#_tR}%^GyqFLh7cUX|NJnPWW&AEiw4<$r6JT7Z;0WBaK@E+w6eO}hMoV&mK83`!{ecDk4`9;N*dr1T# zQ!lgkpan^Vm#>_dyLd>0_WuxS1ppzZWA~@=F!kK@iWR0z>)pDakyb|p{u+5uqg!%s zLTv0SRy_X2dN;?UzGML%${_IjBUciUs`K%fh_{loSJ+Q9sE1KH0q7e_D4ZY>LZX#M zu(c8-{0So7>D2r@=#i$^6Fspv_-ekBdsBO>^@5-$m!guhAOvv-wK@tlfq8gtSV~(IQO~(v&&LQwe$e z2QmS)Jlpjpk~WJt)^^eu;w1H~tf=k8bHrfjq*5{rZX?`8xVPa#;a0+pfm;rj4L4Nx zG4a!_fjdX0h(V;K*q#i7nEa8O{|e2?a50O#g>VpD6J0V{F03J2;og-#B|(5q z6K5msY~;I74hsFr`+&uXiz^?9snEvdbaaBJX(u-=e$T`22i=A=!;02e8I z#+^NIg~MgTr3tAd2W~N3J8}g1O36D?5iueh0yhq>CmgF&ux1PS9PWCZW#>laNJ-|@&E8KQGJL8#+JM15NPm>p5>x6N{Pxz8J zLk|q}V`4<;Bkm*#f)@OmLpJjA7!M7^2%ZMveM_MWNdXSlbHfR)gff)G3r~pQSxX<` z*_!;TzTqPZPxEY#QbM&Ud zj3EWoo|IDu+JV~80i>ABB(umovXCspi1Rvm1EcLmvYEU`wv*lD069cHBVUrQ$+zT3 za)JCpE|Wi~Ej3a*8icB8i4Acg4M```m1L3$WD1!?CX*M)bTWr5A}^E0WC?kbyiHb< zx5zH?A=yjzkdMfIa+;haXUKQ7BW+LhG=R1x6*QV0r)_9!+K#5ue!y)<62L}`?eGI> zOBUAnH-mgaHI&j8c<;~NP&evMDiP5UTark+kx!{Jb)ufMG4-NNXfWRVPV$h>k9yFC zJVz(;gnH9PGz{amCt9;HL9YQ>X--;_E+htNV#y#fm<%DMv@gx118ExVPY2UJG=mPJ z=|qC25OB9M^1GuYLc#YLGd3M8wD?gc94(Zp7XDA z8MJ0xbt0L~+|+-+vd)BD{_$6G`O@V{mm6{EPY0-gJc5+^)BW@$Jx_n5SLjuGkKPv? z1$Uu^&{60Nt;vKNCS(hF!bD*z;?sp$LW!_gSc>>k0i{~}d!C;Bf1?wSM<&k(v`;JA zmiB`@yU`ZZ740+-vL1mR;t}M#C8Yfc?L!_yVjqyd$v;#BsTCnbwp^#|pjAzvSDui_ zma0U$Ld#;gR3?(HGz8i)gv(|o8B4m87Z7jq3VOVy z#D}~}8j+WXFIi6f$x7l!R**oliiAKuL&qDJ0iOA99RjkWeb;O{TqQPcn*JBDv%zGLrmE^2wE|9;6Zas!n_rqljfN z=vhXNQb*t`pxbGM5G#xoHbM8C#T0R+cuCSq&Jt#1Ql9jRv`4zAao5Caay9ccJ2gkO zM4P02MSDs6Naw2y)3w*7>c;9ybq923b=R$ItbDCvt%|MYTdlR)W_8@^d#eZ5!Pe>4 zi>$w}mTjVJ=GyGHsj%&AyUO;wowwZ}yRG(ueT@A``(^fL9f(6KhdhT(4mTS_HJIPv zvSWl}ykoZGT*qyWCmruNxjV%;l{js6I`2%JBb+BYuXO&_#n~mpWw*;i*I?Hq*J9W8 zu2)Ad93WA&5u`}IflR}H>~5JOu-ydl+4Y$!EsGVC-QFdR4hX1HT0_tpBg_D%Mk z>-&Z86~Bglef>uJ?elx+-_gIo|B(OL04bnVK;MAefaw9N0*(h<3b+$!7w8_C95^g+ zec-mhLxCp)9|cK44neJhVuShy4GWqTv^c0VXiLzZpaVgdgN0!CVBg@7;MCya;6=g9 zgIDA4WK-v+gPN{wdbXL=tW~q2%~m$s+U!uX6U{C)w`(5Kd{GO#7J)4iTl8%)w#Dt1 zF)cG&?hk1gk{7ZnVrY4oO_)9`BrGXxV%XfU zWnufmj)t8NyB{uv>%$|$`-c~YmxQkh-xPi*{C0$E1RDnhjN3%>D%O@d^fZJTL<9OP zgD3_D2Ki~VI#K+?bSzcgF4$nWs+2dc`ABlmNP@HU5tZZ$O=)>9y(e^WY~#@&(b@!a zf~err1t4aN9s?Mof%7S>qvgX_Y0=txaBJJ&c>GIU=&SH|0CpGjjD!RR8QqN$(MGM- z?`i4<{Rh(N2J>gSoN?H-nKrDixQKc4`}CPVul&q2%Zx*h?0~))b;3w)2&$vFNV$?W zc|?Qd$}O}>eWkUh*7CoL$~)Fon56P=5bEcF9=0i~VPvZ)V}!e#tJY6%5qEittMttQ z15#4@_fMfy;icdqtUek-dL<_IvUKI&*F{bhzZ+MzXOO|;>5_$}m+6oLGwUm@{V%_i zAN`N`4Uu)oi`2msC|u}YAO21kAK$1GJ(F*FFqdx+%!-K=?V^%Q$TW-6#!U)uA-_^3`wI*v$t)IY4kBEwF6St)t!a!Xu z=(1EuZPV7nI&{owtN1janO@(FxyO6zV2xQ%vmnoUwk9HOeq72t+@Vd8M#!3PU{Huq z7ga$Y<_-5t2x}4Q5xYGv%O}C84Kvu%y!yym-v6c2#*N%v2EJ74)kyTPEib5p9-&gk zbiEDwp$3?5kN`J>6Bln5;t#WTU7LzB*=4P~UF;-YG|BV}xxM_Ayt1N#`pTCyr6zfA zC6PB%XW?bjc-9Yya{ZLF*_mAP6mbPIyY~D^IlZg?&suUj+6-zb52fpYf0Yv ze)Fy_oiJ`{e)jq!1=E+7tf!jNp38Hm?Fy7^2fsda`X@PJugpGuGvzl-D@SJy&Xo(n zK+JiQDsM}hHM=o8B9gxl*~-};E$so>^7G|#2G&MJyP(;9Q& zZ^mT2H?_;IVKImQblpa~UB69J-uG~me|K^jb#%#+BO`tF^5yQV3_&S__pf@^6KM>> zvq}=3Xp#JfeAur30(Aj59`AToq2@A!(Es_dGCiUV8oy^2i#3V$o2yBseECttGfEB` zHtg23%LY&7Hk_v+;HjId!8a(9aWS%$pDr?xIMvHy-yk>fW4Y8A;1>`PIneE{Tv-pl z^$ij}I3?}WdV9nO>snz77g#6rY4a-HkAjS1t@)HLKdT*t)qTUl(<39(LqpReKd7H2 zTAvol7{8k}>mC}K-2Cx3&u*78Sa#op&RAnCBrXO$adH(TorXq4u^vUIb1D;pXbv6o zk-Y0C({;hKWM9@dM{a0J<<0V2m*o$4Qh{2JJN??Pmjt1r7%R+XDn4I^j|j9Ee6C9j zu4C=*h?R(00yKuF3#4IH4KMeot8g7_^YwKSfTHT9fpUFjHgH>3Q?*+_SSGetIs?JC zqO7VL;Km+7$-{M}0i#-D&{^aZW-F@kuO$X3!+NzVQE|ZPE)iaL^h+*^>}xF0lvY>x z_ZpaZMQh^Pz;Us81aR>=gwEh$fr}ne<_@o68c_pR93~8lED2NkH=z-KhfVx4wU?>18rQCtVNDEjfy>@r`7Nu3Fuik70Jg-q?25l~J++YCGO>fH zf_^2pm5;D2ugkLOBp*X=YT9dd@!3kfJ&KcGq`^fi`3dpz!B4)U<9^S%mfI(GXYV&I z6b}2Oq{Aq`zlC5rN&acM`!<^J%Prb}cVid%u6@J2)33dJx}b>{wJtY>x9zNqCn!(H z=F@zBQazilzk{zTJR3ITEn598j;u!0&Qt1jfbmVo`aAGI1P2%oVt7Ai%j<*wjTZ?XoJYYs ztJAviw85-TJFO(WxDiPyNs$NBKY9CB^y=H;n(&S5l0dW;L24w@5K9TTeK5(SN9 zHhF`vZ|N&~LaC2hp1rw57qy>K zOP*uyj1&^&Sf$fZaPqt=PVz+XBM-r6XfKBYBSjT-PFU4A1vqJ(pqE?MuZNx4U%trQ zsZ?r}DtvCbxLht@A%BRx8?nC9q5c@#TnsKQMitmypBpK_qinpD6 zxCP8_C)`01GaX|+-Cpci@h9UaWNbU{FQCn=Z8Y^@7sn{ACHvG{3|eqqJq4i-=Cas) z*PE5a*E{tUN9R^e08NkUFOkg#pIs*8U*Vfi{hTw8boFzPuC0=)dU$D;GuBqm z{j4@ms=TH-s`&upJh)Lc=a8IrSW@{p^95D)GG1sUfBxQkw8OV&Y0P%ILq7Cf!InV- zx8#rAIB?*`v5h{WJuhCOsULqVZ@+X=-uV%AC_3}f(({uhe!q0_cQ~*FHO4v~<#Bm- zQC8KO>Xm#wrHVZi$u>T#aLD%Kcb`juxqLRJx?|UdsH+iY^OUn55`@K7L++Q)q=Jvc z&nHAu`Jk+0g0MFPxv1OTNuEO*{r;(8JoZ^6K0UlY{`f!hjg8rAyLmjf-Oxp_rAyee zsKHX^`P^d5FGX(b`JBOn&8etC=NAC?JpKrU)cwL=LJak|bWgthOj_(upFaJ3YRocZ z!3#IT^8|>lVN;fs&n&+2#m8Ho(-N%g&!MlUu>7LhO;?lZ$Jo&|EG4H8P@9}%jVI{`9#L8>BcIf*&nLNSv>Z`-**Q{QmG)z9VnfMW+q7C!n)T_6 z)Aoj&^2G+@hL6k>sf>dc+>WH_$JZ6iQjXpP`*rnUZ^U=)lItu(8*$^&AN3YwE~g2` z8#g|y3gFW!mwJj4sQjaOUUj#g@@_Hf@yU9NWOc)w%FHu1$EnG-0B-jO*PPAEi+=K} zmSxF1IQPV=1%?G1XP9~TWTttMfwfoVEvYr+1lD0GFvx{z3p2#BiH^GM;~@s|-2iMl zxqGM^5p?GdFO8bKrvK!;b{XmO-+N)@{UxLJW(;Z6acpwhv{otIXKa}^{q`oe=+4xm zU5m81fT$p!umS6*zkX~;aDe=ebwkg%B;SYtuaH68<}W^(&t!$u!RHp3XR*1m^M9vC zn5RrKT>cADY_jqGe@~3V>%e;s zwS9DM=tFAmJ3NPEdQ@q(oWl$6Rc}Fz`0|B%TUq>FZNM3aCpv^!S8Yfv)wFI?f2;HU zF2!_0l{uWp`X5N0s4hnToAjMFuPXkl7|H|8CN%Js&8S~P-^DFGZ0(JXeZM?hDwc=I zN2FC$kmV;MEz&V-y_3<6_1Z8@@eIO0hY!m~jvZsUq*e0%>!#(x*y}jKgS?y%ybNxq zhZRDVEs+=HWY|?DINs(``96d^NG+O`jkaerHbOt~REsl8*q^Y`qCqnhTpg>MYkgH+ z1mc5sQR>Y19ux#sOs}eayqU4)tX0c1(DYj6bxkDi^D*(m>fFiEpjQIAQ~njpeLW6} zwlQsPi2b(4;<$<}@&RfTM^tPzVYQ5YfamA^0NZasKOoe^A_ghC{<0-9rqkQ%LTJXv z)(q@qhhm3wu8C5}ty&hX6QAs3dt4|@>go$<`eL`u$$YU zidM|HYhtC7*#x_74Rn}Lzf)JuK^l1t=OdVm;Vcbxa@441LUv4oZGQv`Rbr=!lvCEQ zeGZ(D__9lmy4!7uHxDfe6C!2R|HxkWX0FuI9OiSF4Uagw$1IN^B}CH7TesHfET8%EPFb zDh)O`AK0>yMv`1$dZpdu2J%YH8x;-GT6o17#JiN+Rv{g_N5~7S5Nv2_UL_J84QvMG z7zylY&a~f2cR?e%*id_#aNkKMQD>{KVUwRHZ+u|oKqalKY?4=id2v~x4b%O_PbxYj zbZU|iC?15}>wQD2PeQkfUQCC1nOui`nItj0*E36&1}ZvT@z#GM0qVZ~*+iIWV0s?_ z8qD_hXObb7R`mm>75|YE#d`m2Vjw+SOLdP_+kRC2{l#-QC0wc9e>`#hZ?aAKy>!*$jZ122Q<*spY(mY)NB2Jt%f>9KFF2@G-&aAHn95#hnk^Z9CZLHwwn2SnE&qYMLiV2Bf?P&b#13GGL2 z7&7v+lH8nreIk$a@haWi=C_+TkP~Av4QM5%4e6FfliCK2%!=p}(Xk|Je-fkqr|OEIt^d;3wa;xO!=i-?swxGawHT~;JY3Z77>E2E5c?S<2X3U6$5Di(B)KVMYwNpb^YSqYX zV5XeYpi7_3G)bNng2G*xFrgA?zj>86r0ts9#EH#x%r-P%Y`SAX1=5)j4aDl)xHK1j zlb`qF>aW{|%l8G^K6K5XM!ChKC-k9{#){Xc{<3Vt-IDiLX>OY)M5k0dSoP9`S$!h& z7QW8PVdo`pi0j2`Y)?{BbjKr#S=ZFLAP!41F4DIyO_=n@+MyqJjuCCw=M5f0j z3^%%OR!}Q@WZ$}2-u3>Voz+=R3 z6guQKoDQ6buRdd_95LjEo2RMLxrxo>!^QyLz-jpbyT5#jyw%GFynRYqr0o_XyrZX@ zZ)(#SYTZGlbG_zN6+MY!H_*fEu|G=RYW{>Z)WG`|NRnzm^1$SnnU4IUB0VC_d=g&? zb?bHI#`W2^-khFKBOCe$m~PIb!>47B8`3Xm#4vn=cKxlpbK->VPtJ{8JSchJl3Bv> zj!R3Xzo?XTO`3%7sr8E0%G`rN9yLMHK|#^(I1%g-05dwy7Ha))8o*I)9lG<+7pDBU zWI}%_JzxI0_g{^tekQf`j&`R`J$|607Cc(leQ2xGxf2R=8kPLL>5aSdy9=*nyu75y zZD^4Y;?c}$-olac&vNuO`JWZ{yDc0{ecoEI_$}}Rb=Mq6-F@*bB5S+en6#LAA_MNl z&csvB1oXNVoQcHg6=vdfBbL08^1%-IkOhM(A$T$({mF6uVTzd0(%JFi-NanmUsdPMc9d$iXxIVHv=8@vM=1$0XpKRrCu7+OEu z?ot{#riFhn@9Eo5FlwJ-BE>GVAhyxSd?x^;xJ8>yN_>aW!$XH|PsnNKe&dGx)z++als9ZV0YRYSKGvpY{po;;4V7cX1G#`4#=JaiE;?J~o)TdLsk z;)H5A?^~4giQ)^$N10YhgP=!PSF)ZR{R!{O5u$H5ii6)xm%r*ad~lNd1#MrjL%g27 zqtLWQu*;bhW9qH>)3kg9a6p2j7k~r(b}byrIWlIt1Fjj>xL$gRwl|q-sXp+GMnM-jZxwi=fLTA%{|5MHTz3?BH+qMspA5OlK;3-tRW-^b z8-yi1{Z!yT!F5VW-yL^^F#M@lbKR}N??*X)(3>oDMt-4kn(VFe%JXSnQS*r{oh8TQ z{-cXRz>8o1smZqTH*H&Ir-{oe;!S_TBtkjv!{8sze(9<(%`;~{R3kO#ccm;%#9YB1 z4?2ESHYz%rAN`7-D}PQqM7Fz6+sQlV2zfW1_}cH9+ZAn>xBJ^uUSQh7>pIVr$@BZN z6H2IKoCq6`xgCMmvK=+I%Uv0N=70%nbqm4I%{)(MVFN7#9I`ErLLM``x5(R{QxPF3jD{(`O?LEaght-M$tqn<5NdKycre*MQdys(wjZ}`)+@dHJ+;eF%iKh;E5(a7fF z3N0!8%X@)ztGp(y7O$%3cdGjj9sAA-=XavT}@!gXOu$Dpjyd2J>-71e19arFt zM+!Vv#0Lab=~*A5z!M~x^~`YIS19mqq9y)ctI{V)gR0Z>zCuagosHw@3+_~IlnzSy z>M0&~cV1u2)o}_!*>m)W_FyY2i|R{}##XH2@6K6rWLY#AF*$eR2~$N4Hi!Y8%Z7jh z@e2+u9y1>d@qKr{Daw)?<~s0okwR07_=xd@#Ns?b0_FsMm{Yb_WWd#OU8D~}n^cXN z?o21DW=^$e)jHOiNI}cH9iLjp8*s|8ZZU_ZnI}~hD{I!E<|1frmpG+mV>`#jnWtLv zI?Ea{ev)}|Gif_y7q@|^lrvg`*a=2Xr?U3Zs*9f~UysJ(=UgPy+6MliZ)LN^PnVGf zzWOQp`Aw{T4w_0dWrbb4DXX7A|ITdrqm~2vigVR`(p(PfI;s{~brsY$v~*}a<g1?c`87_cQPqxgv=9{;X`ZtfrF{8#pRaFRpL(OL%e;;bn`efN zZ_m~d;;HfsDx|-LwZ!H>r?+g@!Q{MT)^Ts2m-#Y6>4U^b@h%$&2o|>@IzOeu6C6GX zYwzXN_`}gk_Y)}Ib&^ktvrT8jlgwNIIb!{GSFTf^0l?O4@f@Cohe$pyEASYxH-{&g zGI?3PxRZpXj}w?KP!dylO-#qU)PQb>tz4p_)y;QjLj+q^;;1XSW^B7V8XoOQT35J; zHtW!K;G}*copyYAndRO#+y0cU-I0*?`s6#B5vWc1-n0)LIgCZn>{d?v+Wy8PB2w&L^) zz>0I`%x6(=?bBXoUVWB1MLnw`APfAD0Y4dCW_sg4?6obH~l=)TCjsKia)%<#pknra3!3gfA|mnRw&Ov0pUXIyUP3 zoCI-Mu(5OO4_|H;Hd5oC!mSFOd`tWKGJ5tp&6GD>mk*(W7I?f^eX9^fvPo?fGAuCh z*>0y41>vSmW|X&X(e(Zb+6C9M6}&kZJ{f;OpLkKT4E+5X0Cq;)xpEULPj18M#+<=S zchFN}QAb6(x96h3jStyo0(hOQyH>UQ^`sRw>c{9XW%BaObi@hJJkT)#_J&=U^FfQM zEt%jQjFs$DLLS3+tVO}@_TA?Uc;$ocw0%-;WZ!UZYY6Jw-;mg9+>TMgVAJLlo*n*nZo#W;@!jzrqwlb$s;7sNec&zx)B0U=~6?lTwts2h9O9kFd#92|)Nx{R$ zO9h@J^|gRA+oS^TE@97_)fMYiR@W9-!&I+JA=Rn@_o-?tYglP)Bk%a+@za|I(K@-1 zI>6wqSRJEAh1SavV{UW*V31*^o7)-{`g(}7IDJy(6Db|^p&w;?jLIe>+gp@q@4ecF zxH!;5^C?Y~OXSzZlcu*_Cpx+mISM%yEm1ee$|u?s@f6Y5%v*&8_tCIz9;TNDM;fz4 zv=XcYdvPaiu}0D%suLH`0QpCG_iC+95^TlI^2aD+nQMGQk90d>lxd!GM|YQaTj2#- z(L#vv=;zYI-t;Nz!pr4td;xVp8%yu;Ix2A1#tJ-E!b+~2AHojgsOIye-WG(!& z3`b=J=A`McPh*aZaXcD(8ZI8jXqN!$An0`6W-bkNmUHNk!>(G_lUT2`i78w6LgOQj z@d=^gG1Kmz$wE)z$)-7rjII*ac^nt7?`5UF;s!>)3TO3I;Hq6+g|qr9aMiA^zRKMFiiVDmPC46FPDXNh(y^8_gn-MVv>(JjKAop03ox$whmm^ttp z6W;luVA3D!R-VnD^xNCcsTuux4H%Z$xA7L*`L_o&<3nMayyyC#@{S$U_3nk=%PYx^ zb2m@~>b9}6QtYAG$Mzy|N+1AjDKwRLw-)T)r1C{+crtZbRvw3R6H$?WG<(?D_-L5c z_#ng9Q;=QkS;Bq}ODzQ1L11gni5atUd-QAjMW-2kom@Qqbc2?s9;eoQCJt)XwYi|H znBAf5%1ddT`cF+MZRo0zs6i_@x^DY%;WzWsTE(S=$p4_cw<~Xnf8*PIsHgeho}?WfCLX4ud~4+LB>DK|tPfgH zCwrIpUdL$jy~&*%tnOil$JXKX!}66B$#(ei^glms%qC3WeQ0H+G#c|k8@`e@L{g1< z0?LUBr_pb(q;9Xgf=_YwP_j+DLn~5m;UnSO^e-95ix^*5;_RV_{OoK3-+@p`XP0$| z(b4>OmT-!pPb>@R+4Cx zZ_0lOV)5}g^0zLH*{5Ehb4=w`DMa%=Y-#~`R_!x-!O4*wxaQM7tq|<>&`8QAZ{_Xmt;KUv|^9RXi%l(eg=YD%B4z{~TgN zvSF)@h8(jy+#-=jSq<`I;Z@TUP{xl2tD718@QG!d9=JR;X@37vv&MWrd&Z$rQ?vWb zN|PsTWfheJW10pIv~FzF`FPL2fU3tiY?8_lLJ%EHZAS+X%@ z6Qgd)f5|(B9H9-$E0g^$=l>Z@*FtGN-G=YHI{F9fOK#ujWI)8g_V2WoTE3T<*Fm09gFcEoKZ}GB+B00H)wbwo zuBGM;&PDKw;(pHw!V~R9uHVmWtYP)HjkvSE=AgK5bBOS@_5zzbI6sd&zt_VDaY#M2 z2L028Ghz&M7h^ev;oZY88YYUMXpbPHF4{wwa%}L&j{6)x9(>Fkk)pEJ&-mq+8SAsu z5M%him9F9{%{^ul6a%Qnno7c3l|-{9_3^}1#-rhM9Ni{tV|F{s?|nbb$Vf^WI53Hh z>zA0=zkgz4Kcsz&Tob+!?O`t>*qldai3Ka4>ftt^@|oScIlQm= zsZS_qYa)M358$RxoibO!aHVU~shcgnTpv1kZ}x?eW%AXbY}{X7d6WK3n-X6t!qnzR zMLwSwsVMygnGwiVy#E_KSMO60{Vch1iaNU7@>5xZgJ>;e|0?zX_q#X;^gyD-7N4E2 z5pNx0_=3nJ>2=K-tP@}xp*k$BL_ZhqqK(m5A-Nbu?sNt}ol)Exe!j^ciKh||CZ0(+ z(&W3a3r(&jol82Dd@A|#CUVxH@I&H+t6$0=&|dO;H0{f)U*f3ITAD4d{t~kqN~VGK zFHkqMr90~o)f=$RsRX-M(F(ezSKbuayv3W{WK`9a1!DNYz^!EDGX=LA44@7zJ4Xby zXcFH!ds#r2HXCU<`KruxtXW7qD~?@wpfeeYz?@72=Z*dua_ zTw*2wyc#C^iQcex*-}X?70+>A9TcyNM$LZk9Hc2k+gZbMM{L?3Y{6voe+- zl)Nuqr*HFgJk|TkTQnc)6$d%E%4H4TeAJdTtRSXddkQM_~5CVuba|Y zvf;^1u>G*_s#SeIT(P#aw0j?UU;Nt(?(N-s@RvpFyM40#+`Udxhlk$`OI7CnNx)eG zoL#9cZi!aQ2OoX}d^_NbTL$#HMmNKc^xWywa&t}TvGSeA7>)5r)0pSA$1TRydDj5W z?!m!SN@6n+tm`niJA3G8^c!z%-8VIV%*359(YJAnloc&ImbXuS_0k2obk}5ta|rSd z;y4=!St!CQlx2P=P#5052J*U8BzEGreG-h^Y;nVV11_U%CGVs?FK@wK zN{SM49Ff5Bsu@Q#Fi;%OWPT)a@1(70lDubYb@X*}W^>5u102FGjzgs)^65eu{q{)r z64G_09>O6ruPQMOmA@62puh6NeZ{9ZRWeL50`8AKDVAX$MaOzsirKm$$~ju2hJpsd zD&I$!CX|?CnqnrX)N|-$H3Tx?NfXzIuR%vR9_1@~L5DdCZv7B+X=a(q(Y~I#ZZKG>C+y* z5uW~q-u*`{b$2S_H;*-k2D%pQ8ZV!+wZ3n2Na*~-iu_F(9(QeKF8sl? zz2wkHr5vn%#4DQZY~;lknvs~YaJyuyD8;nR<}U1f1Ew81@k+&x(aG!9ourx}LmV>_ zy7%_}{PTovw{PF}*^=4o!u#Ld_q(NU**|eFy%?9cAy&bUb+5$kX+d94(f2BU%9)x- zBl;zNRv1Tx#m>LVKfy}$6K>!8jCPVgdnmt8hkwLQ^}5+@q`ie5M~jZW_Z~dqrrgA% zk7HY3%Jx)0r=6s0!aa6o0K0MQUOc`^jW%+-8bYpJ zad>RU^xzTNoAmI(5&i)_-pMf~2S@n%`uJe*Vr#uSxVe76G!cE16KezIq^COO`?1?y z6bLJkPsxNG2~GRO#-=rmYbv|2g8}qFLet>*ma%EUam~ce!SPMwGWy50hzl;1AIlj* zu}wp|HR~VWA~pz`e}`<6_TzkoGNuDJvpw8lNVuCI|9en=Oehsdva|)i!GN)h21Eup z;p%592wGFQxTzw8PBG+VoLw%K*ja~ayDj#qo-$yHvlWYFP&4__22vt}!y)ziG5F zP;{sRs4NV{aRW++0o&27=2U zmn?&jCcj9hP%Um3TPT;)Ban$H_#*wWyb$^Ut1Zqg`XUb-?=5mMJ*=5ieo=f-VJEDw z&hHP^LAgh8Z_5u_A2#n|=XZ`!NBN%CN3l;lyOHb3e-WXT3_aK_LeNx47%d_9@ zs!uEneQKQVZreWm{W<5T^$V}cC;z!E|MXHs>tkKoevJFE+T!;b7Jsr?UMF9@ApbSX z;()k3uKF;uND3>z*Y1IhiS5BhL3aIvP(9VQ#4KTs_{^RS7Hsz&Rc8@q7-!ZHH)ovw zgkjaysLht|-+D>@ZrPI0va;6{b?QRjJALY%WkcuoUS#|+WO2U_&OA9baMhSQ)_mb$0k3U&*G&Lim_gCXa7oHh7yssEkVw{}5Zcjzo zh*6V+IwmwNLYpU|BmW9x50e_MGq`cU&x!xh(sdtfdR^$!Z`ZIxqOz-s(rf5$e=Ea4q>*cb~kJF*& z&(nclel4&2{%uNEER!qOtd-?gms7fC_U8TrwoOiaDJ&qh=jfrsGn;m771?!Z$3~yh zlyj$P`WFY}?dQIgw;ldyS>@`tDOt9xa?RV7uf8|v-H8*n4?*AQy4Q1H#?Zm`j(c3O zlmn?XXm80{h^SPXFJ5r2MLp5#*jgKGVJ)YD#G*IR>7>Cb$v>%8c)b?sG^9tD!`DBM zPSHLir^_o^2L$*SVl+F=6q{>Me!B+g!ou8!_?k3aJ|$e8Fs84Ue|S@hg^z%~ag#Vw za|Tis4Vtl&&L%w&oFH|p9V((M*ZGFKPW{f^UFVOjEJksV)=eBH_u0BDX+uF=0&Uu{ z^`J@p#R=_V_U}EmqRqk?BSe4(Pwr3i^nMozRdd=$AZC0;d zB}wb!S}|ZNw%_r!FiiRtc-fo*^DT@C24Tv2+zLc` zs29d&icP`*w`f$!BT}&UmT!2=cTL_$yiHO(8>zh?x|+@kEnFXhR^%hIc|PofQk_S% zTL3a^B0ZvmbdehD5(Kyj1}7(zd{;$-ICb)-9^TYRT)XTw*N5KnaT*1buPsBIM#;y$ zIbPFcX?>*$`%iqWObs~87L7}XWz8S*r>tC44{259U7TIT`Wzfnub9NVPj0ueuW;JF zIM4BnRlns~(yEkK1{W1&z1#zN9D(y!oc+)Ofzcz{DEgTkzj<@@H+LRsuI=A1!TzGhqMjM~}V}k{?%`(fq2+{E?PcY?n4-beXN-ax+wH7gH;?Yi2WB zi0mv6u6!Swe9=P3_gQa>h^2k#y9GQWIqKQoIE!Bip5t^5gl<8|IM zYpG-M#yUO^mgZVsgkJSQFytS%=V=Yn5k@PUyK4=Pf02%S!^)(j8Gg0nj+oBgF}qDO z;R{oHG5tDwXY!KPR^GxnH|$WF}5$aq=uI%#F)ao8d_|3yDsLL;tN zuDLC51s#6UdZBZ*E>Y{6x?jY}4B4dS6HT#I;u8rPAD;t(}%MVirrYTTN* z;&%d-a&1YxctefbS;XzhD#?t~0hWX#@8~1K!Xx!PMh!2_FUrp?)_2V>EXXg+Djt=e zrw^VqX;R2I^Q(~I`Qw_l&`%mwJW`*UQLrrhyezUE2|b`4b8lX{cL4Rvs&& zOI9He#^j70JF>XAplxXAQ%ndgo>GuMqA;sq?qYu- z_$jN}xk7*?AMmD_eCv^B6!MKk3_s8a%sId`5q>rx@f;f~rzfzF15}Tn&&nZV@x=0t z0sh($J>W%vX2BJ6s@M+&j>B^y((8dS7ykdGE~9vj7>%s_K6qjjD-@<7#_G)|XJzJr z?ogCb$V*c4usEyn1iWPwjpC_8@N<0ms7ZFM8tJRxeUYvZc+ETwM{QYK)Z{?Rs`NGC z|BVmkTGhpm5h$HeUBK(YxTdsQ0k5aI7F{@Jl~#`d#bfa|67?)bzP8{+D3^n0OF}48 zPvKI;%FIG+B%agZD{WaV2Wg;)N!}!0Dr*lV#aM*HQFDaYPx}GF< zO@*J@y-S9k4C>Jv+9oKzpUx3&} z-S<4auKP_5@2KGe9+sQoR)jrUX|3#Ph0fK_Rt>GZt^ARSh0WA3tX3GMKDSrH7&S~( zL*z#+-Kr-KhgxN*VJ;8HRy`N;=gC$xsza-}R*S4&LGHO$E3H=ZaFNw|HQb_x+tqNl z8tzlWLu!cph@G(diihW|&hYS(8s4+IVs#Vm?^!)mL*==m3T}SSLu)H*f#tV$wRTWL zPc_u@Ft7^VfpbgXj&GLr)EePp z>-jwWD(ht&zRG%y8kX^Js|w#^y@NmRvEHwShk1BZg`ZTzv(^_lygIzhpRcO$+bqO( zq-6cbT4te*jT$MORuhSSxsL=6|HVSVYAqSWO!r8aBT5cI6gsfN%q{(L|UzfePSzT@ii zw+O$txoGnnFZYhkbsm=6aJ{oBw#u8Xn@|SGFhA=QGvs5##tQ!b`U2d3jgVaJB7C+k5=|Lp4;ME2`l9*-o&t zvU9L6u=BKYW%=y_?euEcLJcE$*t!aCe&3P9Q|w~xl8`UOuCE#nQo~_tI8qJG>GEnl z7uzM-&9a+nH{WhCTHf5=YRKA=m$S-lnHsK9L#~&0TUGcTyB!?9$Byfz-5$Hc{Q0N~ zKdFY7?atak^XzJeS5^3J7TVose6V}O!xm~7p@y;&+Dq!Qn$F&)*0ZDCBT(RF@6PD3 z54QJJ!w@xWrG{Kz@xC*EPPSL{mg^JvQECHy;^9s;+^dGrBmDKZPgTQAHOy8+=qpZi z24ki~Wt=`k+=lt`Tln@>uuL;N$?*T?DbMkgKd`srW=@rX!#i>KRGzmB&)Y@E=;^}p(se4F zQRT+Vh3y^~ym_wkJg(<;dBcP>qMqdvamJSUEDc@C%A#=$LgN@j>doR(Z-$M|V)$tS zD;GY>g%1p5vkC`Jil6dfKFcM%!D)Dd$1_-oG?wFJUmj3_&9Et*$@6~0={d{b;#me4 zo3fN5&Yi>0W@*IcyuLSi%H}$7TeM|qG?hFTX2F2O^OW|SZ}yxs<5UQ%uRY79{f)QL zAeLS;m0=JjaC#^y+a)MUbci^uorCLlgrHwk_wqe1A(^LFHKXRuO)I8Nbw z)|#}Ery0oK_U9=x_}dMP8lRXvkc-}l7e}}&<;AIu?HvLwGFxlYp zEClhCLE=f|9R_PN6`E?!asL|kccZ=wRrqZNfrXN#`4O76g4I#XWEjLuj$xYObDZ%! z?#<(~Ifg`7hpCXuxs-? zIH;lvSxUN)=bFyx->zMbl+$@Bqd0sN$F_*a7xDBXSy|MNL9ollFk~{EG=P-_pVd8p zVIcDuT-?D@^6#-2oNoh`d)gyfaS|%ir!|Z^f;w zL~$#F3u8HLV|jctuU8(gZ%Zy|d5qgaAxk5D%TpHel<)DB#XMy(r}nH0VYC&qT$+9? zrOuhvR5ONS_?r3jIQIiM9u3PyPcS^>DyQ~y{`O7wmSXn~{+FC5zjOH?#M6wIK13QW<#8!$&PoxQv%F$Bi;HYIPsOn;CC*HP z9{9*ByvFlJ@$_tmoYH?dg|}E-2;&s~%PIVqw->-j(-|vyiZz@&UpZoB%wx`2@6{M- zDiavp^4Gjpt~8A2>Bv^xuv8QL`aFRlgAmrM41*g9$MmZhj>+sSxcP94v05Jr)5=&F zE+&&1Sj8_QuaK2w_5a>jCbPTDsJxa*xIB&3SDwuL$~H{eWiGLDCF6knI!`%(aa+E_ zxGhhIJivy*Z5@Q$IvntfOfucc(pQ3f|d1_0If;**-1^U(~RTc=HuEvrvfOm@U4`GFwMtxOF6jTSqdv zb!05Jj!fm&kp;m|xPa21LS|=H-H2M z!(iN&#FAtfQwPBuIu?3A9lE_3-ykx+P#VZ(nbKCA3IQo*sIdi1_j#$C)UZqq*Q?=L zHC&^H=Jc2=@qDY)+N@NcFR9NLl`_eFz{~kNcE>oY-(_g6#B7>)QeXn9pv-Dk!C?+O zoj@MoTq%Xm(mBAt3deFY|0+1i;>^Fm{j=OZsrq(+pMhl95IuY?^8XF%sWrI;d@TGE z?;5H=kYW~`74nx7R(pRqN>*{Ku82uERV0unJoc^{ z6L4$R20)(GA4%x5l4(zhlM(pa%zcIhd$Mp6T5$k5N-);o?+xIk)asI#dR41%0@!ST`7J<@m z+c0abrn!SCcxp&kme!`ZmP)iF8qKseEv$D~3k!(Xdhc0Y=!V%}FAO%!B0d(@aJDDTDVJ?lNJwFE;jwLibjsg8&RB}7w#D5 zz<@dzU20DDxct2AaPKfL2C;E*tKOuu*pdu4g!!=dqD#Z-_vxd?<+Q}U;kW{QO4lx7 z-X8Yhkzq#cYevH}X5cX@EUM};Z1%4ICzRQT*)qy(U8EkpQc}Z%!UB{>@4T*~3fL}Y zY+9T?F0E(VnAUM!TN=Z=uTVP+v<9Qwp1Mi?_apv zpg3*AU#|{dP(1Ux|2JaFmwz26?$b85*`f7nA3NjmtuJ=Y-tXbJ&y>@;(Y%?**ETgh zYB7Mv-5;g_tUK_}CjwdpMytskYlH~Gjyt37Au zHS6@ld7s`l?^cY={P6!&cjoa>u5BE*j9s>2Y>j2%(6-apRgeBQt2bKUdI{XBC&zw3Kn_jO;- zOx+mGF;tu!-e{c?sbf^%HHoJw5lCF@KfV~?I%1#ZZE!=Y`7~|GXhe@$``#9)U#3`V zcCMRY&EB&KgQcd5uVR#1i73)V=F<lJ$}Co~`Z@WYl>2rYH+8usOHh@v;30rHH7)3>R8(NCJH!Au2o{dBpEDLWhb&r46w%_iV3Pr<@QB$h{S|BhA44+A? z(3Ibzakew^6^sg%;S(R(jy;zRA=2Xav4`|L?|>ctRgQrl(KO22ar0eNX*`3?$tqZc zs<64tghS!_{jlyhOYha7R+l7ar%Ea||6!?p($j>Zv?+15{A4C!*cG(~tfvX9Dx}3e zwLfJ_`eyRV>(Gz)&XX;Oa)vnuR~wnt&Ca%F@H(6{ntyn=W5$d9D^6JV0 z%_&QOi9l)bDT;WPL)5X9p{srFMUobXu_+K^Jv%Vg^pC(o z7!ds8^gQ3x0#;re1?vRdTu*>-{01^KfJUJ}kSPJcCde>=!Z#C$i2O&c?FW#3B{Joo z5cw~`l;mSGO|88g)tqT{NBc?XPz9?JWpNqDN&Ae+{M#pZln-n;zd_GkBMI8#Qa#K^ zF6Gc$KkR;KEXU}aCg7lIg3R!U7Yx0(v<@{iwolw^b=REa>!5Z$;dQYX)*vU@TTk5f zlxx#rKA$M<8o2)LVdnbZ#2abe2Gf%`$+!)?wGm48T{vHmRfX*R?a>( zChxH#8WFrF+5v zRo87W*@Gix{WC|U+(9dT+hH5SI2^I|pmIB8JpW8(^MgphXw$h_As{cVY6F_cAMTGl zfZUW46;w(diBZBxJEBoYMHi$zVvmcH0|KoCxFD3A&gggg=f&c47F z0xh@s1R@X%fDqiaK?LsqdkFlKzI}i2+%4V(SWiCtMWywANaXYA>!li*Cr@!UGEeV$ z@uX6Q*LKB}YHy^EY6M;G9Un2<-q70~`x*=FY$&;;;Nqug-qkzvSGMoEWBNow(emtA zNFDcW9O~Y1OY`LyB`26|G(Yx~zUO_4tt(-AFOWVzv@UKlUcce+iMvaJUMO?0)tivT zh3^w?36{~A*_inC^;>vhR9tO0cK7>m1o!~(MQMP#VV zLM&D0uXRrY@E-3DS%^i>J-l_+>@tSzl%aHu#p?QQNku~UE8}D>NiJ-XRpvcA-n=<+ z!wH(iaZmIvMYER*5}3rjiWxoA$D?hSgjj7u00LDF$h)gwct`IbFUGSKts#FHEWmCn zK%=L-Bo=ddUgjt{H;fW2i9&J%oYXrT={&cq!H@_*`U}EDz9Y=o%L}X^1LrC?7dI!c zj!Qtz&-a)Y-pw~?D=Gs3MR_F1FC}>t2s6}I6SZmno1Fct(CQZ6!kQa6`T(A0FCd_v z>Tlw)pSRbmrFm|`eLWe*@_KNuZzRthxop(b#;b?wSmCF5vKJUL`k1Dh0(uLx$BGW= z$C2&_>HDPX(Dbi~4rcnDZ7)2j8TKsV#fSUzd#*NGYrQNfR(UOPESV>tgg=R!<4hP? z!zAFdd;RVB0<MowHAj&;+8T=^NJvqk?&v=|>@?PeaGcXp87rbC`=p(d z)oB$gW-=aJcyM03T|rqft0KUf#F-V>%o>kVt}CLmqwL-$m@P;!OMrQk3{Ws-4WR-k z!IvHM`YA~^qhdHS1OhG`hyWWk-Pgqm2bhB1>KF`vzqL_pMr>=HNNl&*xx}Fq`+WsS zuWQOReF%X2+d<%eCNuKUg9TT9;BrQTOzn3pV=5xptK!6yM@6BlQbY76i54SQ0mCmW z(*tw>t!#~KHR6H4&$4fN$Ai*#0+qc*G1F~offUmPKqzn9AjK5_9>ufwwCj zpD5+yna;Dgd)B1awMA&d8s3^4dtdxkkP}Wb*Qj;rU7k5^Ae}->Q_gOo|7H&Xbz=2u zB6MWZZR~okOl^ZS3zPGO)E6Ifm)XSVoD~!1g82_tcMjpkI|7rqtQ#>fyMfDay$gui zVzlP&85Ry6GMfR6m0(-S6S|pbrr5)tOi--KDM{T7eCG#`rn)KbJhMw?p$T!>yt3vCirV(z^Auj6d5iY-;2!cLd_2ldgT={$FbBl(A!Ob14DRz`JL zijSsj7{X*vJ)jZ{9!^vfcYAa>KCv;bFJ18FF6)fh+?&K>k&MR?)&A~e@TB5-SjZ<> zq{!W~?Z*prkaB4+-}tCJBRlP=)7f^mv5IS%2_ILNr&2P}<}-a?6wlHqC!;x&K%6zLMinHuysK zlGG`8S?;0x!*A+Sjf4%0+XlF>BFr+28elqv* zko!|HG|ZowAStskE&R>$B4;w^7hHGCtcHx8g-?uO^K$BhO`77Cwc6=AY)d*y)gie{ z*E}w}K9hKmd3_5aq=9UNv_C zrIE3?<4?ou-X_db%SBVZ`$bAb$b03}>PTR!?5@u=!`?Mq*vt#=^!UW89Hk6bM7diqe|24YgWB6gM& zxcApyrDitm^|~J+?n})&<1hFiolqxkdb{knN=%NwL&b?4=(PuhIL( zmdiRIdj#g*2+dnV5+I-pL-N4{FaWySzn7QzlKuTLZSp-MogMLbGhF+cxu&B;GVaJn zL%{s*_k1-2k_p)PF2`mtxcxy05)1|hlpg~^ADu^vb_rd9Xr>C5CpyjnM|X6=h{OS= z*;3&WKYe__l^WlLB7Yj9eSfk;VCM`AW?LZyax(K>t0+I3)Y-mU!PiBl_0N}jvHv!w3rP}OV|a9FON ztF1*fkw^Ja48%9Y^ya7^s}(8SpY3~|O(V=o44&U(m24EfuGXE_Db*+cqRxdV8+-xQ z-(=>f!@<2)m#6L-KD!oi>;*2-->W}<{EGZOT>te?>_-?dVGbdjKH#*Z`7{O@<^ZqE z;u`o=mdKW*xxiN@rEek>rLNeu!5~x*Sf-N(RyE^esEure!Vj0{=c5{Q&EYa(%%4v^ zwRX5cte`03|8=T_O}#MuVQ2iRNY+~>-9{rl!#@4?90G*|K%fx$evhb;1PTtYiFHer z7yh*<;O9FMJ2YtnaDBgON+iQKgN7VbUZF3B#(Q+E<7YCj&xRJI`3a^k_+*XE zR}L9#aa%8kt6tFY!AHJSCJ(w1xkQ=$LBSIrmz+sylJ@4vM&{t!@@GUW*XqJB(h^dC znsL=>)K$glj(FJ>Gg?pSzFogneWKRu(H8b4(prfmtSr(^K%8;T`J>#ybE3A#k|L6az)qa%^evLb*~)zt*-f^a)1XsyuxB~ ZHo5ls%hPLA4S5`$B4d#}O3iSx{{Z{*BKiOT literal 0 HcmV?d00001 diff --git a/StandardAssets/Fonts/selawkb.ttf.meta b/StandardAssets/Fonts/selawkb.ttf.meta new file mode 100644 index 000000000..f8d251cf7 --- /dev/null +++ b/StandardAssets/Fonts/selawkb.ttf.meta @@ -0,0 +1,23 @@ +fileFormatVersion: 2 +guid: 50050997b11d4d1584cb468a2dbc24b9 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: + - {fileID: 12800000, guid: f87ca6a04547426e8919d9cec5f7044b, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Fonts/selawkl.ttf b/StandardAssets/Fonts/selawkl.ttf new file mode 100644 index 0000000000000000000000000000000000000000..cbfaaf99cc89bdfcb964aaaba1ef0bc105923588 GIT binary patch literal 44232 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

>zSKPZz6sRD$F-^YaQ25fZbN94Q=LpwC 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%0D^JQ?{Y$~!6w0xUqoi9A$ZgI>oGBchM! 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 XNW;VIpK^;^3QYQX?pdM-b7B7j$H*n$ literal 0 HcmV?d00001 diff --git a/StandardAssets/Fonts/selawksb.ttf.meta b/StandardAssets/Fonts/selawksb.ttf.meta new file mode 100644 index 000000000..3afb6bfeb --- /dev/null +++ b/StandardAssets/Fonts/selawksb.ttf.meta @@ -0,0 +1,22 @@ +fileFormatVersion: 2 +guid: f87ca6a04547426e8919d9cec5f7044b +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: [] + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Fonts/selawksl.ttf b/StandardAssets/Fonts/selawksl.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bc3fa0804399eab7f0ce2f76756d4afc744f4eea GIT binary patch literal 44260 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Fonts/selawksl.ttf.meta b/StandardAssets/Fonts/selawksl.ttf.meta new file mode 100644 index 000000000..b6b5c3849 --- /dev/null +++ b/StandardAssets/Fonts/selawksl.ttf.meta @@ -0,0 +1,25 @@ +fileFormatVersion: 2 +guid: a2634dd3f7f84e14bdc1be3fee290e65 +TrueTypeFontImporter: + externalObjects: {} + serializedVersion: 4 + fontSize: 16 + forceTextureCase: -2 + characterSpacing: 0 + characterPadding: 1 + includeFontData: 1 + fontName: Selawik + fontNames: + - Selawik + fallbackFontReferences: + - {fileID: 12800000, guid: 50050997b11d4d1584cb468a2dbc24b9, type: 3} + - {fileID: 12800000, guid: f87ca6a04547426e8919d9cec5f7044b, type: 3} + - {fileID: 12800000, guid: a6da5b118bd9485b97cb3115838f026b, type: 3} + customCharacters: + fontRenderingMode: 0 + ascentCalculationMode: 1 + useLegacyBoundsCalculation: 0 + shouldRoundAdvanceValue: 1 + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Icons.meta b/StandardAssets/Icons.meta new file mode 100644 index 000000000..f7bba0cb2 --- /dev/null +++ b/StandardAssets/Icons.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: b7c5817524a04f7c8b6b23f79a7b204a +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Icons/mic_icon.png b/StandardAssets/Icons/mic_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9bbe118992330919a90118de0d8effdc6a386879 GIT binary patch literal 627 zcmV-(0*w8MP)t0)Xz;@XFb?Ba zV`&KBB>6XdoaVr(4*bSnD__jR{PpP&#$kLht!tX|0p|jVvplKY$$+bs?pu8#`6qIA zA>&$t_ii)_0QlqH(_e60A^J)^Tqh4)b@GTxLjdL@5SAh;gacAH(zP2F=ED#Capi%> z#LH!U(=366ia@PSg(aW4Pb9zI7jm{m_q7TDNZRzws*;Hu{!Nnyj)ej^UTln5uQ=Yu zk1V#?GRC70RmbLPvgX&|)m=dMlP>f}I5?prK@5}a;rrYAu2QnaM1EcKjy&ZfzW z*69^6JptZJpoxrgYpdk`^a=<9N@Oy!O(Xzgd3MgS|WSi*~@C(SwQYcbgB|QKD N002ovPDHLkV1kB?Aff;O literal 0 HcmV?d00001 diff --git a/StandardAssets/Icons/mic_icon.png.meta b/StandardAssets/Icons/mic_icon.png.meta new file mode 100644 index 000000000..4d6ec09cf --- /dev/null +++ b/StandardAssets/Icons/mic_icon.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: b81fee41973f48e9a92d4d0c9b06803d +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Icons/mixed_reality_icon.png b/StandardAssets/Icons/mixed_reality_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..e77c73aa54b9680d34f0e0cb5fba5a344112b814 GIT binary patch literal 855 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Icons/shapes_icon.png.meta b/StandardAssets/Icons/shapes_icon.png.meta new file mode 100644 index 000000000..454be1474 --- /dev/null +++ b/StandardAssets/Icons/shapes_icon.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 2df74cda24fa43c6a7f95be25c4315de +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Icons/spatial_icon.png b/StandardAssets/Icons/spatial_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b2b7c458cdf45589ef226d8a84c0ae7129feef0f GIT binary patch literal 812 zcmV+{1JnG8P)Nklz$rm4A!)%Sq=lpfm*5uce}AQfq=clEBpoDJnm4n8NpSHHB$IbD@R7m+ z*j?NK@@Ri}`McY)-E5gWxVr$J0UKAqOJL&(;D?}>fS16=74Q<+cmnt>;3eQC&{u)m zzRNAI*0TgY1~@-MgTET+f&5A8Vms}Z4v03h>kp<(AO{o(PxG)C#K7P5r^p97go zS@qgI1^5$G`WhO1E4#P=NI}#!48-HyHZvLwg=Qi-2du+t?5EY@fy6#$)ZO zGN{b}-hpoc3=Dv9;91QZ`CsS^1`jce1mX~nacIg-VQYo(9b>?ImbDZB#Foe#xH%Ej zo5IAzd{qMMD}ETU-7-?Kk9R)q$9pW;RE+W&N{B^K#tbnv8IV$5ArAlm{V*V@`;)?w zocSCAsN?|*8SqF5F}CEU=q><&A4lK-&8IX@@i-mrKpck*E>3?FPPr*;J&b_?3+BtV z(hOk5`9z)rfL(r~&N=cX9Q@o(LDTGbZN|hg$>$aV{7A0wO8iTRL4ycOk@L$)9Y z;jl9^^7bB!U7N3qkjMBq6H;^L_NiF2ei>3GRmmHnbBUl}9WbaR!0C@ehfiK3a}EA?0Ac@kNM)dw z04vG|&NYx`42+F2bIi$ei2&-Cmy?A$y)ZUO0Hp*t{X6k!w#;G~C>bCr*$i^qi59VM zUVwuj_?-~*ZbOs|c(>#f;4Xlo(wbvD1J=B|3OCOHMWr>zcm}L_cNK1)0g6g%j`0jw q^X@9#JOdP!)*Ry*u;$%WxcvuyUZ}H?VeAJ00000P$Ny9Ttw0OV0pxdgPcl|A>m<(HNIRBRnGeVDdwFrP zySI1W{@h%%y}D-bU_S{s6>#MYoJ-)!1#lL@y_UeoqbhAR0q+a&pXKv;fPmKneY(4> zB0#_&N=EnHSv_@tIFz%Lh-?BffQv7HqnxEgWD$@FTm-0HO2jMyE#SXP_Me0xsa-brEcB-(RKArLlrx|96{FfK5m<{dfwH}D8SCpn=)z*wDp-$fbGk&V|TC<0BGyOeaL1MUBrSzc1ablfZg zYKb7xl?D;hwt@hFBT(A8!UFaq2s z>WT30?fs8(!)MxN4?;as2cR|eyR^Z(0UwVQ~`idaf?b_n7mr-!G?D= zqh2hr83oi5f*2LI){NH(v$53QD?*B~{a;K0Hes#->x-Lw{EX{)t8FO)LimM=16GoO|oR-EtU z#XIw|MSxr&0+q=&{d)=645krH>(#@nD2YQe`aHHBcQfZm4KR38E^Awz4GeIU<7e(sP0T!Z%#pnju7sK0GR00h-k zBHvWt3L2>a^0lpG#=4xT5yT{x);Rax0AAY`Z9kO9eYcG&zz;N|h}QC0GUGn+ECLjF zh6u&j1-J&wCO~mVh}adl5?w`r;zx+UcX~V1fW7T%0+i1d5%N*10?Q$2sIVzeq#fM_ zBC)NHK-G2)`QfA8V7RI)ShU?s0X`qA2;S)cwS2~XA}>XN@_-0zci>OM-rQvUJ+64Y z?TZ0dqI=Z@~ literal 0 HcmV?d00001 diff --git a/StandardAssets/Icons/spatial_understanding_icon.png.meta b/StandardAssets/Icons/spatial_understanding_icon.png.meta new file mode 100644 index 000000000..e8269ccd2 --- /dev/null +++ b/StandardAssets/Icons/spatial_understanding_icon.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 8e70d112cfa442c8b2c39d73dc3a8a41 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Icons/toolkit_icon.png b/StandardAssets/Icons/toolkit_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..84099c05a418ac9b23321109ff2a506556a4f0e4 GIT binary patch literal 682 zcmV;b0#*HqP)I(lxN(texv}hIhAJ_BNMCp3rf@iZem~88JkMM_ zYTp6u3YeV0Zh^@Kpt=dZj0{O*fz#{&Ue5sDM}=@y76u47-Y(%GuRl(!9PZ7du>i*p zsRRoEfEW&f)&f)kAs{}|4tHfNllwbY+sCQ^t~HDjtN=bp;2ej5V6^~ckK%DKvi;KP z|C*Du)fzXMSrvc@Q0y>DC;>1O1giy5JP*pAHeh5s`+3A_sppa?RRHG;Z--g{01+BO zjRmLzLO`Sq7`^P!)h-|lm**js;9-H#5WFmqLcld`z*u94Zg&A$xI7PI2X706gV4eP zDFj^828>oa(y}sslfucMAbz1*_kO-#)FAGShp&)o# zAccVIoTO!6_Mr_JWuI!P%gN+<3k7igS|xCvrm+Qp(r=8R1Ua^8;hemM1#*&RJJ()| z?33Cc%r3y9(s#4Q4xF<|Y+(T=8UjKK3*_VqFqAf>PFQP^eK-bvaF1a7+8A?NO9kYT zsj-7)Y;OHU`xXF@fTfTcD=ms$yErKRTU<)o`vVCcrSUYWIq zTRi%wO5hw-accn9+66!sTnO*@qfS%;IMJ~GnwxHhAn!5sedN;PnWqJkt0=pk)!XOz* QO8@`>07*qoM6N<$f&?5LU;qFB literal 0 HcmV?d00001 diff --git a/StandardAssets/Icons/toolkit_icon.png.meta b/StandardAssets/Icons/toolkit_icon.png.meta new file mode 100644 index 000000000..c3574747a --- /dev/null +++ b/StandardAssets/Icons/toolkit_icon.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 08c0fd91bdca45afa09ec64323cf3848 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: 1 + nPOTScale: 1 + lightmap: 0 + compressionQuality: 50 + spriteMode: 0 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 0 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Icons/ux_icon.png b/StandardAssets/Icons/ux_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b525edfbc873b9897eff2ef55cd1dc7c9e263046 GIT binary patch literal 777 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

-4d58-L1DR|D|;9jqDji1AM=Fu@}s4j;h?4UtW79-7R2heuir9oIrodSFf4{ zGku~f)$@yLucg=cTjyu0=FSQXu=wg#wm{A&s&cZESL14SL&|^(>(DYu*;EOaB#YCd zax?3iot(Yau*FkmR5*l6kBdlEcJWzpdW=P8-90ByFB7(_>oTvkG4f4**-iyEr=^)FCZ}fvT(LF} z4Ii7ClC4UiL(-E z{UiJ3NoH|E9P8}{Ra?1G#o)rvnZXjNy`6ls$JV5(JGo_#c1xY)v@Lr~OzIpbroLZD ze(DLu+62iT#c@?C!OcN>xdktou~i%7nuZ4Z1nZUEyI7O|a+`B;V%$9O;KKZur#GAm z(c6~y(meK-tXydTWp&aB`82%>tAt@0Y0L`yg(Hp9j4Nyw4i8GRR#cY?&{3#O*jq{K z5_a;sq%pIsmxpHTGf|97w+MQp7@2OHdg_E3`=*tH{@<1FD>iR1V>43LJ86by?2jpE zR1KFbOYv~gkk1KVmU#Ijj4def(oB$MzplGqE0Z2oxun9<|4QY ztkCt3s-#xX{4ZC2saWfOm8rIV_|&gIFG^&TE@%I|z*Kt~*Hn~EXVK+VV@8H%?M*LT z%>H?XsrJ0?{;IZJr2)HY{BfaOb@3+qWgN5kzc^OT230$`(7D0sC-j&>?Ydd21&Qc_3FZ)ZqA;di^V^T)K~lPW2i&_DF<6dYTCv>KlZ)qoU(V3 zo^Sp*?J2q!6i&1Ld}K4P;PK{}uO3?uwNMONGMn1>irE9z1MgGDJb8Cd?stWg6E`dP zc@_S%efn&+q^a>EPo-7&O>Y~gOZ|TM;j~MKp6VxE*j_h#^Y~eHf&Y%WvE$j%e*!|k zSyM)@c0M@sa^$Bz|Gr+CF@D093;Xrvy;?jgGxmuK-8tmW!aT(c_j|L8;(6!q|30X+qGcCxa9+BUQ2(s9%rOve9};gS$puicI9yI@pl)E(A_+)*gt?I5L`Dq-|qO$!zNxv zlb4LDoI3sJs#K$+H$xI9p80F}&{a$3&p&Cx8=*g43AXfu<{c+ z3qSX&iA&qqTsSnQ&ToD8XCt~}XmCQ_=x7hUO$XJ75f=A3r2S&&7OQ<1rKjrJ_Mr{7 z9T$0_e8%Hxibp3;`}0Jfeu@X(^T#dechZ0J#I-hacTaSFY^_u`N+D?XY|HVpYLCyq zdj5og{aOD>->l>*#*Zflu6UqpXq>S&{gw9QlK0C7tbcE)vh7_)FQ1DC&QFXuo?E-K zpPb_%X*0dylJE3qWW9S#|GDy>{KQMAtWTc{%vI5u8ce&i+ce5CKr%ajXpQ@$kztjG zecc}<_fcuOeJf%r^l_`jz4yuPm^|&s@(EMxBsM&|_j4VIyZAIl0-p|`=ke)!0S1>? zL0S`RhM!n?1m_O4CH9HUXAK45*UI-BC!+CBCR5NNV{M)K_6!BGT z47kt85!^@zpC}7%JA$_-aDKc8FSalC;2Y^zkRaea#;}azK4*mt(hnTfra6PV9yXC$ zUEZHlRZN^{DbwcN0K&EcaKOD+X-M*wNlQkhjV+!2R>_Yd>7X^x;HShg+MM+R&Yc_c z_{i!(W9r5GPucf=@vzbJU;NQ0<&KHft%E0K{t^3m^pxd?mkys@b^1N?tw&`cv&JAc zW0TkV1n-8#+@^H5bQQIm+uZ0T53`;fn>astl4=vx-_+#p`n&rr#{STa7!~0KDqfhV3f4+1(pI`k{$2_Jn_jN{y zg+y|6T1wgHgIOcUk7MH7~|jO2cV& z{wF7?>EBE8wHi&Usu!wIKI@fuTpL<0SsWe4c8VI4ujNIFuCA}!{PJS$u;gl=6NU{h z>+2^crM)RI_VsLJ2B_6dZWb$;Q#`mP!Es|j@%qZAyJyW(DY|{zH)jW>y!2le_sDd| zmY7Vdrj;Lzz3)Gk_z`UpJEA1>Wk#NK`Kr*uD8J~U1=0?$ng-=fx}~T3=GhF1n@M%D z39BRi^@{hgu8=+bVR{n#RkhCJnAGs{Rg*HYSPm6 zvANSuf7qC|Cb@Dh8o%jPuC|733A^H)PJptg8|MYX|#fAzes#Y}Q?^xZzT zW|R0vm1+@k5i_3g)0w`4OL0JADn-&Y37%*nDABJ`MHrz=bEMRM(m(H4P^Xy;qaiKF2&$-xJ#{jbFJk2 z2LEM?THdJ2zgU|u`@?gbS96xnaj#20$7@R;m+BQWgHz|csc4?klJfK72J>aMeSH4? z*ZW^>*)Q_d%GEbhGPPy1CLOA|VB~4`TAr=fm^=HwHOF(ud>!U%-SlA&%dVm>=xdcL z#XPHKO-?{gnBN4C^tCE~Y)jE|`4+cDKP+Y&=%n)X4LN_0wz%PYKl0;I`D*v(LHi$+ ze=?4+UpS<4<|nE6#IMV|WW9X@m0NZh-$@B?GBf|uSl%@GQ_SVLr@qV7?JqEj^~pGw z@LHlm($6n-{#)R5ovWih%CEfhcY#ZBMp>8`RHEjWoLYUt?rB*0Lc>0NAu z)5qcAqmq||=CFzzB1dH|yd3meqIgT<42xuG|E7`VSFLMQKE7|zNdFk~4Ja z(D%*b;^40bn|;1s{WD;zccJ6i&1GZv8@Wdgt4m(y=GGM`O%d6 z4cAJ3FZG#z#kg0pVnU3|`STA$8iystu*Rm;BS zlxVR(ZqHgUHzPXNw=wGN#-_(d7-`iyjj8E1x#F)~)vL~EHQp9yJHHILRvc!j!EdxeiJ^q2sA%(hEfZRE8#w`7I-NDKBx zb&C>}Z(~{eqAR}#pPOseXp{U_qJo`UvbOokZjf(()|{w);jyOS&FtFAKGT8r+A^st zeJAAyxq5#E3tb7%<@4>l-WY)+soOS`Yk5s%oE=(FV|3QLT4p_?tn}39MEU#|4VTr6 z-)&1$^eB5b($HtSbo7yZO~VXJM^MaThL?aS8F?-1-B}~|TY)z6Uf$u!hZn}^HV%+J zvoYV!+{E{K;}(PBrS6f2Q>(``K5eLqO@@Iw_R5kPi-)R($vi z{n2H`T0Yk%Wy&U)$*z+0}R+i#6Gbz%2mDloWy}H+OpBk@NQ?B!#LA|3 zHGxN@*>yQ}CYH(jEbf)-QVN9Kr&zPOQ+s8AH@x*9QwQj}a=1YzC%OmzwC}l+__tH0f zHsmE~K7^Ku#rmW9&>9=OqM{8ZN?=0tS`pl4-@o^Dl?Ta^(}rEw^!Rz?+GF#~-Bse= z*TsiAZtp!YPfUEl-Ck`r?`{+Ccg`dq&Jx=%*>=Q!czOj3o{$dZosgQCawek-tqB>j zEO#E{)r7vFAXSn3_HS5hj4^&H>V(NPQ zFGnR?+sXSc43JaW`rBWjdu8^H7&UA1n52V)hVOT_dR?nj;g$CHiS11)YIAdQ9!RGw z)&73!S&gsS+&ed!%!Y@R308$w5tF3U)095mwvJs;|01yPNs?V-Luh1;zp`|~U3aId zIYHh{X&%$Ys-6mYo3SESFSTTsgv4pj`|gWM_ts0TooGI~<$ck&iPiy(CqFbYY8Ez6 z@^bQa3G-dkQ1!W)Jw~V8*Sh-H!=zM+Ao{jzKG!v*{Q9mVE!F1CYAw90*h|SsI;Nwc=(b~KFDC5qgPuEb$52o&nsL{Lr zgQfAe_-(gwKTQ%hHT`Mfp=$J6qH^dgY18V52@jsUs#E?p$u#H6*F&X~Of{Y`U(W)^ z!iU7yQ*$i8G)>b~pIdhQ$I6!P+U_ zZOL0Tk9_}!?`wB`^QG5(s`om#$AL2csooEtj6oKIhb&7B8@nw({2%E6hHHQmMR7v% zA5YW1)*PR7&vyOo9O~7dIcI6bchnvxzrS8__KR@Gfl$&%F{R82Z*oO8@*^6Y{XiQ6o}fc4hs1sb>x8C2y(^N~fMMnp!jRTUtfD z#k;BD``AA&mPCH39F&&nwRh@+@bPvU&))kq8|Ee4KP3HQ;|s4#N5GXBcgpAB%I%(F zL7o+FlAe1l{YrW1HASOzWZmcL;om>XS2u2;yzz9cT-ma*@!LrsQi9AL`HUP0A~yREgIeX&CiAYfjV4x5^iyYt;rfy?U#|q8uu7 z*Q4yd9KA`R>5W$S{Hpa1-sj3b)JI>G@O=@K{6c4bOQZMqs+Zx#7o#*jHoSTxo2XB_ z7!w<jo)(4<1_3JR~vd=j&XxCi>0DIw#MK zl?9H+k`0rM5xOcdkdAgRG0E^`;JpKtf!#qJJR|KVDJ(piTswlP6!?&sC^80HkEpY>CYw<{_P_%7w?etz2? z^PHlbvq8%7j3Rcxcj7)#_Qm-JC+-GF zNv8ItSJf&^c04b;M;C~y=nu%gw1;NtdE(P0+xX(ObkEx%VFj1i@x>l=&!iCZyh~%_ zi5T%?g1qMnv_62j4 za<&#YDCN)#CMo663N|X`q@^}|aHmL?F|2bQOG@+?-}CX4OhaDn!RuAc8THmN;$qbB)jSvy?%_c_mz;OX9l_7FO@mIa*Hp%lU?{Rl3lq!)`J6w{owII#DF*YFldc_eXpC_qCS+(OODRu>H`^JO-i|dMIp9AFg z1mA!9=~($z_c;ktIsF-XV(w>s3N5F*%O^-{^q1ZfbU*FWk#bt?Y_F)~>lMLD%}-J- zvT7wIeeDX$>>CpUe6LpoDK$S%rDWBPm2BBskZa#~C!pneMYvM)(`L11*+$9cL0*do z?!FHQHsQeTd_cGH%Xhy7y%l!VaKIt9F8WIYsv@_bGdB8CMt}CAHN3yw0ALIYlol{gplK$FT#Xqo%4w5Z+_ZQ3E=ClG6C3A;@`AQ0p=Az$jkZbTwdrSlfwXVS(CP~2GcfulQ4GvD6xNC54NR_)V z*?CTC_hZtLt|pgxfeC)gdf{=cc^UIA0o)YIWMSCQ)olAZZ!N zXB!+ucx^K={Y;YYv{eYd6Cc{HgfJd8{y=rXTOYym$Mw%x#S?eQ4F~%jwLHMXt--T( z6~%fHk8glW0`Lctrvz}3OSB>&_`wBXlRo%vDD1-`j^d`zLc-vep3q zVv`M95#c4l?maDO)FQZ=#VPkldeE)y&~oTps7K^y8Rg;UYjW}P1pLAcAU7h#IMU(B z0*g3$qKMYoS%}P7g7dp$D4_*73NDp$9-@G@!6Vu^wcGpi(Vf^UASlX%c!GijAC(TT zz_tmBXp%LU(tJU|M5@SU@CC(qH{vix=u%LuCxLW6C=w6?W>}90#Zcr7+|KR?#X1t= zpUBUEtnj{Hp2rH2zCt;^XSAS-?R^|WN-*u(5;KJ)(N$swZX@(#VopQmplrQpHX z>^><6A@^dFdo)u|Yt7W$ej{%zMFwCJv?Z(yNusNSmGvQXW5VM8MTEV}YA=)iNuFNR zk*vX8!AIIeZ*ntfe9$S-`^o`fcAV{k6mm*h#(fzP~vj=?|&nz40DMKV%>9nq!O>b0Hl z1qSJSY*`@$?9CpJty?4$yB}LbliT@QhE!p;w@uVih{sr>tMTxBC!rq41NJ*g)CyDE zOVldlM178A4emw0nAnU|k=x4`6NCRE4r7Eak;#w*f*U1zqK-xgzl==1kTY;QyH6$q z65=mO)ccSUOuM$kj3G&Mm6$qvJ0xb_9v)(H7bw~!Yqebj3bq%!n~#_u_mC+`eCH$P zMTCSAx^71Rf5~`o0x7|?YfH>Dl0;XDS?N!>920XI>H$Q|74yjx_co-| zIY3mwwqjTFk#av$gV4Dje5AaAkT61*NLfh&={zY{`w`~-GE!bb3UE8SPs*Xlz1ZYm zGZsu+k_97zK{b#IYnpN2L8HD*yRNr!H$j=^BF%Zn^LDyAJGFtH=L6kD4~Af1n`G=zY? z+2gS_9`z}1XZK?Z^+nr{)ku}#c-Tpj=xRL7KSpTB@qqn~67}7aS6n%dq=6UPxsz&T za-tSLLZD!Kv5WX(;_1=04TXF7615XT!U$a=(@hcxZj|VWdK9wtmyu~RQh?jpeKP$+ zLi`hX8#H<#*zB3>ils;i?&!9OdLkkemgp)mubv?67eGuI3J)>4i!5y>)@Ml8V0ZHo zb1_nd9LD|NBj&*4#D0v>C1UE6Ksry%YY5?&5wnG4V)uz@8%%f(o7@u~wVDaJw7Htdd&B)S@QOF{^*2?)FE z2YJGdJ02*J$Ahsa2^4HE4jR6&%Q{5}k^l0A-429=5xNw14@e-L54&l|R^0PC$Y_*Y zyT8cdiWJ~>c0cUylMsK&c+iBD;Erxf%-M)gSfZ=MGz%kKj)_U0xSvDBgfnN(eJ1nC zq`XS91iPA#l;1k#fvwVkbuE5-H6{Ae|>=976bIq#T5tf!o=AQZf-DHn}Ip z0-oDTxGDP$Nly=t1$mB(+NTNFI}8yO6TWRoP)HJ84T*{~gb_F-FoV$CU2IN!xw=hQ zJRn(vJDV>o_99h;!q&fhVKFD1IDiql6c!8;2yT?ILX!S-Tz^AR)TJRwB>%SX&F z2njQyy9+Jcn^?Bvg_eCu%gzxdU>)6DXlYMH08)V+(WUsxAc1r~z7&wlaZ7cO?|W=6 z^cPZq+u8m2BC~`0JrSwG9QzF&X}y8_8%d(8F%fo&fbNYnV85eeJxqxwCb$#p1>`x5 zBZ@3+FLn`MOw2>7xUEDRd@=C>Az_3rk!j*Z0vdzhMv0!Ry%EAMBU1*+#O{+x61f*Q z`j;eYQ=|lUbX#KXCP{Ran01jvA7WxoLu^6BJm^E7So59j!RJ!h zVMlZ+w%kb|osX^e2myOj2RXgR67?+9r?{Qnk1bacqGGGba1F=W#TmXF)Wp=7%4++f zUdTTa&ePK2GhtB8wjVc;4oufJp|v`XB+=E-+8Rx0$DuV98PgyC=1+e+qlox1+c0p* z5x&nD-Y14$ooo!ntu7Olu(jCN+~C>_jvpck4J7J_4d#2ZF|5kb5l0fom;+niUaSid zRwDZm8ux=QW>u~b`!UNjkr-eZ>@wl+3C6J6Z8nZ}3@!ZSz5wyAxdgk}NIA|+ga!2Jy^zIFoktw7MY>D@@UXGl=pO}LGuR`+DWUH%W@ zQQYkACEQ4ahWlp;0SPq_N=1Y-mz+`D$d$oq+NMw(5VLa1sC7emuM1b|2g`2t0Fv z4qlo7-o?O7AZ6?Es7fy_{g+$iyU;55Ml^1f$qB-m{~X<`z^$@cXcc_Pj9X=| z&?OSo04iAT7AAvCt~l@1iQ0Y$AJ?o zvK+Va>;H$JWPnR|u_w-y^M$Q_W7HRq$3c6*2i^=g;v3@ zGuFomZQ?yKPU#@?qkB@gRg8pI!S4#z$M>`RCA12DtFAsyoBs-}g0H`Fs}u>Xf?rvy zkLyaJAy{zp@f%+CadI{kS_NMr;8xiov= 0.0) + { + return uniformValue; + } + + if (channel == 4) + { + return ToGrayScale(color); + } + + return color[channel]; + } + + fixed4 frag(v2f i) : SV_Target + { + fixed4 output; + + output.r = Sample(tex2D(_MetallicMap, i.uv), _MetallicMapChannel, _MetallicUniform); + output.g = Sample(tex2D(_OcclusionMap, i.uv), _OcclusionMapChannel, _OcclusionUniform); + output.b = Sample(tex2D(_EmissionMap, i.uv), _EmissionMapChannel, _EmissionUniform); + output.a = Sample(tex2D(_SmoothnessMap, i.uv), _SmoothnessMapChannel, _SmoothnessUniform); + + return output; + } + + ENDCG + } + } +} diff --git a/StandardAssets/Shaders/ChannelPacker.shader.meta b/StandardAssets/Shaders/ChannelPacker.shader.meta new file mode 100644 index 000000000..509a23562 --- /dev/null +++ b/StandardAssets/Shaders/ChannelPacker.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 34d5c2e145eeae143b9d14de17e74dc6 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Shaders/InvisibleShader.shader b/StandardAssets/Shaders/InvisibleShader.shader new file mode 100644 index 000000000..247de9106 --- /dev/null +++ b/StandardAssets/Shaders/InvisibleShader.shader @@ -0,0 +1,54 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +Shader "Mixed Reality Toolkit/InvisibleShader" { + + Subshader + { + Pass + { + GLSLPROGRAM + #ifdef VERTEX + void main() {} + #endif + + #ifdef FRAGMENT + void main() {} + #endif + ENDGLSL + } + } + + Subshader + { + Pass + { + CGPROGRAM + #pragma vertex vert + #pragma fragment frag + + #include "UnityCG.cginc" + + struct v2f + { + fixed4 position : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2f vert(appdata_base v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + o.position = fixed4(0,0,0,0); + return o; + } + + fixed4 frag() : COLOR + { + return fixed4(0,0,0,0); + } + ENDCG + } + } +} \ No newline at end of file diff --git a/StandardAssets/Shaders/InvisibleShader.shader.meta b/StandardAssets/Shaders/InvisibleShader.shader.meta new file mode 100644 index 000000000..49b49d0b4 --- /dev/null +++ b/StandardAssets/Shaders/InvisibleShader.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: f5b82901074242edbca22c38ca04c42e +timeCreated: 1510009044 +licenseType: Free +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Shaders/MixedRealityStandard.shader b/StandardAssets/Shaders/MixedRealityStandard.shader new file mode 100644 index 000000000..58b752362 --- /dev/null +++ b/StandardAssets/Shaders/MixedRealityStandard.shader @@ -0,0 +1,951 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +Shader "Mixed Reality Toolkit/Standard" +{ + Properties + { + // Main maps. + _Color("Color", Color) = (1.0, 1.0, 1.0, 1.0) + _MainTex("Albedo", 2D) = "white" {} + [Enum(AlbedoAlphaMode)] _AlbedoAlphaMode("Albedo Alpha Mode", Float) = 0 // "Transparency" + [Toggle] _AlbedoAssignedAtRuntime("Albedo Assigned at Runtime", Float) = 0.0 + _Cutoff("Alpha Cutoff", Range(0.0, 1.0)) = 0.5 + _Metallic("Metallic", Range(0.0, 1.0)) = 0.0 + _Smoothness("Smoothness", Range(0.0, 1.0)) = 0.5 + [Toggle(_CHANNEL_MAP)] _EnableChannelMap("Enable Channel Map", Float) = 0.0 + [NoScaleOffset] _ChannelMap("Channel Map", 2D) = "white" {} + [Toggle(_NORMAL_MAP)] _EnableNormalMap("Enable Normal Map", Float) = 0.0 + [NoScaleOffset] _NormalMap("Normal Map", 2D) = "bump" {} + _NormalMapScale("Scale", Float) = 1.0 + [Toggle(_EMISSION)] _EnableEmission("Enable Emission", Float) = 0.0 + [HDR]_EmissiveColor("Emissive Color", Color) = (0.0, 0.0, 0.0, 1.0) + [Toggle(_TRIPLANAR_MAPPING)] _EnableTriplanarMapping("Triplanar Mapping", Float) = 0.0 + [Toggle(_LOCAL_SPACE_TRIPLANAR_MAPPING)] _EnableLocalSpaceTriplanarMapping("Local Space", Float) = 0.0 + _TriplanarMappingBlendSharpness("Blend Sharpness", Range(1.0, 16.0)) = 4.0 + + // Rendering options. + [Toggle(_DIRECTIONAL_LIGHT)] _DirectionalLight("Directional Light", Float) = 1.0 + [Toggle(_SPECULAR_HIGHLIGHTS)] _SpecularHighlights("Specular Highlights", Float) = 1.0 + [Toggle(_SPHERICAL_HARMONICS)] _SphericalHarmonics("Spherical Harmonics", Float) = 0.0 + [Toggle(_REFLECTIONS)] _Reflections("Reflections", Float) = 0.0 + [Toggle(_REFRACTION)] _Refraction("Refraction", Float) = 0.0 + _RefractiveIndex("Refractive Index", Range(0.0, 3.0)) = 0.0 + [Toggle(_RIM_LIGHT)] _RimLight("Rim Light", Float) = 0.0 + _RimColor("Rim Color", Color) = (0.5, 0.5, 0.5, 1.0) + _RimPower("Rim Power", Range(0.0, 8.0)) = 0.25 + [Toggle(_VERTEX_COLORS)] _VertexColors("Vertex Colors", Float) = 0.0 + [Toggle(_CLIPPING_PLANE)] _ClippingPlane("Clipping Plane", Float) = 0.0 + [Toggle(_CLIPPING_SPHERE)] _ClippingSphere("Clipping Sphere", Float) = 0.0 + [Toggle(_CLIPPING_BOX)] _ClippingBox("Clipping Box", Float) = 0.0 + [Toggle(_CLIPPING_BORDER)] _ClippingBorder("Clipping Border", Float) = 0.0 + _ClippingBorderWidth("Clipping Border Width", Range(0.005, 1.0)) = 0.025 + _ClippingBorderColor("Clipping Border Color", Color) = (1.0, 0.2, 0.0, 1.0) + [Toggle(_NEAR_PLANE_FADE)] _NearPlaneFade("Near Plane Fade", Float) = 0.0 + _FadeBeginDistance("Fade Begin Distance", Range(0.01, 10.0)) = 0.85 + _FadeCompleteDistance("Fade Complete Distance", Range(0.01, 10.0)) = 0.5 + + // Fluent options. + [Toggle(_HOVER_LIGHT)] _HoverLight("Hover Light", Float) = 1.0 + [Toggle(_HOVER_COLOR_OVERRIDE)] _EnableHoverColorOverride("Hover Color Override", Float) = 0.0 + _HoverColorOverride("Hover Color Override", Color) = (1.0, 1.0, 1.0, 1.0) + [Toggle(_HOVER_LIGHT_OPAQUE)] _HoverLightOpaque("Hover Light Opaque", Float) = 0.0 + [Toggle(_HOVER_COLOR_OPAQUE_OVERRIDE)] _EnableHoverColorOpaqueOverride("Hover Color Opaque Override", Float) = 0.0 + _HoverColorOpaqueOverride("Hover Color Override for Transparent Pixels", Color) = (1.0, 1.0, 1.0, 1.0) + [Toggle(_ROUND_CORNERS)] _RoundCorners("Round Corners", Float) = 0.0 + _RoundCornerRadius("Round Corner Radius", Range(0.011, 0.5)) = 0.25 + _RoundCornerMargin("Round Corner Margin", Range(0.0, 0.5)) = 0.01 + [Toggle(_BORDER_LIGHT)] _BorderLight("Border Light", Float) = 0.0 + [Toggle(_BORDER_LIGHT_USES_HOVER_COLOR)] _BorderLightUsesHoverColor("Border Light Uses Hover Color", Float) = 1.0 + [Toggle(_BORDER_LIGHT_OPAQUE)] _BorderLightOpaque("Border Light Opaque", Float) = 0.0 + _BorderWidth("Border Width", Range(0.0, 1.0)) = 0.1 + _BorderMinValue("Border Min Value", Range(0.0, 1.0)) = 0.1 + _EdgeSmoothingValue("Edge Smoothing Value", Range(0.0001, 0.2)) = 0.002 + [Toggle(_INNER_GLOW)] _InnerGlow("Inner Glow", Float) = 0.0 + _InnerGlowColor("Inner Glow Color (RGB) and Intensity (A)", Color) = (1.0, 1.0, 1.0, 0.75) + [Toggle(_ENVIRONMENT_COLORING)] _EnvironmentColoring("Environment Coloring", Float) = 0.0 + _EnvironmentColorThreshold("Environment Color Threshold", Range(0.0, 3.0)) = 1.5 + _EnvironmentColorIntensity("Environment Color Intensity", Range(0.0, 1.0)) = 0.5 + _EnvironmentColorX("Environment Color X (RGB)", Color) = (1.0, 0.0, 0.0, 1.0) + _EnvironmentColorY("Environment Color Y (RGB)", Color) = (0.0, 1.0, 0.0, 1.0) + _EnvironmentColorZ("Environment Color Z (RGB)", Color) = (0.0, 0.0, 1.0, 1.0) + + // Advanced options. + [Enum(RenderingMode)] _Mode("Rendering Mode", Float) = 0 // "Opaque" + [Enum(CustomRenderingMode)] _CustomMode("Mode", Float) = 0 // "Opaque" + [Enum(UnityEngine.Rendering.BlendMode)] _SrcBlend("Source Blend", Float) = 1 // "One" + [Enum(UnityEngine.Rendering.BlendMode)] _DstBlend("Destination Blend", Float) = 0 // "Zero" + [Enum(UnityEngine.Rendering.BlendOp)] _BlendOp("Blend Operation", Float) = 0 // "Add" + [Enum(UnityEngine.Rendering.CompareFunction)] _ZTest("Depth Test", Float) = 4 // "LessEqual" + [Enum(DepthWrite)] _ZWrite("Depth Write", Float) = 1 // "On" + [Enum(UnityEngine.Rendering.ColorWriteMask)] _ColorWriteMask("Color Write Mask", Float) = 15 // "All" + [Enum(UnityEngine.Rendering.CullMode)] _CullMode("Cull Mode", Float) = 2 // "Back" + _RenderQueueOverride("Render Queue Override", Range(-1.0, 5000)) = -1 + [Toggle(_INSTANCED_COLOR)] _InstancedColor("Instanced Color", Float) = 0.0 + [Toggle(_STENCIL)] _Stencil("Enable Stencil Testing", Float) = 0.0 + _StencilReference("Stencil Reference", Range(0, 255)) = 0 + [Enum(UnityEngine.Rendering.CompareFunction)]_StencilComparison("Stencil Comparison", Int) = 0 + [Enum(UnityEngine.Rendering.StencilOp)]_StencilOperation("Stencil Operation", Int) = 0 + } + + SubShader + { + // Extracts information for lightmapping, GI (emission, albedo, ...) + // This pass it not used during regular rendering. + Pass + { + Name "Meta" + Tags { "LightMode" = "Meta" } + + CGPROGRAM + + #pragma vertex vert + #pragma fragment frag + + #pragma shader_feature _EMISSION + #pragma shader_feature _CHANNEL_MAP + + #include "UnityCG.cginc" + #include "UnityMetaPass.cginc" + + struct v2f + { + float4 vertex : SV_POSITION; + float2 uv : TEXCOORD0; + }; + + float4 _MainTex_ST; + + v2f vert(appdata_full v) + { + v2f o; + o.vertex = UnityMetaVertexPosition(v.vertex, v.texcoord1.xy, v.texcoord2.xy, unity_LightmapST, unity_DynamicLightmapST); + o.uv = TRANSFORM_TEX(v.texcoord, _MainTex); + + return o; + } + + sampler2D _MainTex; + sampler2D _ChannelMap; + + fixed4 _Color; + fixed4 _EmissiveColor; + fixed4 _LightColor0; + + half4 frag(v2f i) : SV_Target + { + UnityMetaInput output; + UNITY_INITIALIZE_OUTPUT(UnityMetaInput, output); + + output.Albedo = tex2D(_MainTex, i.uv) * _Color; +#if defined(_EMISSION) +#if defined(_CHANNEL_MAP) + output.Emission += tex2D(_ChannelMap, i.uv).b * _EmissiveColor; +#else + output.Emission += _EmissiveColor; +#endif +#endif + output.SpecularColor = _LightColor0.rgb; + + return UnityMetaFragment(output); + } + ENDCG + } + + Pass + { + Name "Main" + Tags{ "RenderType" = "Opaque" "LightMode" = "ForwardBase" "PerformanceChecks" = "False" } + LOD 100 + Blend[_SrcBlend][_DstBlend] + BlendOp[_BlendOp] + ZTest[_ZTest] + ZWrite[_ZWrite] + Cull[_CullMode] + ColorMask[_ColorWriteMask] + + Stencil + { + Ref[_StencilReference] + Comp[_StencilComparison] + Pass[_StencilOperation] + } + + CGPROGRAM + +#if defined(SHADER_API_D3D11) + #pragma target 5.0 +#endif + #pragma vertex vert + #pragma fragment frag + + #pragma multi_compile_instancing + #pragma multi_compile _ LIGHTMAP_ON + #pragma multi_compile _ UNITY_COLORSPACE_GAMMA + #pragma multi_compile _ _MULTI_HOVER_LIGHT + + #pragma shader_feature _ _ALPHATEST_ON _ALPHABLEND_ON + #pragma shader_feature _DISABLE_ALBEDO_MAP + #pragma shader_feature _ _METALLIC_TEXTURE_ALBEDO_CHANNEL_A _SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A + #pragma shader_feature _CHANNEL_MAP + #pragma shader_feature _NORMAL_MAP + #pragma shader_feature _EMISSION + #pragma shader_feature _TRIPLANAR_MAPPING + #pragma shader_feature _LOCAL_SPACE_TRIPLANAR_MAPPING + #pragma shader_feature _DIRECTIONAL_LIGHT + #pragma shader_feature _SPECULAR_HIGHLIGHTS + #pragma shader_feature _SPHERICAL_HARMONICS + #pragma shader_feature _REFLECTIONS + #pragma shader_feature _REFRACTION + #pragma shader_feature _RIM_LIGHT + #pragma shader_feature _VERTEX_COLORS + #pragma shader_feature _CLIPPING_PLANE + #pragma shader_feature _CLIPPING_SPHERE + #pragma shader_feature _CLIPPING_BOX + #pragma shader_feature _CLIPPING_BORDER + #pragma shader_feature _NEAR_PLANE_FADE + #pragma shader_feature _HOVER_LIGHT + #pragma shader_feature _HOVER_COLOR_OVERRIDE + #pragma shader_feature _HOVER_LIGHT_OPAQUE + #pragma shader_feature _HOVER_COLOR_OPAQUE_OVERRIDE + #pragma shader_feature _ROUND_CORNERS + #pragma shader_feature _BORDER_LIGHT + #pragma shader_feature _BORDER_LIGHT_USES_HOVER_COLOR + #pragma shader_feature _BORDER_LIGHT_OPAQUE + #pragma shader_feature _INNER_GLOW + #pragma shader_feature _ENVIRONMENT_COLORING + #pragma shader_feature _INSTANCED_COLOR + + #define IF(a, b, c) lerp(b, c, step((fixed) (a), 0.0)); + + #include "UnityCG.cginc" + #include "UnityStandardConfig.cginc" + #include "UnityStandardUtils.cginc" + +#if defined(_TRIPLANAR_MAPPING) || defined(_DIRECTIONAL_LIGHT) || defined(_SPHERICAL_HARMONICS) || defined(_REFLECTIONS) || defined(_RIM_LIGHT) || defined(_ENVIRONMENT_COLORING) + #define _NORMAL +#else + #undef _NORMAL +#endif + +#if defined(_CLIPPING_PLANE) || defined(_CLIPPING_SPHERE) || defined(_CLIPPING_BOX) + #define _CLIPPING_PRIMITIVE +#else + #undef _CLIPPING_PRIMITIVE +#endif + +#if defined(_NORMAL) || defined(_CLIPPING_PRIMITIVE) || defined(_NEAR_PLANE_FADE) || defined(_HOVER_LIGHT) + #define _WORLD_POSITION +#else + #undef _WORLD_POSITION +#endif + +#if defined(_ALPHATEST_ON) || defined(_CLIPPING_PRIMITIVE) || defined(_ROUND_CORNERS) + #define _ALPHA_CLIP +#else + #undef _ALPHA_CLIP +#endif + +#if defined(_ALPHABLEND_ON) + #define _TRANSPARENT + #undef _ALPHA_CLIP +#else + #undef _TRANSPARENT +#endif + +#if defined(_ROUND_CORNERS) || defined(_BORDER_LIGHT) + #define _SCALE +#else + #undef _SCALE +#endif + +#if defined(_DIRECTIONAL_LIGHT) || defined(_RIM_LIGHT) + #define _FRESNEL +#else + #undef _FRESNEL +#endif + +#if defined(_ROUND_CORNERS) || defined(_BORDER_LIGHT) || defined(_INNER_GLOW) + #define _DISTANCE_TO_EDGE +#else + #undef _DISTANCE_TO_EDGE +#endif + +#if !defined(_DISABLE_ALBEDO_MAP) || defined(_TRIPLANAR_MAPPING) || defined(_CHANNEL_MAP) || defined(_NORMAL_MAP) || defined(_DISTANCE_TO_EDGE) + #define _UV +#else + #undef _UV +#endif + + struct appdata_t + { + float4 vertex : POSITION; + float2 uv : TEXCOORD0; +#if defined(LIGHTMAP_ON) + float2 lightMapUV : TEXCOORD1; +#endif +#if defined(_VERTEX_COLORS) + fixed4 color : COLOR; +#endif + fixed3 normal : NORMAL; +#if defined(_NORMAL_MAP) + fixed4 tangent : TANGENT; +#endif + UNITY_VERTEX_INPUT_INSTANCE_ID + }; + + struct v2f + { + float4 position : SV_POSITION; +#if defined(_BORDER_LIGHT) + float4 uv : TEXCOORD0; +#elif defined(_UV) + float2 uv : TEXCOORD0; +#endif +#if defined(LIGHTMAP_ON) + float2 lightMapUV : TEXCOORD1; +#endif +#if defined(_VERTEX_COLORS) + fixed4 color : COLOR; +#endif +#if defined(_WORLD_POSITION) +#if defined(_NEAR_PLANE_FADE) + float4 worldPosition : TEXCOORD2; +#else + float3 worldPosition : TEXCOORD2; +#endif +#endif +#if defined(_SCALE) + float3 scale : TEXCOORD3; +#endif +#if defined(_NORMAL) +#if defined(_TRIPLANAR_MAPPING) + fixed3 worldNormal : TEXCOORD4; + fixed3 triplanarNormal : TEXCOORD5; + float3 triplanarPosition : TEXCOORD6; +#elif defined(_NORMAL_MAP) + fixed3 tangentX : TEXCOORD4; + fixed3 tangentY : TEXCOORD5; + fixed3 tangentZ : TEXCOORD6; +#else + fixed3 worldNormal : TEXCOORD4; +#endif +#endif + UNITY_VERTEX_OUTPUT_STEREO +#if defined(_INSTANCED_COLOR) + UNITY_VERTEX_INPUT_INSTANCE_ID +#endif + }; + +#if defined(_INSTANCED_COLOR) + UNITY_INSTANCING_BUFFER_START(Props) + UNITY_DEFINE_INSTANCED_PROP(float4, _Color) + UNITY_INSTANCING_BUFFER_END(Props) +#else + fixed4 _Color; +#endif + sampler2D _MainTex; + fixed4 _MainTex_ST; + +#if defined(_ALPHA_CLIP) + fixed _Cutoff; +#endif + + fixed _Metallic; + fixed _Smoothness; + +#if defined(_CHANNEL_MAP) + sampler2D _ChannelMap; +#endif + +#if defined(_NORMAL_MAP) + sampler2D _NormalMap; + float _NormalMapScale; +#endif + +#if defined(_EMISSION) + fixed4 _EmissiveColor; +#endif + +#if defined(_TRIPLANAR_MAPPING) + float _TriplanarMappingBlendSharpness; +#endif + +#if defined(_DIRECTIONAL_LIGHT) + fixed4 _LightColor0; +#endif + +#if defined(_REFRACTION) + fixed _RefractiveIndex; +#endif + +#if defined(_RIM_LIGHT) + fixed3 _RimColor; + fixed _RimPower; +#endif + +#if defined(_CLIPPING_PLANE) + fixed _ClipPlaneSide; + float4 _ClipPlane; +#endif + +#if defined(_CLIPPING_SPHERE) + fixed _ClipSphereSide; + float4 _ClipSphere; +#endif + +#if defined(_CLIPPING_BOX) + fixed _ClipBoxSide; + float4 _ClipBoxSize; + float4x4 _ClipBoxInverseTransform; +#endif + +#if defined(_CLIPPING_BORDER) + fixed _ClippingBorderWidth; + fixed3 _ClippingBorderColor; +#endif + +#if defined(_NEAR_PLANE_FADE) + float _FadeBeginDistance; + float _FadeCompleteDistance; +#endif + +#if defined(_HOVER_LIGHT) +#if defined(_MULTI_HOVER_LIGHT) +#define HOVER_LIGHT_COUNT 3 +#else +#define HOVER_LIGHT_COUNT 1 +#endif +#define HOVER_LIGHT_DATA_SIZE 2 + float4 _HoverLightData[HOVER_LIGHT_COUNT * HOVER_LIGHT_DATA_SIZE]; +#if defined(_HOVER_COLOR_OVERRIDE) + fixed3 _HoverColorOverride; +#endif +#if defined(_HOVER_COLOR_OPAQUE_OVERRIDE) + fixed3 _HoverColorOpaqueOverride; +#endif +#endif + +#if defined(_ROUND_CORNERS) + fixed _RoundCornerRadius; + fixed _RoundCornerMargin; +#endif + +#if defined(_BORDER_LIGHT) + fixed _BorderWidth; + fixed _BorderMinValue; +#endif + +#if defined(_ROUND_CORNERS) || defined(_BORDER_LIGHT) + fixed _EdgeSmoothingValue; +#endif + +#if defined(_INNER_GLOW) + fixed4 _InnerGlowColor; +#endif + +#if defined(_ENVIRONMENT_COLORING) + fixed _EnvironmentColorThreshold; + fixed _EnvironmentColorIntensity; + fixed3 _EnvironmentColorX; + fixed3 _EnvironmentColorY; + fixed3 _EnvironmentColorZ; +#endif + +#if defined(_DIRECTIONAL_LIGHT) + static const fixed _MinMetallicLightContribution = 0.7; + static const fixed _IblContribution = 0.1; +#endif + +#if defined(_SPECULAR_HIGHLIGHTS) + static const fixed _Shininess = 800.0; +#endif + +#if defined(_FRESNEL) + static const fixed _FresnelPower = 8.0; +#endif + +#if defined(_BORDER_LIGHT) + static const fixed _BorderPower = 10.0; + static const fixed _InverseBorderPower = 1.0 / _BorderPower; +#endif + +#if defined(_HOVER_LIGHT) + inline fixed HoverLight(float4 hoverLight, float3 worldPosition, float alpha) + { + return (1.0 - saturate(length(hoverLight.xyz - worldPosition) / hoverLight.w)) * alpha; + } +#endif + +#if defined(_CLIPPING_PLANE) + inline float PointVsPlane(float3 worldPosition, float4 plane) + { + float3 planePosition = plane.xyz * plane.w; + return dot(worldPosition - planePosition, plane.xyz); + } +#endif + +#if defined(_CLIPPING_SPHERE) + inline float PointVsSphere(float3 worldPosition, float4 sphere) + { + return distance(worldPosition, sphere.xyz) - sphere.w; + } +#endif + +#if defined(_CLIPPING_BOX) + inline float PointVsBox(float3 worldPosition, float3 boxSize, float4x4 boxInverseTransform) + { + float3 distance = abs(mul(boxInverseTransform, float4(worldPosition, 1.0))) - boxSize; + return length(max(distance, 0.0)) + min(max(distance.x, max(distance.y, distance.z)), 0.0); + } +#endif + +#if defined(_ROUND_CORNERS) + inline fixed RoundCorners(fixed2 position, fixed2 cornerCircleDistance, fixed cornerCircleRadius) + { + fixed distance = length(max(abs(position) - cornerCircleDistance, 0.0)) - cornerCircleRadius; + +#if defined(_TRANSPARENT) + return smoothstep(1.0, 0.0, distance / _EdgeSmoothingValue); +#else + return (distance < 0.0); +#endif + } +#endif + v2f vert(appdata_t v) + { + v2f o; + UNITY_SETUP_INSTANCE_ID(v); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); +#if defined(_INSTANCED_COLOR) + UNITY_TRANSFER_INSTANCE_ID(v, o); +#endif + o.position = UnityObjectToClipPos(v.vertex); + +#if defined(_WORLD_POSITION) + o.worldPosition.xyz = mul(unity_ObjectToWorld, v.vertex).xyz; +#endif + +#if defined(_NEAR_PLANE_FADE) + float rangeInverse = 1.0 / (_FadeBeginDistance - _FadeCompleteDistance); + float distanceToCamera = -UnityObjectToViewPos(v.vertex.xyz).z; + o.worldPosition.w = saturate(mad(distanceToCamera, rangeInverse, -_FadeCompleteDistance * rangeInverse)); +#endif + +#if defined(_SCALE) + o.scale.x = length(mul(unity_ObjectToWorld, float4(1.0, 0.0, 0.0, 0.0))); + o.scale.y = length(mul(unity_ObjectToWorld, float4(0.0, 1.0, 0.0, 0.0))); + o.scale.z = length(mul(unity_ObjectToWorld, float4(0.0, 0.0, 1.0, 0.0))); +#endif + +#if defined(_BORDER_LIGHT) || defined(_ROUND_CORNERS) + o.uv.xy = TRANSFORM_TEX(v.uv, _MainTex); + + float minScale = min(min(o.scale.x, o.scale.y), o.scale.z); + +#if defined(_BORDER_LIGHT) + float maxScale = max(max(o.scale.x, o.scale.y), o.scale.z); + float minOverMiddleScale = minScale / (o.scale.x + o.scale.y + o.scale.z - minScale - maxScale); + + float areaYZ = o.scale.y * o.scale.z; + float areaXZ = o.scale.z * o.scale.x; + float areaXY = o.scale.x * o.scale.y; + + float borderWidth = _BorderWidth; +#endif + + if (abs(v.normal.x) == 1.0) // Y,Z plane. + { + o.scale.x = o.scale.z; + o.scale.y = o.scale.y; + +#if defined(_BORDER_LIGHT) + if (areaYZ > areaXZ && areaYZ > areaXY) + { + borderWidth *= minOverMiddleScale; + } +#endif + } + else if (abs(v.normal.y) == 1.0) // X,Z plane. + { + o.scale.x = o.scale.x; + o.scale.y = o.scale.z; + +#if defined(_BORDER_LIGHT) + if (areaXZ > areaXY && areaXZ > areaYZ) + { + borderWidth *= minOverMiddleScale; + } +#endif + } + else // X,Y plane. + { + o.scale.x = o.scale.x; + o.scale.y = o.scale.y; + +#if defined(_BORDER_LIGHT) + if (areaXY > areaYZ && areaXY > areaXZ) + { + borderWidth *= minOverMiddleScale; + } +#endif + } + + o.scale.z = minScale; + +#if defined(_BORDER_LIGHT) + float scaleRatio = min(o.scale.x, o.scale.y) / max(o.scale.x, o.scale.y); + o.uv.z = IF(o.scale.x > o.scale.y, 1.0 - (borderWidth * scaleRatio), 1.0 - borderWidth); + o.uv.w = IF(o.scale.x > o.scale.y, 1.0 - borderWidth, 1.0 - (borderWidth * scaleRatio)); +#endif +#elif defined(_UV) + o.uv = TRANSFORM_TEX(v.uv, _MainTex); +#endif + +#if defined(LIGHTMAP_ON) + o.lightMapUV.xy = v.lightMapUV.xy * unity_LightmapST.xy + unity_LightmapST.zw; +#endif + +#if defined(_VERTEX_COLORS) + o.color = v.color; +#endif + +#if defined(_NORMAL) + fixed3 worldNormal = UnityObjectToWorldNormal(v.normal); + +#if defined(_TRIPLANAR_MAPPING) + o.worldNormal = worldNormal; +#if defined(_LOCAL_SPACE_TRIPLANAR_MAPPING) + o.triplanarNormal = v.normal; + o.triplanarPosition = v.vertex; +#else + o.triplanarNormal = worldNormal; + o.triplanarPosition = o.worldPosition; +#endif +#elif defined(_NORMAL_MAP) + fixed3 worldTangent = UnityObjectToWorldDir(v.tangent.xyz); + fixed tangentSign = v.tangent.w * unity_WorldTransformParams.w; + fixed3 worldBitangent = cross(worldNormal, worldTangent) * tangentSign; + o.tangentX = fixed3(worldTangent.x, worldBitangent.x, worldNormal.x); + o.tangentY = fixed3(worldTangent.y, worldBitangent.y, worldNormal.y); + o.tangentZ = fixed3(worldTangent.z, worldBitangent.z, worldNormal.z); +#else + o.worldNormal = worldNormal; +#endif +#endif + + return o; + } + +#if defined(SHADER_API_D3D11) && !defined(_ALPHA_CLIP) && !defined(_TRANSPARENT) + [earlydepthstencil] +#endif + fixed4 frag(v2f i) : SV_Target + { +#if defined(_INSTANCED_COLOR) + UNITY_SETUP_INSTANCE_ID(i); +#endif + +#if defined(_TRIPLANAR_MAPPING) + // Calculate triplanar uvs and apply texture scale and offset values like TRANSFORM_TEX. + fixed3 triplanarBlend = pow(abs(i.triplanarNormal), _TriplanarMappingBlendSharpness); + triplanarBlend /= dot(triplanarBlend, fixed3(1.0, 1.0, 1.0)); + float2 uvX = i.triplanarPosition.zy * _MainTex_ST.xy + _MainTex_ST.zw; + float2 uvY = i.triplanarPosition.xz * _MainTex_ST.xy + _MainTex_ST.zw; + float2 uvZ = i.triplanarPosition.xy * _MainTex_ST.xy + _MainTex_ST.zw; + + // Ternary operator is 2 instructions faster than sign() when we don't care about zero returning a zero sign. + float3 axisSign = i.triplanarNormal < 0 ? -1 : 1; + uvX.x *= axisSign.x; + uvY.x *= axisSign.y; + uvZ.x *= -axisSign.z; +#endif + + // Texturing. +#if defined(_DISABLE_ALBEDO_MAP) + fixed4 albedo = fixed4(1.0, 1.0, 1.0, 1.0); +#else +#if defined(_TRIPLANAR_MAPPING) + fixed4 albedo = tex2D(_MainTex, uvX) * triplanarBlend.x + + tex2D(_MainTex, uvY) * triplanarBlend.y + + tex2D(_MainTex, uvZ) * triplanarBlend.z; +#else + fixed4 albedo = tex2D(_MainTex, i.uv); +#endif +#endif + +#ifdef LIGHTMAP_ON + albedo.rgb *= DecodeLightmap(UNITY_SAMPLE_TEX2D(unity_Lightmap, i.lightMapUV)); +#endif + +#if defined(_CHANNEL_MAP) + fixed4 channel = tex2D(_ChannelMap, i.uv); + _Metallic = channel.r; + albedo.rgb *= channel.g; + _Smoothness = channel.a; +#else +#if defined(_METALLIC_TEXTURE_ALBEDO_CHANNEL_A) + _Metallic = albedo.a; + albedo.a = 1.0; +#elif defined(_SMOOTHNESS_TEXTURE_ALBEDO_CHANNEL_A) + _Smoothness = albedo.a; + albedo.a = 1.0; +#endif +#endif + // Primitive clipping. +#if defined(_CLIPPING_PRIMITIVE) + float primitiveDistance = 1.0; +#if defined(_CLIPPING_PLANE) + primitiveDistance = min(primitiveDistance, PointVsPlane(i.worldPosition.xyz, _ClipPlane) * _ClipPlaneSide); +#endif +#if defined(_CLIPPING_SPHERE) + primitiveDistance = min(primitiveDistance, PointVsSphere(i.worldPosition.xyz, _ClipSphere) * _ClipSphereSide); +#endif +#if defined(_CLIPPING_BOX) + primitiveDistance = min(primitiveDistance, PointVsBox(i.worldPosition.xyz, _ClipBoxSize.xyz, _ClipBoxInverseTransform) * _ClipBoxSide); +#endif +#if defined(_CLIPPING_BORDER) + fixed3 primitiveBorderColor = lerp(_ClippingBorderColor, fixed3(0.0, 0.0, 0.0), primitiveDistance / _ClippingBorderWidth); + albedo.rgb += primitiveBorderColor * ((primitiveDistance < _ClippingBorderWidth) ? 1.0 : 0.0); +#endif +#if defined(_ALPHA_CLIP) + albedo *= (primitiveDistance > 0.0); +#else + albedo *= saturate(primitiveDistance); +#endif +#endif + +#if defined(_DISTANCE_TO_EDGE) + fixed2 distanceToEdge; + distanceToEdge.x = abs(i.uv.x - 0.5) * 2.0; + distanceToEdge.y = abs(i.uv.y - 0.5) * 2.0; +#endif + + // Rounded corner clipping. +#if defined(_ROUND_CORNERS) + fixed2 halfScale = i.scale.xy * 0.5; + fixed2 roundCornerPosition = distanceToEdge * halfScale; + + fixed cornerCircleRadius = saturate(_RoundCornerRadius - _RoundCornerMargin) * i.scale.z; + fixed2 cornerCircleDistance = halfScale - (_RoundCornerMargin * i.scale.z) - cornerCircleRadius; + + fixed roundCornerClip = RoundCorners(roundCornerPosition, cornerCircleDistance, cornerCircleRadius); +#endif + +#if defined(_INSTANCED_COLOR) + albedo *= UNITY_ACCESS_INSTANCED_PROP(Props, _Color); +#else + albedo *= _Color; +#endif + +#if defined(_VERTEX_COLORS) + albedo *= i.color; +#endif + + // Hover light. +#if defined(_HOVER_LIGHT) + fixed pointToHover = 0.0; + fixed3 hoverColor = fixed3(0.0, 0.0, 0.0); + [unroll] + for (int lightIndex = 0; lightIndex < HOVER_LIGHT_COUNT; ++lightIndex) + { + int dataIndex = lightIndex * HOVER_LIGHT_DATA_SIZE; + fixed hoverValue = HoverLight(_HoverLightData[dataIndex], i.worldPosition.xyz, _HoverLightData[dataIndex + 1].a); + pointToHover += hoverValue; + hoverColor += lerp(fixed3(0.0, 0.0, 0.0), _HoverLightData[dataIndex + 1].rgb, hoverValue); + } +#if defined(_HOVER_COLOR_OVERRIDE) + hoverColor = _HoverColorOverride.rgb; +#endif +#if defined(_HOVER_LIGHT_OPAQUE) +#if defined(_HOVER_COLOR_OPAQUE_OVERRIDE) + hoverColor = lerp(_HoverColorOpaqueOverride, hoverColor, albedo.a); +#endif + fixed baseBlend = 1.0 + (albedo.a - 1.0) * saturate(pointToHover / (pointToHover + albedo.a)); + albedo.rgb += -(1.0 - baseBlend) * albedo.rgb + hoverColor * max(pointToHover, 1.0 - baseBlend); + albedo.a = (albedo.a + pointToHover); +#else + albedo.rgb = saturate(albedo.rgb + hoverColor * pointToHover); +#endif +#endif + + // Border light. +#if defined(_BORDER_LIGHT) + fixed3 borderColor = albedo.rgb * _BorderPower; +#if defined(_HOVER_LIGHT) +#if defined(_BORDER_LIGHT_USES_HOVER_COLOR) + borderColor *= hoverColor; +#endif +#else + fixed pointToHover = 1.0; +#endif + fixed borderValue; +#if defined(_ROUND_CORNERS) + fixed borderMargin = _RoundCornerMargin + _BorderWidth * 0.5; + cornerCircleRadius = saturate(_RoundCornerRadius - borderMargin) * i.scale.z; + cornerCircleDistance = halfScale - (borderMargin * i.scale.z) - cornerCircleRadius; + + borderValue = 1.0 - RoundCorners(roundCornerPosition, cornerCircleDistance, cornerCircleRadius); +#else + borderValue = max(smoothstep(i.uv.z - _EdgeSmoothingValue, i.uv.z + _EdgeSmoothingValue, distanceToEdge.x), + smoothstep(i.uv.w - _EdgeSmoothingValue, i.uv.w + _EdgeSmoothingValue, distanceToEdge.y)); +#endif + borderColor = borderColor * borderValue * max(_BorderMinValue * _InverseBorderPower, pointToHover); + albedo.rgb += borderColor; +#if defined(_BORDER_LIGHT_OPAQUE) + albedo.a = max(albedo.a, borderValue); +#endif +#endif + +#if defined(_ROUND_CORNERS) + albedo *= roundCornerClip; +#endif + +#if defined(_ALPHA_CLIP) +#if !defined(_ALPHATEST_ON) + _Cutoff = 0.5; +#endif + clip(albedo.a - _Cutoff); + albedo.a = 1.0; +#endif + +#if defined(_NORMAL) + fixed3 worldViewDir = normalize(UnityWorldSpaceViewDir(i.worldPosition.xyz)); +#if defined(_REFLECTIONS) || defined(_ENVIRONMENT_COLORING) + fixed3 incident = -worldViewDir; +#endif + fixed3 worldNormal; + + // Normal calculation. +#if defined(_NORMAL_MAP) +#if defined(_TRIPLANAR_MAPPING) + fixed3 tangentNormalX = UnpackScaleNormal(tex2D(_NormalMap, uvX), _NormalMapScale); + fixed3 tangentNormalY = UnpackScaleNormal(tex2D(_NormalMap, uvY), _NormalMapScale); + fixed3 tangentNormalZ = UnpackScaleNormal(tex2D(_NormalMap, uvZ), _NormalMapScale); + tangentNormalX.x *= axisSign.x; + tangentNormalY.x *= axisSign.y; + tangentNormalZ.x *= -axisSign.z; + + // Swizzle world normals to match tangent space and apply Whiteout normal blend. + tangentNormalX = fixed3(tangentNormalX.xy + i.worldNormal.zy, tangentNormalX.z * i.worldNormal.x); + tangentNormalY = fixed3(tangentNormalY.xy + i.worldNormal.xz, tangentNormalY.z * i.worldNormal.y); + tangentNormalZ = fixed3(tangentNormalZ.xy + i.worldNormal.xy, tangentNormalZ.z * i.worldNormal.z); + + // Swizzle tangent normals to match world normal and blend together. + worldNormal = normalize(tangentNormalX.zyx * triplanarBlend.x + + tangentNormalY.xzy * triplanarBlend.y + + tangentNormalZ.xyz * triplanarBlend.z); +#else + fixed3 tangentNormal = UnpackScaleNormal(tex2D(_NormalMap, i.uv), _NormalMapScale); + worldNormal.x = dot(i.tangentX, tangentNormal); + worldNormal.y = dot(i.tangentY, tangentNormal); + worldNormal.z = dot(i.tangentZ, tangentNormal); + worldNormal = normalize(worldNormal); +#endif +#else + worldNormal = normalize(i.worldNormal); +#endif +#endif + + // Blinn phong lighting. +#if defined(_DIRECTIONAL_LIGHT) + fixed diffuse = max(0.0, dot(worldNormal, _WorldSpaceLightPos0)); + +#if defined(_SPECULAR_HIGHLIGHTS) + fixed halfVector = max(0.0, dot(worldNormal, normalize(_WorldSpaceLightPos0 + worldViewDir))); + fixed specular = saturate(pow(halfVector, _Shininess * pow(_Smoothness, 4.0)) * _Smoothness * 0.5); +#else + fixed specular = 0.0; +#endif +#endif + + // Image based lighting (attempt to mimic the Standard shader). +#if defined(_REFLECTIONS) + fixed3 worldReflection = reflect(incident, worldNormal); + fixed4 iblData = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, worldReflection, (1.0 - _Smoothness) * UNITY_SPECCUBE_LOD_STEPS); + fixed3 ibl = DecodeHDR(iblData, unity_SpecCube0_HDR); +#if defined(_REFRACTION) + fixed4 refractColor = UNITY_SAMPLE_TEXCUBE(unity_SpecCube0, refract(incident, worldNormal, _RefractiveIndex)); + ibl *= DecodeHDR(refractColor, unity_SpecCube0_HDR); +#endif +#else + fixed3 ibl = unity_IndirectSpecColor.rgb; +#endif + + // Fresnel lighting. +#if defined(_FRESNEL) + fixed fresnel = 1.0 - saturate(abs(dot(worldViewDir, worldNormal))); +#if defined(_RIM_LIGHT) + fixed3 fresnelColor = _RimColor * pow(fresnel, _RimPower); +#else + fixed3 fresnelColor = unity_IndirectSpecColor.rgb * (pow(fresnel, _FresnelPower) * max(_Smoothness, 0.5)); +#endif +#endif + // Final lighting mix. + fixed4 output = albedo; +#if defined(_SPHERICAL_HARMONICS) + fixed3 ambient = ShadeSH9(float4(worldNormal, 1.0)); +#else + fixed3 ambient = glstate_lightmodel_ambient + fixed3(0.25, 0.25, 0.25); +#endif + fixed minProperty = min(_Smoothness, _Metallic); +#if defined(_DIRECTIONAL_LIGHT) + fixed oneMinusMetallic = (1.0 - _Metallic); + output.rgb = lerp(output.rgb, ibl, minProperty); + output.rgb *= lerp((ambient + _LightColor0.rgb * diffuse + _LightColor0.rgb * specular) * max(oneMinusMetallic, _MinMetallicLightContribution), albedo, minProperty); + output.rgb += (_LightColor0.rgb * albedo * specular) + (_LightColor0.rgb * specular * _Smoothness); + output.rgb += ibl * oneMinusMetallic * _IblContribution; +#elif defined(_REFLECTIONS) + output.rgb = lerp(output.rgb, ibl, minProperty); + output.rgb *= lerp(ambient, albedo, minProperty); +#elif defined(_SPHERICAL_HARMONICS) + output.rgb *= ambient; +#endif + +#if defined(_FRESNEL) +#if defined(_RIM_LIGHT) || !defined(_REFLECTIONS) + output.rgb += fresnelColor; +#else + output.rgb += fresnelColor * (1.0 - minProperty); +#endif +#endif + +#if defined(_EMISSION) +#if defined(_CHANNEL_MAP) + output.rgb += _EmissiveColor * channel.b; +#else + output.rgb += _EmissiveColor; +#endif +#endif + + // Inner glow. +#if defined(_INNER_GLOW) + fixed2 uvGlow = (i.uv - fixed2(0.5, 0.5)) * (_InnerGlowColor.a * 2.0); + uvGlow = uvGlow * uvGlow; + uvGlow = uvGlow * uvGlow; + output.rgb += lerp(fixed3(0.0, 0.0, 0.0), _InnerGlowColor.rgb, uvGlow.x + uvGlow.y); +#endif + + // Environment coloring. +#if defined(_ENVIRONMENT_COLORING) + fixed3 environmentColor = incident.x * incident.x * _EnvironmentColorX + + incident.y * incident.y * _EnvironmentColorY + + incident.z * incident.z * _EnvironmentColorZ; + output.rgb += environmentColor * max(0.0, dot(incident, worldNormal) + _EnvironmentColorThreshold) * _EnvironmentColorIntensity; + +#endif + +#if defined(_NEAR_PLANE_FADE) + output *= i.worldPosition.w; +#endif + + return output; + } + + ENDCG + } + } + + FallBack "VertexLit" + CustomEditor "XRTK.Inspectors.MixedRealityStandardShaderGUI" +} diff --git a/StandardAssets/Shaders/MixedRealityStandard.shader.meta b/StandardAssets/Shaders/MixedRealityStandard.shader.meta new file mode 100644 index 000000000..95b55ab5b --- /dev/null +++ b/StandardAssets/Shaders/MixedRealityStandard.shader.meta @@ -0,0 +1,10 @@ +fileFormatVersion: 2 +guid: 0b71556ee0d248e2853be63d4be8bc3e +timeCreated: 1519154700 +licenseType: Pro +ShaderImporter: + externalObjects: {} + defaultTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Shaders/XRTK_Wireframe.shader b/StandardAssets/Shaders/XRTK_Wireframe.shader new file mode 100644 index 000000000..648b3300e --- /dev/null +++ b/StandardAssets/Shaders/XRTK_Wireframe.shader @@ -0,0 +1,122 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. See LICENSE in the project root for license information. + +/// +/// Basic wireframe shader that can be used for rendering spatial mapping meshes. +/// +Shader "Mixed Reality Toolkit/Wireframe" +{ + Properties + { + _BaseColor("Base color", Color) = (0.0, 0.0, 0.0, 1.0) + _WireColor("Wire color", Color) = (1.0, 1.0, 1.0, 1.0) + _WireThickness("Wire thickness", Range(0, 800)) = 100 + } + SubShader + { + Tags { "RenderType" = "Opaque" } + + Pass + { + Offset 50, 100 + + CGPROGRAM + #pragma vertex vert + #pragma geometry geom + #pragma fragment frag + + // We only target the HoloLens (and the Unity editor), so take advantage of shader model 5. + #pragma target 5.0 + #pragma only_renderers d3d11 + + #include "UnityCG.cginc" + + float4 _BaseColor; + float4 _WireColor; + float _WireThickness; + + // Based on approach described in Shader-Based Wireframe Drawing (2008) + // http://orbit.dtu.dk/en/publications/id(13e2122d-bec7-48de-beca-03ce6ea1c3f1).html + + struct v2g + { + float4 viewPos : SV_POSITION; + UNITY_VERTEX_OUTPUT_STEREO + }; + + v2g vert(appdata_base v) + { + UNITY_SETUP_INSTANCE_ID(v); + v2g o; + o.viewPos = UnityObjectToClipPos(v.vertex); + UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); + return o; + } + + // inverseW is to counteract the effect of perspective-correct interpolation so that the lines + // look the same thickness regardless of their depth in the scene. + struct g2f + { + float4 viewPos : SV_POSITION; + float inverseW : TEXCOORD0; + float3 dist : TEXCOORD1; + UNITY_VERTEX_OUTPUT_STEREO + }; + + [maxvertexcount(3)] + void geom(triangle v2g i[3], inout TriangleStream triStream) + { + // Calculate the vectors that define the triangle from the input points. + float2 point0 = i[0].viewPos.xy / i[0].viewPos.w; + float2 point1 = i[1].viewPos.xy / i[1].viewPos.w; + float2 point2 = i[2].viewPos.xy / i[2].viewPos.w; + + // Calculate the area of the triangle. + float2 vector0 = point2 - point1; + float2 vector1 = point2 - point0; + float2 vector2 = point1 - point0; + float area = abs(vector1.x * vector2.y - vector1.y * vector2.x); + + float3 distScale[3]; + distScale[0] = float3(area / length(vector0), 0, 0); + distScale[1] = float3(0, area / length(vector1), 0); + distScale[2] = float3(0, 0, area / length(vector2)); + + float wireScale = 800 - _WireThickness; + + // Output each original vertex with its distance to the opposing line defined + // by the other two vertices. + g2f o; + + [unroll] + for (uint idx = 0; idx < 3; ++idx) + { + o.viewPos = i[idx].viewPos; + o.inverseW = 1.0 / o.viewPos.w; + o.dist = distScale[idx] * o.viewPos.w * wireScale; + UNITY_TRANSFER_VERTEX_OUTPUT_STEREO(i[idx], o); + triStream.Append(o); + } + } + + float4 frag(g2f i) : COLOR + { + // Calculate minimum distance to one of the triangle lines, making sure to correct + // for perspective-correct interpolation. + float dist = min(i.dist[0], min(i.dist[1], i.dist[2])) * i.inverseW; + + // Make the intensity of the line very bright along the triangle edges but fall-off very + // quickly. + float I = exp2(-2 * dist * dist); + + // Fade out the alpha but not the color so we don't get any weird halo effects from + // a fade to a different color. + float4 color = I * _WireColor + (1 - I) * _BaseColor; + color.a = I; + return color; + } + ENDCG + } + } + FallBack "Diffuse" +} diff --git a/StandardAssets/Shaders/XRTK_Wireframe.shader.meta b/StandardAssets/Shaders/XRTK_Wireframe.shader.meta new file mode 100644 index 000000000..e9d91c4c6 --- /dev/null +++ b/StandardAssets/Shaders/XRTK_Wireframe.shader.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: 4a2ab4faa2fc4a009bcfdf058d1e0659 +ShaderImporter: + externalObjects: {} + defaultTextures: [] + nonModifiableTextures: [] + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures.meta b/StandardAssets/Textures.meta new file mode 100644 index 000000000..0566e6458 --- /dev/null +++ b/StandardAssets/Textures.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 13f1a182456d421f8732de15f0c805cc +folderAsset: yes +DefaultImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/Generic_controller_black_scaled.png b/StandardAssets/Textures/Generic_controller_black_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..0ea99e2c5717a04cc661144f4bcffa07d6ea1401 GIT binary patch literal 9775 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/Generic_controller_black_scaled.png.meta b/StandardAssets/Textures/Generic_controller_black_scaled.png.meta new file mode 100644 index 000000000..9c62c5a32 --- /dev/null +++ b/StandardAssets/Textures/Generic_controller_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 5b036032dba34a0d9f36f41b921eaf87 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/Generic_controller_white_scaled.png b/StandardAssets/Textures/Generic_controller_white_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..ff8ad43d3ef53fb60fa040a3753288ed03ef650f GIT binary patch literal 3937 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/Generic_controller_white_scaled.png.meta b/StandardAssets/Textures/Generic_controller_white_scaled.png.meta new file mode 100644 index 000000000..db494690e --- /dev/null +++ b/StandardAssets/Textures/Generic_controller_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 2bca29bacb6f4e41b233a268664a9d3b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/LuminController_left_black.png b/StandardAssets/Textures/LuminController_left_black.png new file mode 100644 index 0000000000000000000000000000000000000000..598296c6bd4169929950914e9d886bbe006a203f GIT binary patch literal 49347 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

OyuoH}}|M#%BGT#~&m*ZtrTxS(>~R4!dMW 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

OyuoH}}|M#%BGT#~&m*ZtrTxS(>~R4!dMW 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 h|G?n?L-d?ogdSL4%UtJCu}c=kCyv`4V;^C_zvZ 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 N{#%d3tV1Ce{tt)G4(|W} literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/LuminController_right_black.png.meta b/StandardAssets/Textures/LuminController_right_black.png.meta new file mode 100644 index 000000000..06f4d8240 --- /dev/null +++ b/StandardAssets/Textures/LuminController_right_black.png.meta @@ -0,0 +1,145 @@ +fileFormatVersion: 2 +guid: 881b1cbed2606d34fa756a1cd2343aad +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Lumin + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/LuminController_right_black_scaled.png b/StandardAssets/Textures/LuminController_right_black_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..63f6e1e72292646f395989d82b19757b64b90c9c GIT binary patch literal 50330 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 N{#%d3tV1Ce{tt)G4(|W} literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/LuminController_right_black_scaled.png.meta b/StandardAssets/Textures/LuminController_right_black_scaled.png.meta new file mode 100644 index 000000000..26fbf4ae3 --- /dev/null +++ b/StandardAssets/Textures/LuminController_right_black_scaled.png.meta @@ -0,0 +1,145 @@ +fileFormatVersion: 2 +guid: a9cf5cc7aa80d004481ccd87e71d1eb2 +TextureImporter: + internalIDToNameTable: [] + externalObjects: {} + serializedVersion: 10 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + streamingMipmaps: 0 + streamingMipmapsPriority: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -100 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Lumin + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Android + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: WebGL + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + internalID: 0 + vertices: [] + indices: + edges: [] + weights: [] + secondaryTextures: [] + spritePackingTag: + pSDRemoveMatte: 0 + pSDShowRemoveMatteOption: 0 + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/LuminController_right_white.png b/StandardAssets/Textures/LuminController_right_white.png new file mode 100644 index 0000000000000000000000000000000000000000..495b2ac9e9672a18a015c7d87805d46cfff27e28 GIT binary patch literal 47727 zcmeFYXH=8hx-gnT5u~Fc9YO+v^xjd4NT?b*(o2vcgdQo9*Z>Pcr~=9o11ySwAVq0G zP>~`FkRnoIMX3>_DD9hJ?Y;Is_wGIR8FzeR-1Flw1e5oD=A2J&bI#<`R;M`Gh1ekw z2q(rAjfFs%s==?yJ{IuAurHzp{Ktkjbqa?-_VY7-p^)7C!w?7u)Zf-I!qL(~*E{6A zqNh)Ym#-q>JRU$pAo@lGyr*}dZ-j)Gub+Rg0b;4C4I$z0V}NkbuvE6h8~dK~H;oDN zwTZE^^^OVj*6~3Y8A|9AbioAYeIq<22!*vM;h`o7r!Dq%}C4|HtNJO9k;y7bL z2}jG*62>86z7iUWnhM@3>KYPSI*KZqYU(;V@)D}bD%wiQ+Da;F3M!hq>dLyRsuF+u zL4ei5d~mv0w8`Jr0^bY}=OQBTx=KpX(b0<0YKkFYeo87jIyy?qs!FP=3IIYO{6cVq zCqW@NTLLws!5CGFZNjQ(UwES!0;PAgO3b0Ix;E7jK zQB+nsf1W|t9&~ub$tW=RZ)p5W=y2N$cwZ%~Z+J*#n78lADBs`+secT|`u>B8|Hg0t z{?}k1@4pttM}`IMQSale-AeA^5+B{FlZ4dc8;A-?5AE z$Nd}R7;pXys4v0)-+(gS{1;H5G5;Egzq6OIJdlAdI>bAYK?w%^cdhaX@%H!8{R>%L zZ%t(%oT{g%f~T6Mwt_nNQSkK9)>6>MDXXigYpAOEsC)f=HcW7MglDj~FJm?^zoI{w zNm*SL=Zn+OP|#6T#VL6EsH-S=Y3TSUXnA>QX=e|Oo9zU+BriGC3@z%wKgq`;UI^uuc)6Z84AMA&a z_y+~XAweNwmLWdA1_-r(evUCVJ{=Z<^A7?q5E2Y_>tYz=9sGSF&KV$7RF#$g`LTs> zu;1QuWi2qx9{6d7#DNWl`Fmr6BYeZ~VZa_4N^gJwH0^=dc%H`x`G%kN4Lj{m@D18S zVef?_LtBF)|AbaiQu!Oa)4zWFkEeFQ{(w*b&JeopN$|(sH!OT_O=VTpzdzrj*#@{9 zK%1t9hMLCT;P;SlMEe7o|2gJQD);8vd*}4e@AfDKg48t*^Yx7IMT1{JnX-zGg0i}T zs=BR;madwHuDYgzvX(A`SqxCXXn)*=|2L?%u9~{8it2v>1>ExSjPU$Vzziq2r>&;` z;SnKW7yjm^YvwsZCwWCT7ReIPq6S1Ttu{InD22v zU{8N{#d{jU@Cg#e#thf1BXPvRKiDTEI$ZYe(|e!u4EFN{Q9ucy^zZ2L4hfF(4U6~( zO?b~RPoQ`}@&*W8Sjc&aKQ%u9@9QTK5hCG<#|Qa)@2R3vRItzA{OeyP@$VP%@eT9; zC)WM*GJoM9@qcr{|12qGbuA4w9Z!b;&{j~>Qr8BO@>Nj)itD4Q<*n|et^&;Qe~hI5 zBRyKaUcR25TEJ#hy}cE@)YP>UbZ|H|1r2Xs9dB;DfqDKRptKb@b_|I;u2`5pbI6`L>|LwE$pXLSFS z5B%?HB4a$r3jWFyz#57^AhK)!H!YJfKIH#PWM?SLUaUOfAHj&Af5y^(;r$J@_4k+( zUOA@&E>X z+?J3(znzfkw(d&%*;-K2^f_y|Cg^RJC=!8!B2Jm%U{8$oR53-@&sOui@(gBQTYQ6k zZY3|cIH9K(TM}^1Gr6d`L;h^<)cxzOgX|V%IbKV5A5zhLr%!hrVonQE$&^ereN-cv zoZ*)=rr*^sj`{{pqKt}#A5B`@24BzlSUJu4UH3~>z8oo{} zm+ZHw*xsF6vdatB+j%i=lubJ5aq#QI?e|#;W(+46&TaM`$C_)#x+e9oAfsN}er;#|aE1 ze0%7)HY#mE%cCm6+papDWegR14au?QZqud6ug2vQrk9;;w86y6ip~V-k@xJJq8JorhOe zJ*;BQmx2W`7R|UL=s4&hN@FGUp9#(yhSAHZD)P*4zCNYCOk!Dn_o6uqMlQV`IF)ip{->wb{f%c1x3`!Zt;gHcBeMHCuiZNcI@ve&659kdGnYmnUrF zWH+1hDp3h;bRvU@vHJsB&x1;6I_z%!P>ilkZ-cIQJ6~o%UsoX(Y0g2!S*%V6{Sjc` zu?nRHklasozdJyOQwyrLmqHz3hL%iqTT}+(&fSo#@pCeC&g=0KZ6@lqnjL1AwE`Ol zX%e3^#-@Vfe|>qY5_g`#C+`mjPSibTIwLd;zbCm%8&(~_x0vg{nZDJ2RAY#lb|!eI z!W!b2M8ygglS-1NKihp+k8yeH$ymh9izO>J_>i`x%642OL>wvh6?K)37E4k(v-rs> z>DY1;smkNYeE|682+pH4S$CqhKIVGdWryq}mQhg}l*0|va8~l7QgPCBx+0#*@yPo? zYnV0v9VY`1t{mC-a}1v$mm}yHK)y@8;Bof#XbUXPD2vJL!dI9$d`FTG2z$;bFQe!6A(eyM09tV0%YuHGy|U#uv{@B)L}FfX?I zv&H+jbnp@{1KnV2@D&|5o58QTR6mmVgZ!`#F+BUmk+iD}TPQ{JQn9WPq#NjZv{-xj z!NNxotYeqkkCtAKK}U_mJbB-NRw^%yAR42SJ#XiD=(^HI)4>WEse+DWPuXaJ)W!VD zXwF9Q+M|@Gc`!rc3oR9|Ax0J%`g=S9N?BIMh39g_{h$p$Y)exnnQ{RhJ)-g4+Hl}veA%|Z^(Ue{(h1V8{(Pe4k zo*pg?ZfAg*$q&#WWoIrsI3&ql%2Otw>IUoz8(b3!;@VbBdCMb`Q&qt{cbpQxhubkm zTmd64El^i(?$DxHHXz?6WHAj4ExmZ#t3*fzN6eT^uc@Op6RL7WuGbb=Qj$QszJF8PNFAZSokoXHm2~G`)0R54DY1>?NNu0F&i~ zJIW2|cuen`5tqzWF~>SZ!4ix^eXorY#hG6piil_6$IIbS%ArO*ioRoYNQQK3Jp#{O--0}w(mJki&K8?Up(jKMNT5UpXmoX^!0 z+L(YX9R})D`dl{8QHEx|cm~O;$$`1CMp5*a_R){+^rTV7XQ3rY{U7_#{*m{h z_ywJMsPFTu7!E!21>cDx4S2J~Q_*cyp$o1x3D5&yV1AA5J8kO!-T^RwM(Q0!mMF43VYuTSicI+fo|Uwj_>h{G zU-=GN$uBJ3|2e`EuuCHeS`jr1nKmQL$7}1Dk$>P;sG%R!K5Gxigxb1#u<{;h+9%Tc zJ{PPT05RY9?i-?7uRSy|$)ptsZvg6s>V~e!tLQUrNe2IJN=DXYK`YkYay94B8ds=0 z3<3g*x$xX{*iV+4tYq34Hf4`WPRA2thM1Te^4@?M8Lr%oW)prB<{5{-c#?DOH8JJC z{>E6a3<`H#2+L^vDUJ(lpG!s7y|gQQ8_TNACjSZFhoM1ukLX$Y2$%!2ZI_n}y3JLc zOKbE-|7K36fY3Bb{3cTMR*L1eOW*gs$@YQCLb=AYKINSB2xkjSL$V=KSFLCaDEK{A zv93KRAvHjw=k@pPM~Ry^+>(%>E`SOo9UD=kS#XWcL-a-}<9WyOIy8XuR>$Ey>N-w( ztfzYC>mI?BT_2*#E2n+b5Qnv%V5$cquvKHJ&aK*Cfz*F3&Vs>aTEJI633ok(=_eI1 z;&Gi9o99ZrOuNd&o$Y;{scHK264!Ej;dT-0f7t;FyZfR!JHu3#OTzDAB^$!=1IdYwQMO)?LfIpr|gLj&~LYRmw&qC zG2N5wrq6^mGV*Z~9~S#?SD9ih&M-d0<12NhWZPm{8p^{wWwaTcG0{ImVCWMHK&eF@ z7HfuWu%1*xlPM~WFkI4Resi(FB8wYJwKd-j7>und+_CS+t1B-R4m@QCj3iHw7oHVkQAS}F)R^O-W7!`ysvy(1EvJD5*u5bSE<8oP z;&CAry)7B=HG5(5`$IQtQKoG(D=^J|WZFFH^WGyH_=qx}jP>^n<-%jxtV zw=HJb>4%otQUOfeJweC5aOL-*CWykvx-5FAgj;jq|bRA%{dEzJE z{plwa0aZfIpK(L$iOJNF-|HdPD=)4s174fG;(LbE;pj!_*PohK--JtGun7!*yeLw2 zfs>FL2lD|y4?Q5|PFbeePIdkZB0!5K+-UkgeXFY=Myw+J-(mp7EnhazT8hH{t*a;O zB{5hvSBaWzEx2D;;}lbx&LrIGBmN+;@77*wK*|F3hHU>6mWjK&SYV&GI;d6Y?sR`P z0ynQb$j1hS)T(no`dkaIe;-_h#5~Zp%J^gra{v<^(8_D==XG*s;Nu6x>a%Tfk9BS4 z2@lA;gAWnNThd&Lymv-cbX=_g?NPnd!6xFjP^A-O3X6{Ug!g$=TSbLKa`BSPo@!th z4pRfJoq?SerCBdK1EcwMc7+P>+#U(7@iVWQgC&kshVzc;d{_lq6wm>9)VOb6?7L7C zvFCvjsMk2F1vX$meT~+M>+pp3uTWJ$T{lo$j`EvRe%^wO-U|TFQb&Gj14&fJZAA#L zbS41k(3>M!JetO0mR>TXsu{c}gO%)BJ^M#{V5jPCjio+?ioAZ$U}vT$qxn+e+gQW90YP0igWFi>K!haOn9>!HzA|(4v6rd=OF#C z^>phj4Jsd9b3PiR#sS?B`|U}IX?gi1L&r_xejRrQp!B2Ai#&j9Fed|=4fW&L4_9D| zz_I>1IxF0GBICeQo1>V)jRmG1a$H`k5`-JZ$h-kfJZn^}5kK|hhif4A-x~D|){HkY zHWYR|OLR!?4a{o=p3F=QUOuJUY3Y|{PuzC2I)cFt&oi|iZ+*!08oq>z!2#{HyC&$k z8fDGq?tQ88&RvD~fq%`+z6$g%uEWr~lXFORArF|UVj8wEA9)5Q;=Qgg5}oUHO!Ja8H7RM<{k@{pNMMg4T#VwttQTV6 zB+n;k%MD$JMnjhn!9i7N`Z;y63mbP}BS4B67hy&GIU0UQg+c2=`~)?eOqEGuavpxI6o_WiU6b{sSx`~)Xy)s1|zm5=uODE zx=2m}PqZ5fQ}#fX2C6oz(K%lJo8qq+mRb6Fo@D2aX^rloTHmB=SV7McSJ+Y}S$g@8 z0|l~GGN(>LY1*(-lHLmUmjFR5MMnV7S zdP6sG&QhOj+#2Bo+`{hj7gXPN$AmWmaEXHK_`*q_66tmn!C{@9PpkinLnK z6vQI^s-&6c!$r@lWAe4lfC*5R>e>0{l2zP!hjU7Ls0PTM7rBrx#B4lY8d&DhiJi|^ z&o+XPp`17eltn0<-825K^e^*OwMveXh0cghQMMG%OFR~8A6{L zl~p$SffX`%ABZ#$^;H7`Cf|5l|duFFPU5>X`H@^dTJnVC) z6OQh+osaKbEIYt7j$x{)N9kYW-QdC3S2O&0XfDe=)X$dVd@`iA+n=w3jEoF0T3v1w zNPXr@3-%h-z}SrXBed65HDj`orOAhqV=pWI%oM1c_M4EHZUv3HQW!%RfJfFDkCHM* zdf2U1}mgU_ZKJ-SU%K1&;jn_AorfYY3=bKp)T;&K{4L ziVQoShJE_531$~F!fP(tNyKLFF(CfF$4v7wzz3wu2gc^eBo!}}+p3uZpUCOSzaAs} zqp!*2N7nB*?o!?Pj+Y^0s4JlT_p|U2i0E>j@v}4^tI@Ma)u#151GQBKF>J0fR7s+! zhYCmU-Uwt%S>kE0bV$A_AL|36fXfY#HduZd`VlWQW*L+u+Ie3ENEHP1Rn7UlQCZ)E z&&T%1-TRuE`9_1bKpj3|4}wsc57&nOa-Q~>lxlMfa&7=vfte4ad@5Ij>a4YYi|rfC zDVqpK+XJNxs8>{(kgl4tA0>_^_u_$>^8$@Lf3KZ%7qcvQ%9R;30Qf$`F$$27=QlwC zH12Wj+|G_|%4pnS!kwHw>+TYBTwQZ8cH4cVdgu&!KYIFxFZK@OCz~MqX2eKx>!I{veuPM83*<}RZNqQ$0+)7#??cL;ls}8UqA`V1#2ZSb8R@e^*q; zHH2-7vBXkk3-js7>U>&0*Z1fZxlpOt>gr*j)^cyHEe_AC zZW+oY%YK;psEb$MGf+;Tb!{_=%{xD__GdT^XlH0vg^!iLS$;F5F+I9GevMdw#5@J& ztfYd(*$z?pK^(~MVpJdgw@_DB8}8;j9_^P~Xd%tQ+*w=mBHG8*K->N04M$Kql~oK; zr=@DjmOUg(Jnz0VX85oqxp_2E;pj7yu6cZRTJC)JR}3O(=V-&yD__~S8VtI$TViU zlsW+KMwH>@f^IDJoP=%tfoj|L67>Egl`+g@Zkn$k*d1L6=OPIF^sQHduhY~4KlxMu z_{E5>xlJ>tlkxemi%DNGX^-{kBR4CCwCg~2`uvVH;zUvgl<96Gpo z_JV73JfBGpNmCB~`K*R!^Sx$d%9_r;EybT!!Y(XpknHegP}J0UvU!Fh*(|nCye~hO zB8JaAR~>U@pAV`IgfbP;FzNM7pg?7MCxb+S5g=G$Xo7{`HraYBvXON+L887a(jlB2 zQ=2{+MRWSVqS`n85mnecBx(bUuM{44NIPRCvI@e@n->i9Jr}@}DSqjK$KSf5qOjA} zOhx2z&bS+0UE}w5YZ%^nHR-;JD1!Dle<(5P(Qrg~@) zrUnA$T}qQ@Gc1m0&+XuBs16t{b?M|lYD*^)sE|+xs51md%KgVECs10}OpjXg&Q08V z!$tE)NCk%M^nm!QQH@sjUEW0n^J>&%#59@^u3QT3JTJ3Ag-b3+>~N`v|Xe)C*~Gme8~q5{=y1zU5qpsUHyRqL9`g*TVVCD%FkaP2e8+=jGQ}nv@!vg5V{PsJc z4QKcEL#`zlfsj%gNmK%f-Lz%p3ibBiWc@^qIP4-IXgFMagOsLf32ozwyBQ&fHwU{= z1rlv6RUmw|;*$Eh^wnl#(fHnb`5@)3xmodqY#|(1NVofHZ{C@4-xBR~Z1DStP3QV- zq*w0gTzN%c!}=?o+f@4x_YmBoUS`X3XWY&mg=4TqK=XsjIof{Gzxc#4YTcdKLFOWR z;xufBm-hh3Lv^8B0-Y}$+!Udkp)vROf~UqiE7~2&mm-pFclCUSm<_qMV9IwsG#~Wx zdY`DA3c}Jerh(rL`j3sU59B^GbRtt8sStIQv zh6k1S1f61UIOYSddDo5x{UGRJkRD*mPgNa=op@-1v~hk}_G|`{P1$4MP;Y_}PE<)WTCR?6Mm{UuVdqJF41q^Y$w)zaVfqh?o`ko>@mZ+EP zIy8J`#u6?=8cp8uyD<415Jk)!ud&Bds&VJ`v)_x8HgBzdyUJ(_U_n{ss*6^t@NB={ zH&**wC5|{P+08V>RFp+Z*uMoLpa;-QgV(&<>N4R^r}(Nxa~Q=r}f(|k76^1xBuTt*_u2?}k!hsyed z3;VR~o;llADAGe|0;Ub#Pfw`dOc2L?1Wr#YkLBX6F-T93Ano!eeu;FX#!b+k8{e;Q z@F_=3nZ((eR|wZPnK)-vqFu!rC%6F_;5G&=&!})}f2upnIzr|57qQ%!!D&!EyNwEp zb!l5uZj?K5!FIXEvOeUC(b?%y&38bo6wZ@g6j)~WdDzgVojU}O)4)N>TZ)q~X8`06`2 zc;9RV4>BuMK@&_Yj53h^6Hlp=R4C1xDxY><|H<0;!*zr5&f?xV>VB#?yntmVU}1N~ zM8`;vbb}%+r)J7c;3FVQK<+OG_Oe0s&M(riKl=6&WCsR>ecZfTa^` zIx{ABvm)X}YaLN6w73Hs>@4*rDwdC>#z5Oni5F_VWQQtk=kQ=7YecxSXujt>n-@V+ zf=!=#imSLm9Zgz3k>G~JT)4w*l^R0xK2T1zp(a)<*&Gt3g`;V*N(MC7!#)`llbVJ! ziNV>#JIG+wH)7@JZ(m)}{38^tOGD_8x`Q<3Gpe93Dm`?-occ~V&!Cixe!25;d$a0t3>vp# zKarYAaeidt-td$o-x@!me#T5%6qQ>SB7F&alW_DnZ|utNQAOn115AB-vIN=ix6^j(qpI zMm#Gx`tSynylQiHRO*sDH%#e$@b5^Cw@hiT?oxb@I~&k?&}|ReJRbL_v(a7>6Hc{m z=L9#v=3i`$3DJvrj;6wElE0WH=AxR&)Z{5h+USI?4-dHA-(Bf(+i@M8gk)1=z=jiXcm6kqiwq3#3G;%h{!*8%=NcO`_U@`&H zJ%_U;+op8fJk+dvVxr1kgTVY>U!OTRADD5s4_|$jJ>~S}a z@G^q;aK__9i~D<%(;{h&=D{ioQ=PYSBr*qrrx-VDw&Dh81GPOy&RJ87MdH4iMVV z|0ctx05f9SGF&T8rGz@6CNFOxcrDJAsjr`IP_1pzFG-%VzYs((V4X@l&xMqAV5!a+ z@h@~an(XR0QZ&HGzqX7AnQK7d!(vGKEWqgDdwHD|;^w{6XgLhFb0%qg)oow3=aIjH zzNBI5j@imMIv>I4R9`vmZ*U^+u*`Q$5%|La&_g(*34J-TV~{NCb?FOdVZ|^j1hiJi zFIx9dN3T1YUj0GbRqVLH??|?<@99(fpjD~;#q$Wf zz$>kfV0%UxZthe839%&1tJ6g%3~VpPpcCo@2NzPJl9opulJ5R-_iBX|IRf?hd(}|N z<`n_8dw%qQ=By;h9F8`aG@2`|NpfeYzfDlU1c-tS=UG*d=_QL&XV_hCjL*S%yT(uI zE2HkZG+yrF%3;OrKYJHhH^lz!l4A5=3S{IS$4qnTIwIpO;=4hA&u~Onon=Wc!j;6qxuh850a5rt~Xxr+WJG69ksgF>> zGn$>~58`&GLC5cTkLNCv@4?qn7+e!ktIo*gdUQ792WeNbFd@zM8l&(Cq~swUPbu&C z5%&_*+%kgb7CT)v|n842p+2MyAW&_!wm9s>gh4uA~n z%?Fdd4mr+ME&oVz9nedzc}D4T(Ce(eB#<=u$DI@QGMK)I>tD@t-Z0S>5cJ^#;PhRp zBB2h}%zfD*vc8~e)=>3Bq;!&e7%0~Ga2~P=Ht5-K?7A23#tUyfUelI>2tA4e@f4}{ zq`Vnfs2JXiws1B7$WG_-at;#hgY=UtXAYw2vocAvf?TO8kf|1)$^xaB^D7Sd&*$03 zazAVcsFa`l7@C=vzTcXxAB$&Ic|zA6sCxeDD*283?ITy4GM1Y~(L*cQr4CnU z1~mEC9Z4A0>5_iKS(qVb9Bf1L0W%Xh2eKnc-$fLJDJS)(7^qi;wp`1DT_ojP)Gq@K z)JKm`V><+?*a0qnPK)&Mt6HIDDNZz|Gu>ocZUXrTzp}(pjPN_QxT`;WqcE#Pha``; z{qO|Lk74KceWXf^*WkNEA~$^3V_{lmzq4>>M*FT_)_ytI10}Nc>2-a2@OADlW`mB0 z!O5)@a&YuFNsIdqb-g^Cj?-q#qU)=PCGi>Qf)bcWb>=Nu`o&y#_Bt~QrwQ{PO#!)F zY0sPQ?0XSs1df))CSTi9qfVkd@bPjVe;GLh|C~`hb8lClu0h*RO<-v?V?tK(CuCc0 zx)^Y5^?%}jW55=7<;%7xCO`)qy6F-5-k$%aL;JJkFxUZM*-#l==yivJ_U(Zw3p1?I z5OszWjSX6}xs#P_QM-Po?Kiu`F7##_Y?pn*@WUoH@z_VX0jb%3VuA_Nv)R*AZ2}vX zv}0DIdR!u}zBz-!pQYNin4gl@8n(}7&d$;mq`g(?&DQp}8}IM1A>RE~`QSaOR6dsE zF4_HSR`tk(Qxi>FM`s`LYH@Cb)7ntEU89oPnI&R$A$kJD$XNZOyXeQ5r_^cCCWx!$ zyUo)sk15jtRJ`*aT#yr$GUF*K(>0yXD*l#UXKFDN!>Z|$Nm0iUcds9*dz${8*(IiP zbG?mu#|WKeXBSeYhqiy`*H!g1E-ynz{x{>u7kSMa zPa>;sJ4GrRXB?U6>ANR}$w$IGrcRp;el1SoyeiImQE1GX>8W(mG3sv~$8P75O0&UP zmT9DPb4xElEu8G!&$Cm|RU+H?YYyrzeT`|$@F!FKQ*=S~ZCD#qkj!q_xEOEOE7?W2Dqn;c{JzSaBzwJqrGBJD%Ze9T1e~s?*QJlr*OzwdO@V98 zv%!8Aqz*QM$-v&!k#h=IUg@OXvJf7v`c=fw4UQYY?0e8A z{Yvlzh`xDii`ZywMik^WZ&6faZVI7%^RX^PO05;22m&{c!V+dXIdaNn@>WT9-i5w$FD6-x>X z+-*g*>&$6AK9xjki>wKj>F+OjP{_JPc`9V(bHHi!aW~@ z_akaGuX(gaxwKL#F<&7|$eR3a#e;hAtpiqfdqBrR4PDh8n!S~I|I}8)c)HD?Bk)uQ z`(V~Z+O4b;tS$;T9jt$S)%FTAq6072uG63ymvB(r0$Fel%6D0c2Z!Y$r9Ls_HuKo@x**xBkN@c-&|HP)Xt(_V1gK;RmoC?S>Jfe zBDPAhGyJf(m59 zj|b71tEJvP?hC8?2IeG7&r>-EGsVp!ADK>wSiy|UCuq_G%v|s)=uD%|&(q`#3xOOd zO{QfoH&>~ehq`DzrppcsQFqS0Xlp$anKZkeS2NH=c?J$v>4LLzW}$K18^IH7*cD6u z(oMZ&sy&~9*W*q3;%)Om<#4L^r*~Dqv+8r}r+(BJj#HzKnvPm|h=9HJ7uWY;bU?Nl z8F6ULY?=ER*CYOjMzDi7Tx~l4CKy$7FnxY7Dv9G#NivBou{2uBiE)w>@lkGRy~`Dy zb-n#)k%slwL_|`-{dC*fQ{#qSuHhfuk|@8_z?7QD^{Zw2)S-DzjHXmEwJNPLBkIoK zo*i@BHrwOm>*~{mm;`54L(S(i1X;RfIXb>PkAjZCoEE3yT9iSDzlQNi=5jle7*i4uOA{~ zfm)f_t)|ES`n!@FMo_?kt8w1D)t>_=dZlQiFX8JW^2T>Shu zSN6F*^mCa6C$sH3WIg!5a}ch4caWNwxHxTf`+_Jr;2DR!MqiW{**cdt5BrWcT;vY* z7b#9M6x>aX_*m&cDq!Bxl82_+f@IG8l7fy)U}hJ4!^_Os-}Y~@{InkJ{lEiuVbzIH zd5r<4w90}n(vMl2_cxyIx=xv$gIGg$Z~ow%79eguVmgL35Jko?efdtm$fSL*Ba#xD z18ZfU7yBrbMPz;COQL{nDr|bu!VP9C*$iE(9!Uujow`U`)Tay5&Vg1w<%A2eAaOMi zZ4(euF?>Le)FwGuY=5tkha{g+g4|Y!^(cKcxc2f+W+`-Y95#XRIigRpF+$y%K5oM8 zwwly?;IczN-pLPczZp+(Bk%a+Ct^OVuZesNQCIT636k@7`4aI?_c^DEwDh1`qJx>! z^1NF2qj|lXCo!3}#q#Trh9;(Y!FXA$cQ3^KL32fg*uV#>YyoyZa3{hG%&iu`L`8&~ z%|qUxU}viMzHMWKTGo=LThuz2h9*xcSdm8}NL6aiZAZm(i{5`BzC0phJ}Y#F%ft3kS`Cio+Z|WFZXk=wfafBKvn?ZDvpVw7=Zn^vh&r(exoZC6{ZRoB* z61R_$e34e3bj`tF9@I5Vu-m9w0~b`hgXI;uCQtI$yyY!CX9=(Q&#nhIwb&B;ims^< zQCAh|?BC4Up<*xY9Uhc8McNgot84YJBt9|8n4fsG_OiwmgX!bBN{kJ?>=Zyj8kkWu9Z|uA+Bbg~oy@S%8F3gNJ3~9#xzq(4klA0@TwSnw z^Pw=cP1?i{__rbS7rPOfUC4sVWe4mIILjZIowp9V@XjPCOH}^rFY=2n4*73=_57Uf zLo5UbQUfeI+&%4$ydFt_G&-__d=&?pRdP!%o8fg}leer~7LlhL*kA5j$X%fI5_`ew zw2R4zMt+pM#&vM*B=6zUgd669TlP8I3%ctEF@0fo&NYrR?_AH3V7h$Dvugd(6Rv#c!PRXeazDf>*;(Hjrri!+LI>a ze~EA|?rvTO@3kiyQaxefrIU;%UdqiGC7yz};4~pTj&00=T6a4y2+SbBJ1ZU@{>O5B@=6h5-Cw#xw4#V zFVo6`ubo>^(U_-Za6wDLT8k-s;F{LpTei3xKloW=sWM6aL1eO?DTf{5`i6noa#J+< zh)j*`v4Hx!=%rWk;MTzEBY_RopH^F~Fc6DYk(r>Qkl~it#f}*)nTgs@wGZMuTJ-2* z$1kC@%*@B9>=Tb1R2DW5xW|TAQQaR4hG(pIKC}B^D0#k|2jlI^pYWHjsmq9l@dd1LEBFJXcofdo?~e{ zvGw{V&(Yx_`L~xGQWK=kVLpau60$7AxKld~5yCwjmZi_YJj-gvJ_Mh)Y&B_=4A<-& z!wuE%o7q0$Uxer(`07ixGW?xzTo&ipLuwpQ7+YSOPHMLNw!c=`m7u(#Kks5qhog&6 zfzGg@*C`BEQznVy7P9TKLE)*9sJQCPSsLPPO_dnS>n}|QFbCDmEfijNpggRtM#&lc z=KG4a431ftVuVE(Axf~4SJ4*LZ=`R-nvz&YJligddX27uOGdA2prudO$O?o=7NAXM z^HKLgsy^c%PIgLXE3i`7Rp91wuMg1eY9{ej6?da`04Ej(p{>w)Wbq-+TC@3y9Ujfl z%rac&k32nds_4e1eBFRN9r-heed$?jSScT1!Sz}+Ma(Gw{RA6Lkmho4KiRqX)E3vG zWR3E*Z!p#*QHR8%ro*8rLEQJ>seo%R!%iPA{)*!ojbVw!nPmd2vQ1&5>Asbgc*wII zH-8It3#a$!vhH2_MqsBcBHFd+`yFXRqaj@@b+0VSU24N&1K~M#x@%|46N(B*gXCVa zS0@MYTS_;+6*k94Igt7~jTb;Y)DWu1KPYy1kl@mde~ke5Cnh8AY>0^0X^n8vA`ueO z{v6=e*k|1nH2XbPv_w#B6aGh`zoXmP9O_>ZnNH}U}YJP!nHmIxD?1Mf%x|;i% zZN^=6ma$Ne&zy#A>0K^(xRjgsopbyjjO%P+KW2AMa9gG^Svo#46khU>*ZUM4V0s?57J2jJ^&s^^Z{U(VnTCaF8su6!ZAOvSbaFS$0aH+{z)L z?1t3o>~CW)jCI;~pJLrW(htA7WHXx7s}MVcd27LA;5*pJH2*3=mh5~kcVD5*Lh_Te zqts~60t?w_T!88DW79XE#Cr%kA}TGfV&eSO4G0-?sby_(=I={JM`N@HxvSKBXy zL9_i0v~}+p%}dc0u70uLeiY;W5VGxDt?$bc#? zj|rQbA$n%s#6PJzL4M|2SfMkQ@oZJBF8s+u(*Padr((Xr9FkRw8E|nrPMz?wq>QDys`es*h0qn*^8mUhdb(@zsu}*x{BnC zB8@@Zx(GYSGn{FZZ6f6zh%vKEs^6R93_t!%Oyb7AOf`StBzXy2;6=cFWTMLr&?fu6 zWVb1kw-42@V}ycv$IRAZm$)7!&zodrkhS`-;q$DEC~W%BEV#*7_cP1K^nnhn`PSiF zug-T~CRt7u z4Y){4UlhaO=b^N`jo6Yk-Mr|Ji9^PU8{<_QlJ)rH=kHDyC!v0^YiHdW+1FD&XUFX zB9dp**D2x^UyZrs=!p?QC|y=v%?@PibC289zqg z{Uv}ahyr(9j;-A+^QDP-WrOgcM^Z!M2{}^eKYF+WHHO)|go3eo)ublMY%JGU+V_c- zF{@+a;C3Xo$pv+B$r`7hK+eet(-NO zTkBX-iQ2s;V%~E;5KJg}Yw)~RQ|>*e6>wn1Tlp~Qq#CNcbn;z9$w9Mkt}LxL-VdE9AY z4!jALIJ-#SN0>ev)a7}k(1YokAEL;+|M;J{#=D^L^Afl2kSKqW+7c!x(sc2BG$8R| zOqrk(ew&{oIa!s>;Wc3_Db@M0T8{t@V2T??yK`i;dkTdD>V%8FJm;;C4$D2@%in`9 zHz|?)B$s?}K|cKHj6nM%3}%XdjMWvxA_)}>tUm#8ACwcNhI%)UG0@54oPScKeLsuy zrSX@8Xe0H_TU2svva{v{yhd zo(iDmdflGU#7@Z8bte+RvoZ9W`az`zETc@reV6>)eW9Dvnxy*264Nn8z&12RKXs=fpuSkYwLCTq6j~l|2hSB}Vo8&vN$sJ`(j?n9`(i^xOK(oC z8A)KC%M9*N^<65oX{R3r7LTv_J244@3P^k(@dLWBt?BE*C1KF6JNrgDJA`JQ7xd8! zX-KApPHi)v-~f2sF2}k2AqUzSn5YwDBA-m2s>=5tJf3`SA5h(sC`_4m&bei4!Q`z8 zQVW7geT%?^5Nwz}w!CU4qYZ-k?;F}v70G(R|^&tk@ln~Jb`qdc%HrZ4d!X9`hdj3XR0!v$jm5y=&;xB zWaPv|wDEC=u7Q+?A#C3L%{GmNtTI;ri4p28*mnNjQKyltW9?39xE(Rg1NRHMD`Z5_ z{>)7pV4d$Hn^dJDsDpUF)T$K#NsA)wW16sM1X}vctB}M*@yx!r@G}|hsyiu4Rsfm4 zfs^mC@7d0WkBZfr1qGN`1=2a{l-5?RNsAxl7!&mkyBx!la_TdAZweXE`syGE8(R>` zKdO;=bPPr7x`6PlZ}hH%@QA8v;`%A&D7h6u;UAL}eOahTI}Y7M%qur7cSH|-DjaKf$MwWo^G>zed7jnQ`q*OWq&?GY#YOsO<#p;0knbGT zcRQc_z!F+=jN%)legxGT;mFYOWImALi96^3%^@suvY;@=$zJFDrUHLI2>WfIbOJ}# zs_D|0^Gv(j*FF*pOyvXZN;r20b`E~se?i%gkwwF)cTv4AwysW!?>hD-)usD%qId9f zw1c*(A9Oqh?{{0rK=|!_0H!HX>CNVP1

G2|~`}m%R7RPU?8v*b)KCFX5oPVX=J= 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

G2|~`}m%R7RPU?8v*b)KCFX5oPVX=J= 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

ZL3WXi1V6gAR zX^#N<%N!bfNyeb%Ixn+0mn^|v^v)BM$9lrJMf%9$UZ%crGycq9bdYOP|h$C2z z2ifs$pU=-&#--}T?CkGJi4Shoy$^QYhJrmSH5zqoy5sGw7kkEj0(-@8F$ZZ&Ltf4F zD7=L^5J^9remhm3L%;P1H%RH4Z+4J1+>Ve$pmHYcJEQ@fGxck^o%U640yCh_U2%BHP0x2R;!+Y>;n_-A%n|DpWzp&% zgso|}s+LxjK~)D_pD8=gFTVV&HUPx_2Cp)0J_mlo5U|s7p|u}5eR}(a+0guff}5b5 zMo|jI;r9ht{5!kIh+N?E+KT_9#Vt}x?k9n@FcorDn@7e@^&;Eh(P)wzmoqsj0 z%>^_Mve)m&gEUtmar6XLJ2|Q{)|>0Ty^9EIKV8@TmcjFT7n8&vyR z6ZAG!By>88-qM%DM?n!>VgX^Qs2>%2~~;q?r|KX zaR9>QsM0HK{HP3p|~bCbtYM|vy}|1oC6IX$`A8qYM9>g_#UB1 zesc2Q{^8kk03DhaI{xc*K4@YAG>ZeZp8T~{wcp0HJ@9nvNZC*++ZNtjlbF==%fOmP zA2}X!(GAeIq!9JG5o~6+xDc=GAZr!uNaG|Vr@W)+<4x^CvZ!g*zd)%?o3v@4YORTA zMY=C$vvy;f%iP|*kO7lP;OSFoc&R`|;R8p>_)pP%2N{s%$(1e(Q?R-hz`~9Wp|^=g zwm}EXz`DplYoV|R{TpcK5jc(>sN|b=yZGhI6A5&AYnO7ZzubTJEJOEI(!jf3*lHN# zs`_H_k-+hMIrWJq^Z(+D^KsEd zziGd6>ZXHy^Pt;%uA^a`Y0MmB=FT%bA9?CWB`w=ClqEe}>Er-r&QIVa|BAru~ zP79^bA}VY4Wfs+`w4mjr>@6oP_C3suB2x)Tc4lH?(qLkYF=qR&XC^0lzxVq*zaJVJ z_j29W`oI2nwfEQuFB8?*(5TB}5F-!|lK7qz$h&_iPRO&QHboXd`Z5z+aUqP~0BN#s ztqpHU8m*oH?5=7DpkY9;#C8YJMJfXhy7BfK4#4I|UE$%L2!uNud)oS-9jD{`cFCAQ z?(d^`eCbm@#$W}*B9S75yBKx&TJnM?+hfd#;3ffH2`17nnK zZ5kB2B&l=V^M3oGlmI~f$1%!Kqk$mTOow4sORj@n9vp zfYX#@`|h>UpGxHL>tX~F4d=2U+$7@t1^a=JnLJL*>7=X(bVYNoYFA1LE5J4{el7NqnVhXRFgE(r}k!(0)(^oiDI`UL|%YfS510Dq8rsx*qn zgT~<5M-eTIxUjvd?xMz0vFO{|5`JC#k{J4V<;$a`OD5%Pl5%8&sAbuZn1%Yu{ zDiw>6*R&WFn~sSUS!F88L6CKS}K6 zUaBeCXh!#HFWcgG8H6vt{S7p4b4IOCe^vYhV4abAM;4Br`bH6{to)Zzcexrn`qox{ zRTXEQv)NObn%%ShhP=n|-?P?;V$x0}|1ey}`Bl-)D(@7@AznoF zr*EvT?D9|-6Kq;#PxBQ0QKR*{^1yWD>ztKc$02{rQ5?x|QeifDm;RIVEk)DSTLmJC zI6=8vYm~j82sqbR<^O`m;`2X_(=Ox49sup0OMH4AuDxz*s5#sDpYE4ww z3`WlYtlIi#rx2|S%1PvycL@=!&WE0Lq+%+qan`zTaUY(jDDRc#D8|VW$j1W+##nZ( z?Onc$nbpyzkGRYv#ZRZzUk8u2=7=CMCgSCq$`H^TZbaM3-$GiG_~N96zpZjbQ7}mP zm$C_j-QsJI?MQs+@$!#-kgguE&R7cdm{o@Nc7G38Q@^Z~B+4bpauM&!=(ErK7i?X* zJD}B{uFV<|^e`RjE1|;LL=Hv|SsWiKaU3l7UJ0K@A8$$rgV}ZH2i)|{J%53$j#5^- z;XJlm`*>C9DdmlqwIig(o&ad|2wc8Er{eEf6=G6eTVz?m>0{<�QtP4=%v&@#uu1 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

Jh#Pgl-}d@p)nm+`CKxHEjrq;Dr4xMiKb zqBfF_c@6$gy=(#JV@~uiD-uIUJ7;=|{Z@u%IM-sDt4*9WQTpIAaokwEr)u8g_ z0{GV?g=ypY^r_z^xo3T*yvTh9QY?#TDNg_O?=Q4Zzb_KErQzD!^TJ%5rAl}=&bb6{NP&smw}a`M1OuKGe@6NE7oA<0b?sG2geU7Ys*YU<3Dg(xK* z#1w{biY?-|#20}HFm>!Tb=JNY_h5v zq{!Hy3<6#sop*RK((MeHCN-m~=@4)IkB0;i{}6Mt{{bft6nz5dFE}4~8#|G3d~*vC zGkNP`Yx?7P7cyXnFYs@R;u?lJljlk4^Bqr#0n|QBcH1+`j4v7Ky|EIg2ZqYq5^=$F zRbP8O>r)^qMQjbKejnGRPY4aTIW0o22BzxqmD4rsK~OK(CoqXW0C#0CUM2I%hjWH9 zHj;6P;Sl5d$0l)!NgXZqR(Qk(ZR8d^@QbR2Koo6K{7+qq(+>#y1jS!-1kQQ9CfdoP z^W4TEE8mC$V=>vqrQsuYAfo)mGUNusLgUec;x|(lj==*+gKY1S#LxYELzUZ91?Gn4 zdn9&s*g3mK`X2PytVhhXs?;CJ*`(-H?fog|6Y>s57_d#E{D1lmFH5WLWuA~CbwMug zGQxwGl69760o=SL{1Mx_&Gk`?xZYV%3vJQ*ZwhLblhW0f{UaQO1|9ss+mZbPsa%By zS^cz@t4^|6J;Ub1e298}K9X)T=;TgR+E6X}e2l(WBSpKQE5`2(M#t_ik^d8WtX&Q4 zws%D1umE7g*{pp;Y!JkM{PI@oj zTwm3_>lyRIB;U35rgA$uFTIyU^$=+;D%YW(jxqZILIo*!!_!Z@3uA%Z4AKDyMn6SR ze-884fD4Z@_CGAc%4J`SeE}jRjSLs4cC@8gMcbf(Gx}7%obAoS)nD~?ZnTPW-5I~8 z)vMGy%0$)a-4bhEskralUk(ZabS@CckBJIJuW?GHJf;OdN`K3OI*y6SqR{pBUWl5r z7qv>Wp)s>&=S*my?T23X0_JdFs7m~}5Bfqp%3n_&-Df z4Jmj<0|$h5YavQNb>EyrN9d}*+%er7wazB8hPqk1u%|Y!l@~MIC_P3*x4X7|CeAo& zz@()#(m(-|#15NfEXy$^Yr-`DoO7n553YoSDQ2r9X=0HZCDFn{n6H}cReQXEIRa^9 z^eK};t~+7R`$g$)#zRiSEwSR}RoGnCHkF5v|B;wlrAnl**-Hm{AaEtl1=4^LF+jV^ zC|fEsGo?rus@to88%!WBJy+bP=k0*vKE@F65R?;J1A2yf#=Z{E zLGI0&)*+qw{hCC=eoYj8HMSMGMWlXGPw?6YctU_l8)ziQ7>(~g`n`~#DYjZld(!aA zHW?TQh1zXY+_b6!eph(ibZ@jYKJm;2-`}37CPVXXHeF%>-P!Ks_`2i}79U8t#;Uyo zp((^lZ{;R#%UuRBaps(_Owq;EP+Fv34Yx@&x9VT5Acv&MKVLb2{a-Sh89tQ0tYdOn z(J{3$ztVx90=D8vB39;wokVce3H(f7lT>gtpcaEevbIT)0B>GO=_wp|E5oS5zA2~; zRV-E3+{>hU7`O?=?0_8NI(#}S1-4+`k1yo9J#yXSA3QM$^rwdoV*X=$eBBz~*^-=r zm{8fxMSiJdS!YBo84DCtxbCm}Y&ZJ;sA`ECr9!73UBOz3>qYC~O_!5G{oN?PV>M<+a?GhoC$NCXCwbSy#VF(DEenNy_;>2`yAD*_Bxp z8j(GImc+*HoS6`af@@{q40f&JkTG%eYVx+2@Ddd$f4#QZA$n6WRW;NDE*bX%%B880 zCRUDx1_!>;KFaL-loLxd6rjnvJD?w$T*-MlmD`#LP2^YQ!F+Kp50a)c30?A?2?sh* zzjf-<4M|O+YF~}iL0E5yQxvA#kNj(ZP<=}hDj*+azELk75Qv?!KU8p=EwsB&)-*B@ zpjPHGu+H;{{uTJRXaxD?@&Z=G01`1#A@7}%&I1<*a0Hh0o$|6w^5XZ(i>Vcc=`qlH z?OKz73k|%{_vN<9n4vnVnTU|;8pPRgsdBzZAudj_!0n*E>c!f_e&n%X0}himWi6yv zV)_<>H$q8jl&zt+P*2K?fL~>3bXT>IRR{Qw=^@;hrk4T9Wh#iA+4j{~64X0mg0Pd_ zgYnnV04A$k;JiIIIvgvGD5bbgO7Dt0X%hSJ)(OV7&`fOgyk5 znCz0X+|s3~Wk!gtUv^DV9DC_BP|ncq}cDKK(2 zOdI#xf0zLP=WL2gi@Lai%T0p&6#eIL3(I|drz*K3tZh*9M3_`F>)k}L*#iy^VUy*g9kRwUyV&L|K=~UX&Lqv zCMUk()%!q|ge+UnR7#@kEr5}nR+T!ilTB?^ygT``F4pr>w=V%6WIYbHO9`unR=%f5+T;UI4 zg8g=nKOk2a{+WHAQc{D4lHRe-p%>34yN!|kN(-z%aJ&M(aMbTeviy)pvd5G zH0gipffquRJH$<8SM~{kxXT7?#tf;UfKX#{>92E*y7d2Jo>}kk1~lWVpIR;`@n45NJA<|=B_gBl9muhO*WR-Hv)^vc^-+1 zFRYJU2YC?`H#Ng}^6^KtzWILygw!X8tg=q`Pcl{=vxzTWeY2105=OJm(WGFy_;1HQ zKo2x0y`)ryic%X@sa}8SrT@ACUJ=6fP_xtTia7VnDB;R@*DBxBlQMIz#bGsl=dN*^ zs!uHyY|G=8A`D+?f*z#*mbq$mOUstYiKBco~Ud9y*3gad@JtTNt7>o81 zS+nFrVJkN@`?K>37ia-r#6`-eeJcwLcrjme(Rq1gJg<(7t))~ATe!fzMv$Ul3c zfG{3w0D+sFq-y>NnLhcwzQw!nNGg!2G79F5+6@0cT zmU{Mt2)}sV4-GxU0<+xZ`?t|PMTHNYDn8G)EhnAd1E8IO1|T7fP`3YgY4N;cQ*9$? zWiTaGTm|`1bW1-6z8k7b|G8=si#IjQ1vPh471_&TUY$M2d3|A!S`EEcm>xNwA~E)d zd5+`pQD`a?M{EkE5m~3vcl3<4Gt0P#$6b}z&{FZ5Otqwk^EV=u-MH7?yozj#Ub%~0 zqOc^{uB7gRuiJ-3=`j@hzpKV6;7l&|+BBbbURGF>y4ZB#g(DE# z8x?_Z6XrF2f23mF>na{LIJwo0aCX%LrZHe~@_LqjmW$0?0}5!M>6}B8NPSZf-MQ)5 z@L7=O z5!-tLgf&za|6PG2H4TcY-<5AH+i#tD$Q?7J<9xG|%Zz8re92ve?9Ik@@(%eDu%l0O z>pt!U&GUx>a4E)%+6_vwTaa-qCNgfK&{K{B3{%N{L*nDT==dvrICa+Xmtm~q59*lw zoXWpb`d92LAHg2EJ@&|>EI6kEK+-Ca7qk}0wI5bA;l7GLW8lr%Fpi_x?J&F0#IS9J4ta^z!vgP1`YmGjb2Y<%$j-vEZ^ud7H$&flOR9od zm>2*hM^s%lWZyLlqmhAp)MyW`1W!Wippze?L~!1QpH)Osw#1^eZ=^^WsiBI^$uUdD zac*k=yGWwSodoy_)F`R;*D$mISNyT=B;y{0I3g?Ut+jVGS`Oj_r;<|1xht%^PMRih zeKjYAb-EYTp96CozVvO)noVN-uHLk0?c^${BUc;@ZztBx^!5Dg-IN+7e{|koNhcLp zHHr$0`U=@c5jExdQgwWhn0oqj6hCl%!VJ0ElzG;fcUO40Jd#`T2j+hWof@{Yv~*lK zznwD;Jxsc@k%wx#e+4Gq66EM~WZY7tt&t0bJ0kGd3ypMIBK_6%)rk3s-x9wI_!?kf z82g*hWOJ%tqul<-$Yi&wJYDXp{L4vVyLYV*?;(#yC2rR3j`4jI8` zWh4J)K~9S&>+_~SZ+%YJHa(-;lnVt`Q{%|F)`*&Fp)+J6z*Y_%@LqocJK-Ds^o-=+ zPyFiVCX7IqPw0K+68_vVkj_EVk*xF>r=^L_SHq(YIpsG&dot6%zsVQw9+^}LmuA*u z&H%;+V?*V*HYlg1Ul9-9KRu>{m&PZ`E>YZIt+g(nQ|=%|ir2YLJK%yt_SQhUNA|4C zw#_MCWsfsTm)AZ8>>Jm1r~|)ZDgV6yNtkj{3I||RvoqH~D9xFX*%A|P9CC)T9&5EJh531XX^QIPS)8wux?I0`toD7v z41_RHpC)&9{a7jIeP_p~b+ZmS8Jx(|j@p)J$$hm|IwkATvXm1?aNCQ7{HpH*c3Tyd z%|D8!x?Qnih;KNLohzoJ_d6h24wp|=UA>kOu;9NVFZ}bTx`uO&J`fM=jmNk95%P)k zJHNo-KW2ON+KETIGZ-BX!idCDg7enNC%Qx&QsdWq(5ZdItnNdY7>hTdNFBT4KnZy8 zzODAqJN3WJ@Zr+Cfi@^9@KC(Ao>6L*6dpWqn!6FK_yCJ*;b)L+ty&(ny@^%b`bh5C zRKKEI2_NUI;t zg~$%ClX-@Rpk551{@O)Dr(ODx@ z_aYc9X_IQ}qf{Am79)3OOZ;Tg_>%wnj#?2LDma&6T)0moNw~guwe@!O+7ONAW(ThM1)Q<6GElDPx&qzs@7-XXHZL^5X$)FYzD>fFMz9 zRaSheyNmZ9@8TFYb`k@JSNS#bSjo{bf}G1xg;WpTn2!Z0@<-jJ@y;=_n50JCYOMqP z{dtL^Cn}TNl7LtCCO*qc zMpdQfvK)32s)~y6mycbHcz>^I{yVPfBE;r?!0unmh`x#jm%C!0Xgi&>1r_>{ee>1C zr|z5KC*%tqs$~4*PSyDLaUZp^2Q}EfDEq?WhJNia;my8nwISE$B!-47E)5#)X>t!4 zsjI7=oMeHvWlchh3)R7{HeRP#7Iw_J&-yUizptLyujO-Tw7Ihe*Xz=>qyUdgoY{SE z9rs5Xyes^Lg{oXCyal+m5GvHZ1xoWW5fbocf|H}I=z2)0qSAK{A#6eU{btRtT22zwcfDy71(E|sMZX-^cd6V6Kp== z_9QXdC6B!DqzeDOka=QOD_j}li5w)vdgMSSfWFAR{AE^)W786um~$1*9we)(-MQza zkt2}G)p&Gt8!}%eLDbsk7VB6#Th>N4o=2KDp=l&PN#DT<^s|*11SC-Cw?{EF(K~bKkM;+7HrNkbmSjJvJ%H=JYtvZ!sG)a(L_wppoH^p?W9P_zTN)mEvg=; zF-^XIZQv5$90bxCYyv(KdfJSt3?xmXv zJD{nrYO`CS+$lKBEHyX}YX28UH5me>3co71J%H`siKtnpMn)Tz|KY5Y_N#$GfH;$%VA@*Ho8k1_kn0k%@wq;6nM%l-V7c6$!IFRoYZ~wr zir`wNF>bLjw9tmke3k`h=)>A!tY|ED6Kr^-U;doMqaoZ49EGq6IYCv-bzpM0Ci?34 zxW`LbOV;>&lCZ$qzx9Pg-2ROi#wXS)AwKw5)8?r{TEpTlF@`II3Sa~jgju|_uxi%p z^d{z)mwJYqYRMN<=c(_vACY@G37jt*RU_+4_H}4b&T><0qm{Ok3g2BbmVY5rBPgtQ zRWZkZ7)e*zV0pr`gqRe_s*9g*lnulhW;QhU3b^*HOV&|P*XQPk=|8rq^6lwY_OWPh z!NgOjHWSo*%^CrUt|U>Er+=hc&-v+Svm?gU(t!TB+bVHdo5@R}Q^R?ji*ZzFUxYtr z>@ep0HT;zwTyvovYkeGS^T)mVM4AgdK`mg?!D#g#Nb<-Xc$Xj_^?uG`IaXmDKJHW6 z^!W}lHo$i7&NBN=>RHeTzqh&>DFpU%9%10vtMK*xb(rw|^6Cqp9xsjycr{tNg-d`I z$4tcgShz_dP1q}-M%Oe!jNoeYzsCrL{g0@`S(^ayat1(NBFn6IKV-LV`P&n$a>Um2 zS%2)endC{h9*wLNj?GA4N#qSV$Y+b&Zzf15j5VKDo^S4lIDG$hOeMm)rS~dtAm~W? zsS4evpy%ZLH8% zR2-!OoyGs{Bnt;IVN^id!G#lq8_uKqFvY%UIHv};OX(`melptrDfu_~DPl7`bMK;g z_F>Y}{4Zu=T+}LyBw57tFI-wiCa_;d2PTFx_c8Vm?IMnbmrl{Fiprx} zStiPhFz1N5DZR4IIfB{hT6*Re&6TsHoq5)yi3W&&i%)Wl4Ypw2{97~;Exg1JXou9k z6amD3A{_-{Z~#%G_dhE+ueMlX3eJtJTxfbVSuY)>k$|)Oe{?E>#1PqhK}c#w7-*vQ z7ODEbZuG8#@QJ-%<5BH*w?mV>3F-3L^nsXnN9B^jIFMe)uWwQ&iUqQWPp zVuVVAycn|P52Z*=Km0v_DDZ)2T3N%I1U>5e{6XeV${G6RJuqU74b_rB8ti9 zu%{s`UcCu}_fYF)3zwHL#f&CDE>yvIM{G*gJ~-B&XKTVHzj+GAk|8l%er@{UF5tiy@ho0mj*^f_J=Q&`^cNyBpUB5cBWKt0eO;1 znXJ|)!!Pt^O)E}loP#lYw%3mw@66PPF`=46@-HFi#Qb*X6`=-vSa{_ zyV!~tWhVa{+%+@QIVdiTuuvX7thmFV6Jc^V^myMCYK$(2{FQzLkDfv3nNF@* zBcgi&7_R9}bS{008u!E90wOI?Q|0|2iY zOaH@>(s_oCxlq=fal~V|X3)3y$8K>3J(9|^ag^gW=Gi0Z2-0Bqe>9C~1Z9M3%u2Ep z!uVa0r{ecz^O11d51pw6xxL(>b5qqMW#u+pZ^gr^CfQcFDD}^~*PU!!DFHKhg%Je) zoRkT@FcA!)AYXfbc6LS3S>Q~`WZS}3g;W3xSw#<WuPE=)ST6>DCtAzy&1yYURl_<=D;E5=@H1a|>$%Oqp% z0Z||;1p!4HdUN7g?tXTi9o1!u-@4{{#7T{zK6692E!p-4U$}Dj;Q;XO4#6!C&g?`& z*aZGH7F}{wiUC`$5BLBd|N10Vh1^K8Sp6PHeUpOHhb))s*xiSC(CHu zh^!Iah1>?wAd4xtb~rp;|M~tPCWpN#0jKZK`PrKawV~#*D}PNrk6uaTkK{4eBQ_># zpKf~+c%71VGOLKDAuagt2590CHDQ$5LakdtN#CQk4~|*oW!1W3Oac(R4OfX3aITBMgDJK zGmw!D(~WD~eQlm%yV2X@=kF_fZ*%ODasKbDDy^kR&cfBxFS+{nEB3gHfotyKny-*t ztMj5cwUuK64?SOKdh8=zBV=Z6jci)uh4}gd0;1{-GBN-8wzrq(DW2iKDcv-4&mD^D z^tF6{G!gaF{aNxFxKveN*vFN}LiZ&*a z+t!tCJVlq@kUYEhbiN!V3cI>B4zuH!Zti zl98X8`qZL4$bweKc5!YO1HfQp$O88%n;Sh3dB&l7UxMq59{ZgF1~nnixO=eulj_a^k`Wj6p?REk?9IQUIe5hnRCR7`@kf>>ZD(omr$3I2IgE3eh)zIV? zzi7R0r{5$Fo{qwXero7ncuLmO(T4MkF+;bYpn}f-nno0pFIs_ti%Fx&InUk% z`~}$^+_^eS4qGEy7HCU_6;5x-82`@xgz&A-OcvM7N2H}M-SBb877C%1z(yqml@Ey( z$Q>5ZzX$CA+`g3;?~-At3FNWTUE$&WEwnL7w+_D<*k*n9=tX5cj9nsm`= zCo+{6AumS8Bt$k5VzDfmi1J7L$W zN!H#dy9(d+*a34B%zv-F_3IZ^QYYU#6O6KG%fYNpc0-|TsYYz(&FMSK53Qqtt6N7O z8?Kr82lNu>#3*+yzV;1T#Mb&+f1z3zRlt1-EDS)%rC+^EZK7Pe3ttm^fZCzTj&<0W z>hH6~P_gzgSi|WYZ(8^%LE9l1^EN<>%Itj3nf2!MV{GfpYB>1cDdjTmn32cL44!|+ z54TM37BN4@HS#6pQhw!Rv(oEvVVf+HFMi$iIUTNPFuWCD8)>GCmO~_)jp_?{jQq$l z>gw^%(S`&!clkExx+`e@A``4I@0JrZ3=lSr;Vracu>``05jQ`&?~6u;sP1Cv0h<*K zd0n(rtH`ufh|T5sGbEN(Qy1b+zkPWqG3jgW@b*q#b(cIFBLpO((ZqoSi-O)==ZiTF zECIHv^N2ZdjouU&!zHw9R6Q?qNQAq6;~Q>X!oTf8rF@6UQAb1lefxM*s(N{xh;BOG zyw@BoMz3r~PQizeYNLAsjl-^ZKRXh6VwK0W%NT^0!~=tb-8ep{;tlhtV%o?D%$d9` z=MPk|w$lqbrGtmK5m3X4o4wJvwtyN<@NFnj&E^*+A)QJ6LLTOBl-i;ce9*jQ!=(LU`BfjHp>rArm61pp?zH7ZRp%3fB+|#QS|d z2fZ`tq1C~QYGSw^c&ETOl*QUpAP9L|ci6t`?%7&*n08z6v?hJm7*|&LwQ_Htwrc&i zo`79bokhSt8yViZb~ammJ`g>nmR|geNWEF=FKADohkWfEf^01KyR;`6#ht*)P!r(m zW}slzt?}aS65RpR*XFOQlD zRQbB4)?^)fc8DF-Y$QU={BjJd?FfXgC6{;u4e3#9OcS`2{OTz&ceC=Xd~dfJ=~?N! zcoheF?+0iI4O-h9gj;I_WW7=(-*BB~EQ|-ehH#l_k|G7jAq)G$S=oKi0OCR|=X6fWI?5A2 z;btP>k9>E#b95;!q*O!o9=4;pn_DhgrjYZ#$=iCAD0g^{0p9PpennpI*Tgp0DVDz~ zz$`fn*ZRfserbjqPg+)U@Sn#$h0cv_^nPimW{nr^AeCm+KwWiI3t4AP7|x=jzweui z+*9s0%{W=W8g-zrtS0?KHB7anXX_~x4pe(z z)W&rVf*Sh$qw0!${5GFUe@SD##>(FVKdUun2fpWPeHir7H!lmXPZ+$(BiwnrM0K;|nX-Nl z2vBu%Cja2fKL5RdsI6|v&?c7vRMBG%aE z4a!AaGjmD82^BW<*HGuvySe!S{$UE6OmS!uC&w2tav5O`rvrgAjn|v!l8PlxaiZN0+CHq#c!__q^caE;oB$o%XNiy>wlCL1%pja38jbp>bZ z%9>(3xPTKnVW;lz=b}(u13(Q>4?hfkmB)6TM!dLRX3NAWK~cUx+za$WRL-YD=H-xK zr5UIcoBX;z3oKVRunI06aFpxMOKs$SG&}XTXYBdhQzFA7Kmwc)l$Ke?0r!SL4l5-J z&dA67IkA=`&>biNg4_cYcC6Vb3P0%ERS^Bl$2L+gh}bsfbGvs2V>r+8_?sZH!iG)D zWRAR6O&swYDmEUZV!e~nXEV5T)d;#>1i?Ub__g(OEZ58`E$7YPLoxpwVJUkuu)}qv zwx~v0_J(rh#oBw#ZAxhUF(>BJUDK-<$^{7ILB`#-nb1r3L!q4Igyn_Hh`vma9B zUSN_IW)Rh972%acbU_NC-+5w3oWf49S+x^t)x2ZZ#3-jW{7McTv1n903r|V7_pu1J-su-{HOHS&ELEhWlmqt?A25*{*#2-T7 zrjOb=$bKKuJ=MSq`bA1KGIo2GHJ3H~S@p0(xt1&^uQX8^%YU~qUD$NmnR?S}N(!y? zfUA9WI>YBfu)~Lj^LySkyppjs!Lug{5GbKT2kR5iiwq5?c0+6Bb+~&vN&f4{w~;nJ zEj~4C3dLug9L>V?Gpg7ofV2S!`aR{33u&B}hZw#tIZqlHR7O}1@lgCSqdzYRD$zT} zB$I$9fglv!sP!9CALdvPg{q+Oz{9+gBi#@V*W%GizxQ#&>)3Sb6F&@(yf#SSZr93^ z0V?CDi!}+wVc2~BRRWzHK`j3s;kIiKAB{WFz}N!~7jqUfm*23eo8o(AQa3D?*-+rR zuh*P#?pdR3cU`Y@JK1LfjX}V$AlE!XsFf`4^6&g_j?A(Nb%14L!?%tfTlc1@#dv;Iq!pz0qd#hL_ zBZr{(=9%uSTN+H9e+t?nJir5kC=|X~PK-J$9))WhSR*gvi^;A~HA>?0`z*BF^6dQ% zyHI!Zy{y9aa#9$4C$U|X_hZ857%`9?_HmgmDT~7h-(S{SskrT?hDJ`Yl78-_-rk0? zMfMRJf}|H~#Pn)pWftS7{Z%7nGGS2c&7jPkVobXLS6IPR)PTYhdfY&+UmM=(bJ3iYxC`Hgxnq~C zH)w(sPGA0;B(-G25guxhvgr{>xzn_3o71oy-NvBCN((OD-e&2xSe zftt~I2!lC~UE~y-Wr39+?ik?auIC%BL@Jx%08*1oGpw;PmR^?bJKkW}H~Tt5)^yUX zp&4L_*uB}$EM-iW;Txf$F*e6&Rl|#k<%&g&gh65+6HnWL+N*LWm*6#(4}|!ia}xcA zJgYlTH9fUj$E!Tbo3c1C9Ihm%n4A$3`&5odkA}YKyjpMAbg2}AhTwvd;e<@C`{#S3 zyep~+%fiA~+qq4Id396VGzw2a307HpUVQY?jmSX9SWXO9@AK7%BadZcwe^rcCmgoU zEG%zi6?woKhk$ni?Wx8Ol+B?r3$Vlm`g>&);8vPcE)bL*xCPgn(ybfUL#?cx=uUiN zcXm~Z_>jet7Y8zqv-}SzAeuXFpz~FF4ri0~y2ZK`O)nbpO{Ks{`aC6DOdL}*tWlf zoKifdSf2Cmj7pH#K2!2TK5;+kg3AtF<-Kb$g{bi$p`!_%w_!hby?9^b5jkk1^jHHh z9HWHpVMzDF1gV05X5L92EBM-N9lK6D1-+A~ul&m+W7to5=m>2mj>QOiU!_OK7&bHQ z;f+l{Jycm+C}DU$a;D>~;ge#$vUh#*<#T?{kPi8Aa%f%8`BX(BQ4BZDkLh>EX2=&u z@|6gMQdgjkgRNtd75!=!<_0r6b-2mCg0(Fg{RMeC;#-FqQ}w6p(&YX(>TqoW^w)ifRKQwa`tubRyOhf?Q0J-a%dnJYp%Xy0ci|4`fK(=H!UZK@ zgk3Kq7bq{Xu_%vrA=3}Srjnfdghz$@!nQrZSW(G&ZUV+)ua-9w#9;2Jr$-I?m1%+D zQPuT16fb4E27eGb0e|-0!c+~?|A?XMZ0O~>UZ0%%ZD7fCwIhs3*`%y1 zzGqkADy@C~3DS(-tg#%e{-CM8*d`;2FYO>WgL9E@bEYjsZwW{9R=$5-I;MVA$!)je zB5h~Kn%!eSO4wgKpv<;6MQq}u-?36c#Kex@yUo&T8&0V+ zhcN~jXmJy(SO|?C?j^Si#NDyIlRLwdbosV{!>lfg=+XHRd14V^9cLubSf2CKa5=vt z=E-=#(gNt_I}5G`f?Fem#Ib#gMVDr6&o3Tf6f2&DEXnYv;nQQKe*nEI5DN>R=QL9( znptdUcyiQ$TTvb9{RNo)5&Zt4qjc&I1HJx|7Qe{K9T}F-D?q7DOcn({<9P&q)K8jA z$E~*(`>vKioQzQ2%& zgd>42V;A#VIzF{gEv@@>zgFlJ;ly(EgKWMhb*fi1CiPXShd(~Ns8`@u$5sqbeAt!zTnP+-&fpOvEug?x7W4p z-h1_I5$%S~>>KC0B5&NluUv5Z_urSTSO9NxS+RTfZl$1Gd!C(E`n}||Qi)qD|5}}8 z>+vT4iUxi!$Cl0U9xS=*$BY4ndcQu;k>ja#ED0%|9`pSVb`SUIremuR`|C*T4GMu_ zAY}xFuqRq8iuH5Lv^Q%s5%@N{k!HogKt7&TI|I`HhT@eg&>DdnDkuvO{rfydnWPF^ zzp-oss=Y!NbLE8MX5G>YxWLWI7DV*iODf1KNAJS62AENbCKP}E)e5NI5 zq%r3JIn($M_Po}WipCXT{Nm7>p+8x*A6PAp2^-n(zX$vdU$+qi{c*D7+%`ug+_9RO zH}-0t^0>Y8(cm99(S8b}X{4-K$WYz3lo|cgk+Q|e!r4-}i`Fhca>TnT#$^6+Zh7 zS&-K$cg@~8%BQQBNAm0M;fkJo_f+7N1aF!~sy1^uvCDreYepC*B>_<@uU;KdgvYvA z9l2eUbI?F@1$-?))ZqIW)R9=qGTgUi1N@P>s0-Z)K zdyC5a+o-3A27RuO0pDJ>3q57JNxV&}f#|EfAaa$e)t+^9oriO(W=a+6{4obf==x+! z7_E7KM&#{X*30L%$?5dn&~X>K@rDw7{_!Sy58gRf6N-!XwE;ofy$Ugc??tugF9z&R zEuB*@W*G=K+K77s8?#6TDPQKOp{sWbiQPDjlwV0%ckSVHq))OLkVyDz6@7#t0ciTrKj-)(bcuN%)GjDJj}mXwiIeN4qg({);_kcS(j zj1IOzB^E~bWfijbRY`wdiGb547k@ePpw5`r;&LHl^&sDCLm3lXMOY?OBqf5SNk!wX z*3pV9LBijp#+S$DZ`fqL)cMm9pjkH_UPS4PBvW;}LR~hIDd~bS7Q^uT+sn_(X^e8+ za=24;8+{?uJ(coz^I2LykdmxKB??9YUs++M`yTFzvuVjcMxyp+IE2c}CEX~Yo+D>H zaxB3}4W50c>!QC3sVoeejxbgrALq1G<2WwgFF3rri`ZmLN1D4rGG;uVj@-~)I*o)^ z(Q75O&Q>qVABsM5WwG?LKK0*s=(7)+bk56yx1iEPLf1z3&uP#be+_+Ezj(Qkp))FQ zw?Oh@@7jH+-TC?;GQW;(z`a){r_kx1w^@aIJN(Cky3xFFg=Vjtijj}#))}k9INAN{ zBfWy_q6>5{#77VDOR~(T9u?jGIsL{rXY{=)|DO7!ooi9iI62 z@;_-`nCNd_mBF3EOJPwCcgK{n-t{J-WSN^wB%&0W3TTatQ_InGLIzRy;(xOFTyq`9!qVN(BYg{%kffMBPUV@;TSv^w0}O+bAM%o3Et) z(F!t(&+>LFXpXD+bIK0Ro<`EwxD~#VGiw3T`m8LHC#YNZ$G=K& zjrwr!)V-|#aXIiV}- zsDW9-<)JvHIw+h84PE%>0!Z~pKlPEHjU-)c`@*rW8a5i2N~cB0tR0B?w|e1y8i%#I z!lL7L-JCBQ5Z$4VqpW#~=ZGQ`?P7hm;-$vy_l)9m+F4@JY_}$2T9%{b*{BHMrf}Q5 zt!9LKdbkkX6o4P0Kav?a8u{E}@o>!E4FXroZBm7*F$?E3N0vuCR0%z}U1R=g#Ap@r z;v#nF`kOyB=A-MkWIBhtbwZ{j1E053a&RaGL^X+EQCO<+uSyS)_WTsmm4HyahC&;2H%v1<0Bz36b} z5>>tr3sCcf8txU^{793Kf=`bSo31@OLsMZL>_w7vy;7HcB-KnIne(qn%$W^BqB^Il zMVH%T#cFBSqqbeoNdY^4u;nyPs<0eWGEAs8r5L&hgk*f$x_QH8Npju{DYqC%vY(V& z8qWWk>_)K8DSP&9{R^2rsAYjggRfP{l0(Iph3eP_^5979m7(HoO7l2-i13e~b69H) z3|)2~>^6Zt*EHn(Z3TQGBsfPP+Vx+qi(i&J%~2zsQoLHcdZ@zE$M*I0rKsdMviN~M zvJ#{Cn&X=7d173gmgqo65;4K^+uWiFM9()G1w7_@hTe&sv=_2Z-3yN8YQ?Z=>r4Hs z%9FFZIJBHCWa{Hf;>CR8_jN~DY79Y)KaN2DhD(?{dPim2ee>pXk$biDM{OFevG>{w zn3iviLss3}Q<^^zgdn$(*cXNC`>2-UvX8&Gt#dw~$d07ywYY5)*qt01$ zp>0ksGnMBIBXwAGuUfsE=n9=uk1r9;5E9tcMTkcpb$8VC=Ui3}AvHJQgpelATdpF` zV~5ePpK=Ps-=h*jJ2#u<`?B4{?T-ZRyIx(L0X1^wAjpLQb~Bak?-eDk>!&@?xc>eA zfBY<*b{H_Ddu+Ojy%+)wbH_9!vJ?E9#v(&>EU(YEe5RX({MPz&0)f@@?-86!b*^fg z&NBZt5dY*l>Wf6ynm-OVn;8F`lex(ns5u0uDppaf-WQqh`+0uxSi&^Y+oAWWDsa}~ zhHodZ9=|_Vv_odtD`r!kx!0|d6uKF5w?DRv_sd~H~>E`+xJIXVB>wzcvFLr_7;ZX5r)hI8k zLxy#o+^s%_cKN(JeGCEJ<4~rCKA^_Rt2I=$UV6&>XKnSL&^?|P*=%qW+c?!s-?QO{ zOM%a!FCU!FTUFjycnEXQwtyanc%LVM)4-XShJ2||fU}7XP3?@q7sWHV{$VSTB~A;2 zhO`s&F!an)o>OuI_Kz^jWK1WYC~I$VllHUVqxWNdyJ1>qRw~C3kZ(F`qMm5RE=Qs|i_kR!PCui2GD`Ul5Ha{$m7YN_x zE=S)Y>!AGdNw&xJLf-{)wyEvfj85O#=Us*H1P4$<` zwlt5F@0|;LW$iZ@yZn;3gXr~+ym5+j zY9A988+hu7Kr^=ZxM9;84p)u+eaMim&2ld@bE>oUXGpJa7dYu*E3TL>`;W*wIn58h z)|{LbOio;5cr@i^pX000V*cRSmXEv8&t|NIg1zC45Ofr}y*^dL;o}SMA=y2*QAO$H-tJlRC`)ZmD3W+P{{zn&9zw@W*4tqb_ zUDV=dv8}Us+Tgajj-ca88qaqhj%i(k7{RHZg9I;Y(-KIm%I_00P6^cwVzj_1)r`4K z75_dBmGS*8{5=G5L-Lcm;{lGu-y9<>a361tRFfT2?8ngK&Ggo#bXAMHdtlC$nVX6#ibwk z&z492z4nwGmzMhdozFnyMb5kJN-m3oU^O5j^g;uuz;}|vSpD6k+2)Xz zb!VO5LB`DcZAJBia@n9=bv;_)5?r;M%YE5nq16Os*$A(#T#yM+0Xv7cp1y`WAfH6SZrZ+94BS4xWytlxG%q_ z@cFW<>e0===}Cr}b2{(Ejv460(|QiuUzhl9Hy}q+rs(3g=>OyFOW>hizyCi(n?%Y| z%3ie6O{i>jle#6jC5nuw6r#DZFQcUF>b5D%sP1hcTe4&uMKhJH&6Z^_GG#E0!5Fjs z&u2!r_%6TS@Bf|e%M#Z-pXWKt`<(MW=TVhIqK@w1OaHy(3VOywYUsU(-FT5ef;`;T z24c?!3~tyIRWlUZMvI4Yeat_!1a^8=JnL6fdKnm0a|hdrH?T8t)}E&0R}bdON>vaz zLwtqz4Vx^_mmirEAdaLQgD}+mF1!mozqT!MIZ;rSHwT^@6+W`>BYoA+tY@%E3y~;n z443yhNE4*3^2_%1s67%c;;pHec@g(wkmTgq?gH;k3w7ZPQUY=u4-Lk~hLx$;bN*az z+kCZc?^KIV`Af-Zi*mUW0kei{T6X_7(uK*1j%2%eb{@$8_SX}gcfWts11o=34bfTk z?N4)U)S2#5M0%wIEu^3JS&0O1%@#qg79x9ELHy(%4dm_H4;<>N47${h^@Tyy#hh2N zURn51a}a}N_ZsS~$_X))V8%yY5UAx8D^*G_ec^OA8Ixy4&tj1GvyIPl)TEMEbR?>ARv`G6y*WTnP)xo^4Bo z@}?qYzJSR#l7FT15mG&Bh`FctozqTTc$9HvZaf;A`7k^M)e5;Kd?vBWNm)q<$=WZW zCvM)zJ0q}~Ja8>I@DR%lY(+O)-ub&mD%2E;&sOhgVdvf;v0t^e^FQ}Lks8P|$18kd zwOP+NvgMZIlSLcnevVuMp5(Va%9(z~(eReY{#3aWRf4WC;p6qo{qdP~=K^>r;r8BJ1f8Qd>DKw| zp5=@nui`uIM_g(NmzLeY&3|!gnr%)Qi6q;f5sZ^EZ~M7!A^3Q9zKy*4{1yqOgC^Xt zAnS{?v`QXL`n_i^c&a9JY6cI|4FoA@Jw$D$wuDX)8Fko7miHTcEoduk33-=Mdor0W zn^}OdU@ik05Ls#+2_$eCm^=(Am9ZIO=|@)xo+d66+wK|h8xHB@kd>#Yt`$a)elri@ zZrJkjJO|ft#P7L@!T`P8u&{_XHmE1-+IaqTS><&Ev3ys#iV-jL(rJJcut|mqNjaj; zBt7UhgY*(uz*Jc^`E=AF#{F7_>+HI2cyM%!H+Yfnp1LxfmHCAq{5HN5{X@dd-0<1^ z({=x_`WHrN&5rvE=dYhLqlcRo;L_^bw`+RhZe`?)s%}B)oq-p@+BmE(X@TLb{q06A z-se{I?2#;$>kwLvItaAmYs#)Di42XUKLH(Kqej$yUu@lc^aJ76H6;C3Ep@PD3129L zqWq6@i+H#f=O*5bZZ^5FszrGQ@u~P(ogq8jdvjJG<6K`f?6Ye0rR@59s=DN@mHIk* z1|RC8&VvhS)>e}J9MlSW<+QA7ag2M+%A;$$&nz9l(DfNLC!(^bEA%53L73Z6v+x2M2RI7JyyQjA6 z)^TOlfg@3g)zpM7a;wyOa&_Jb53XgMn7OGFb4S`;HfF1lXcY|3(RV!eiCd^9=$j3* zYOvl1G!Uf*R_tAhspro}S3F=>QE`JG_Ex%ExI-;oV&+@ucu3hK443#Gr%6*n!ak3+ z4CNP%R2+`~7fW|TJJu~_fz$v@=wFDWV0U~w<+HI#y(b;?4E=LPw;(A-81^<^E&+K7 zHN+euO1dg)TdI3!i^VM2JsVlE8@WutEZR6Pv8HSns-5Pd|CF){(TTasU5+Y%7}9f0 z3VA>FX)~QfYd;%SdzGZ(Fer6NrB#W_P}Ri>$g0!i-&QKFt?pXMx>7a4mwQ)~*o=$! z7ddOXFq8UL&w=zKtVBHg*4S#?kw^QsKZlePRGVa4?q9rCcIK()oz-h_E(LgKwht- z=>c|nG#P$sX244U=1Vc{y_|>;? zRQZn3S!f@DY}7brjOnpqd?b)j(iwQRQFloU3CA`F!oyqk{3v898QS5Qy%f^@`sWX>LfK7X>cE62=GH=b% zRiR!Ny$n2NyCXaBRIF?`YUHr*C6Q5Z5yKaEGgk-~ zn{ch4I9xVDLA;j+ION^}6Q}txSDA<&$AyQhB)-^5n8VcoJdM*2PMRg7;l&T}zq$f?{|&3$jZg>! zy7LeM@SL1N6T(uG05_C#*jg#k>|15m3ZIN@8Q1B+ZC-BqB4_WSBU;88>skb?@+)eA z6UK8^qRA}uNW!s;P{%ZUUX{60xJOOTZ8i!cp4m2bz4&`IXjS0NM*XuKp|c8~lyazI zEke$=CEkyQ^@A#CTR~$w-g>6YW}SpKP34-V1w=~NQ`7MlyM+ZlM_dm~bMLDb^)G*? z^tJXuLvS;;v9?^1ydziyrNk`esL5l`=* zX5DSh|F!2%RcA2iJeL?Vlbq}obK&&{#giv@fV56-(+WUm8iRHv-eX~r=-V3IqOD-l zYZTJZO`E-b<+gAx{}>cbEa-|IrgUM%DAEs9iYl##EKR-ps5enzN9D}b9kX1w=sLL=%UqmhQoSPU#;?wack@)4lW6UD__VqJLK}uQzTM-Fk%r4VLx)Lc zQVGM&hQ&!v%3(qyk$X#8{n_~6**iep#1ZvROW4#Qef**hOMO)9XYVUg6DGfeh5-Gr z!U6a}PN@mhTxDC~Kenxdp>CJj>K~Cbm*HX5hiAF7OYJ>NRg+si7rLj_3?DKw4ewX) zSo1|S^lYOfZ)YW!vbgPv)V6~GBSF+u|n_5 zEDzT$W~|@vRFFf6mM6<-d5gflR^fYV{1PN59K0SC<`Ud(*9;Jbd=SvrbtS{)_RU!0DTni@!;HeF-i*m+mWjF9qrp33t_G|gH;WN+dO7$x}hjcZ(cKFw^jG>Jd! zUbGI^HN#eMTytyCn@5k*O$9qlwr`J|Kk5HY1Kg=w7$|n9CtrNrH%=LjR41KHivid`qgikE0Io_*Mx=Ztgv8p+?eXpMtHbdt%~ zmx41(7qm58v#%orZrdh|kRX<}0`SOtqkJF=E3|!=K77M`9N)Au9xh;&K(^_d472a_ zhqQbQM8gGPIanyQvyqADyNqqn?+IBh`}$_P7}MrnT6U+*f=jx{&SsAsykXmmdJd}} zGjCC%;8Lt>MR1?^=)S6HaSf<4K|IPnmoVPLSKuaYezVP3Ljia-rQbJG0nAoIS(o)4 z2$vy;Z8G2|*a7Ehj;LKwgWXjFn}~?CUJW^!33MVK4;z(eB>gsw(ZyTP?sU{&Meew=3U+_@RV`WHpe%q%9bq}8nB zlEg=Ddc_Zxolzz!E?|n!jrN?hG*Cu5+lG;@6E3(hiI{oOQ>e!hLS+EE2woTcAd8HQ zaoGXdND^<9O0(`5zHHl&Jh~TZ6e%EwEbXlMdI?qZr4EJsoc+idpwp+it$UjUeg!Qa z0aOuv(sXvy;Ggn=RmBz^utKW+phT9IyS4iDz3Po36#)fgQ?8BOdw8amgQ{aV_U+hA zX=#D*G-snrn>3Q>`qfb9wC`!y&BV+?$es;RW0vq|0Zm{t&VnrlsheTIfXmK8ZMV&H zA*tKL|DXpKQ?#zW=C!un5&BF1H01FVanv>&xnth~m*jbBsLB1JYGNq2G1sVyWMs?Y?R`=DUh1frC z$;HoIFzN7TBmJ=&>fx+e=mI@|o3W!a>WX5gM=?6YOLiN2d?u4{{Wc%}-$i6kTNuFYr8x*S<#b58ckA}(QM5A@v9DD;- zZ<@3nMzU{Sv48gEu6-A|IM35XO-^4MzqH*m!(Gfs!{AcjugxDR>R4gOfQp&kEAjR+ zY^9+X8m)8{uMb_PQ({It_-&04%gLg<_>-fB-(Lcmi+ebm8AA^x5Z{e`iLjG|v|;vc zClzfQ=bP4!L`PWFe_sm_0He>7ezfL8&dzmz6;LwuuIoFOU?D0yjAkV zT{yQCjdes(Jt|R3AsADIAHQ_ z8diTIhlD<9ZoZX6w<}Le)xQ(tF6P*l5WQYQpnzqS0MI9>-v(f zTKhSYBBuIc%Xm!0QLWitgz^k^qeAA8zoqzztD8_q2XTbrdSvR<;`$v zN5h=XWPD3RO)uxTDfwf^tN*m9w?HZhOO>85T8PxbwNMPxbCfmU*AyF5M_xQ=h^6>a z;%#XYE@1(Jul=dS*s1$P%8(?sNIkfJKJ%dM2FVbh{7$K;7OPUg4+)OuBpY%hAL{Zt>^%)~Kptnd}KR z_Wfeg;6>#gcU@g1iY6GycTHh zag3SI)*M=uk>j*PeCR^fnTqZ$a&aKAzlhr{L;z2;wT1;tv7+kSZfh^PF&V)@E*J`T zmZtRkyrdxGGGQ_$&WD04nt4Vf5EPrA&j&SSqL*Hvcz6bj8D(^`!ktxILa!)2T<#=? za0jycQ$;8djvob!*oPm-H`WrL)EOp9QWH~~@iyZF`OFtS+dWnG9}O2b{VsmtuNMmQ zcZ@x(Swjoa$KBEVZQn;(w80K`#CYz1+L8BT9~#(UYCT^TH-9#BbS&7bo6U*UO&BzB zyF=OB`7dT$W&ReakolXm7N5^tu22!MTdNpfe!S?#+3ia)_r=8|Lxi9J6$;c_;5E?_ z{cL0==@E(YNV3#I`i$sD#Cx)+@J_<3%fc_wZ-xJaZD)T9rIa{UlzE0aWzb@2eBYeR zlCapSX+hCD@o#5ZZpk`6)j{t{&6sm>r+o#dWA5*=$yH@QJr48(&g8 zh8#qq8E2_3fm#?euAKC{qHocUF8kU2<&+X$eTI9yAkj09Hok24#wN(sp(Hj)kio~E zosagN)Q^)G?Mt@o>Bi(dS|JX;LLpbiv}K!V&-ezxiFYIUKg0!c93>4AEEDnYT@YS( z*s(rAK>t5T$^_tZmV9}(rn-wS(N_R@kkqu0KMFRNX(7eEf40flPt;m_PR`Qf^m0FxXgEB7mlQ7H}5~I z^2hqhzdCTBU;81~LGh9-;yDRDb8JiooeKhvwc5xS&fhQggS5}jNlaLb`W}m=QIM{RSr%Gu!;`|Y8@Qdo|LUJOk z=~pP$pK@uOsV|P8)^`dpNApLbSNK*bWS9l{*G1I&c-l8sLQc~-e%!m+;nXR=DXbmO zWgEldZ>)U2I67)|_QTszQD=#&<%UMM3JGgmt<>z29)ceiuUKbZng=vRau5hvYjMAK{9No;@Nl_QNyD#~#wkPeqfBxLv?LtC=+IM|| zGdl#RpB(u7nA6T*VGa9c?LT^?L$Xl<`EO429&m3v+|*nMm~T&sX03yd=JIi0_* z*Ink9#Ch&F4RPBSR4UDSjVEi$Ns~i!Jr4)v@twkddb5uT1 zyRC*Kp|z&wD=IgogmyARe^IaG6H1c~S}ypn8`Up|{5ANhLA_}?Vl?puwF;(7nkhwg zC1j{$qq+xg10SpNPB=*QetPb`F6Z{csO^+YzoJUAgZl0?XSCccT!e5nsQ7e7BBxRk zXra<#l~95YD))v~kTa-5Rl6WWutIS0!-Ksw0Q5z;l4Gdul9O^fhBkaozOldGz$=bM zx0~;$x>FR!O@4BW+bt`JAjA$4B*^K*= zU5sN|a~0P_Rg+mN88?c-M9L}ZcHGH|ylg8~&)gPcd}TKhK1G}*5FR0$%hSNNu%Ijx zu>e_=N_rxh15-*S(LE|aKXS7oYmR1U$^NopYGZG#sHD;Hy3e+f2)3N}=DDd|!PRL< z6tZYWhj)lmSPAq7#}Lvo2_!XAJMie-f7zOOeBaM>pg+EbY%LTb@DDPiokhj~(iTFT z@dKcV{{8AY=*hmC^Xou;k|8wjXOrN*wWfxbqhs;GJtd)h7kuUvu#vamn$AgaC@^X1 zy^%uBuRgf_1;fpMus}99t9D^cU{4C_R8g1u52m`vDj8>hb)S zgg^K1e{ROx*9dHWjhtsh#=stDaDyVJsgop<<#0ye5w@YqXX!5z=!`urv0vYXZY|no zFA^V^)$$)O8DwbNn7y=~?MM_mgked~ns~Vh8`=@#%Ei4YBu6|OY<9q(XX@=xi zJPV_yX0Fih!2)w!;`O@HJwXweRnF=NECp5Zedgyx+d$!z#LNwygY?TIe_a&ZZPrc2P)^!WD!Yo1d}5K!Y)!$6R4zBcxb~bQh!>ebsq%ty%RJqD^gNCkxLGcun@! zE`NvSf5Vag0*dAxMsI_Y)xMI-Vi9oL995x~mYG;ORMOIU*TU2ihJB$65kV3c%~r@A z`Z1+BvudP}KNoLOsK6J=i%jwqm5&Ra;bs%z)ftuSgbTx2AbQO4ogB=FsR)t$S33wf z^qm8Kn1q%vF_;^SJ<{Rl&{|Slo#eLH=+4eH;F!=OixPcmnSB`XQqWw_h^y1IVc1a* z>^^J!1g6AV(o>&qw{)u9hQQvSo0Kl5g2EACA?YGI?w)Vxq!mYyw;q(d9T<@e{VYL= zyrQq%ah9ai`Gz%GB0&`4M_J^fiHiOOO7BMg19o?d>;6!5X~hX%B`Z4(3tL`Lr-CI< zeR+NT{BIg^H+J9LA@15y@?=ipP9-N_TTj;O7h351PVpR&`@4;#Hxp@Ga_ka|+faWD z!fS%S2~G76Q<-Fid;^BSLq*+a+HqEgYp@+=nSft@={z~~%!zFK1#Q9fU<%gSOE)a6 zew#>S)r6i2{b)Wg7Uj_;>)-hE1}xHWzN%KV3W zD3B*%FcSXWpGdkIx$HD$Ktu9hR-Ocn0{oH>e(%YO<(=3CNUvlj+plD!4qB8D8u{-~ zcy9)xmL0LSC=TyWHsSMnuTn}@<1w`Bj518g#x&L_N7BC?VrbD}iL|NYG@*^R$t8G+ z;6vG&-Yd5BQp&_LW+A-bloPrC=FAM2YqA2H|eV901{YLrQhp=lMP8E2INW29K zQq#L{gKC@4KB^)t(m_R;h{oZ?f>)M1I=-0&-}`;y{`<_F1U#!HV(OO0I9)1JDZH{? zb!p(SMoxdR*AT(1gEU^Y9Z8>3hqb-7@1((&g@3uF9V)oIQpKPB`HE5?zb7M-O4%Wl z0n{Lxi!?|){C>rd*S}pC-tiJSl%?d0q3usHS*2ddQi;K1@@1y)nKMUO@Zi2ndyc)$ zplMJC7@%nFiIfW>Ri8A{PzCGL2&bNwkAD8ShOc$ACiTV(jU{R@!69OELk{nm;Uj1c zo>+Ji##IF2zOiRd$?`b7c9Oc0w>WNlmziTb9_f0s+I36Ar@LPv6-aj8`j73Y6#rSA z;m%&+Ou_GPKKD=@w&3h3M?+e3(LIJ)LvtwWd2tx)Q)b&}wEe8uCLvuxqzOA#Bd?gH z!@(^frmjpS7CHFgC*Cl0r1&z%szOac*?+*q?T`RgQd}2zf#iSCcI}#&3q89Fy(bvL z(}JH(w+mBjjOTuez+()oOGinNG99PCR&MXHg?j*ql>?)jp)4bhYWT@i}4PIpdB+>VU!&kA#*Tss$?#F zUa0V@+f`r^T*IFm)07ok{krF+)#+YMR6+j7E&l}szl`i_XA&>KRIJ@N|8uh?KX5h1 zx~`cQJLJDP=O&~p)-5m}ASuhtHa)#geRC5Gt5KiSJUC8qq&jRdWkR>UpKdx%pvTj^ z-f4{PoU*${3kC}G<|V&+^r*`%`wLy!qTURT%K0?>ClWQ$$4MAtZYvf(s`Qv2--`?Q zJ?@^R!9kC4Yv9R4`G45=28_3OPv$+3K82fDsPx!rtxSyXpa1AlI)Hv|*xv&|@;%?! zcTc;f03E=V9zoe0&_Vmy+~qkf8+AVt>#42TUEFw(CodODztd7*7T7Vjn-tlhz(v<7 zG>D5*gk@gTlnYj>jVa9;HF+G-(Rt~|a}yy!LB?n%(0RN-s;&Idm%a>D!RR5uz%U=j|t2x*28}R=@+0&C# zKkaASUf2rKVN2qJzQD9+YQ)!yUh9$@Vi;kxto3R5XX$MvZ_}Z3ljj;%?$_Cng~5#Z z5-An=zeOy*anz$WC$*oEN6+@(x4zR_ z^xNNf2lb!6dEHFj1yNg;}QrXbT(XE%UF|!TrhL1k4y#e57)x7F0%z`F?RI=~`3J$yH>CS*v5Bdj`@1B!qc30Pc3oCVd- zeXf2LbmD>x6 zJ`#_MU}5+w@o;F&AaIx)C{+2?=fO?6ixZX-%6~EO=5qVXBcv2369hjrc(Txd`fBqH zlE|sxrd^>M*eCWg`(6f&w@INFmr+dpoEotQfbboL@jbGtP>>SI;M!r1jQNtv7@yld zZC33GD3cL2KZvwMO`*KOj~|8)eXl5fAamAucS(|J7=8Q^sfw!g&*O-m?QQxNta$h} z9pnCoJIjopGCA?t4#mv16 zo;Q^L(l_{M<$rdn;U}OKpW{IOX!6>)_wtj#O!Shz1d^c1#uxW%5PDE_nb_>o0Di>$ z4B&*m&sx%)cat+&Z~)^T{#q9K>lN*S>?|99kl(z6JW>yAIfgHYS?v;*v_ab>u|#vt zuTxo@u0=0S0B^H9ICiZDHsFJm?LxgPXSjo|e+F(^9&pi0cvz43Bj2QgiCq7>jg-c3 zl0Pa7|^X+J+9Gk*X0hnGG zbH$z)v2Z`-SnKvZS}JDj*Daj}ZSzWx>Xy$JE`7ink)<#?ptUa%SB3MAB-GrH#JO+z z4~HNPfnyzrh1i~75=~1!1$DXQEEy@;6IL$0V!nnb#QLsn1;A{g&B_Zi_1PMiZ)TQH zDC6VW|2ns93iQLybmzYRR```m)lG=}mZM9{=^mEmBxb1J^PC~<;8FtymchJo@OBn@ zl=^@pfeN10p4$md+w&6=nMg zZi8Kk<3!AVkM_Ew@M;nb7|o!q+xPrLUjCHYI`o2|V*|U*P9eQXAR_(&c zF=MnmrS?e<2uV8b>B&LH6Vwd`xB-e#km;MubNQ_iGeIl)y0oxyRu7r0t;Jr%rO4p zQcw`X7~hA`G)UbHMqAmOY>!DtKa*(bxWy$Us* zZm7c%z4jCWF(Gm50DjBhM@$7Dm|`ge7sGhk6f71cf!Js0@!~dQ7+l=3ZFqIjEPPR8 z`rO0s`3Fy@2%$rY{(Yq@+GXU9h1IS6HzR_3D{IZxb zB6Xc6?Xom%=&)~)(d;P&2RM>BT^|owB(Db)510!73y<}Yu}K3Y@yYs@;%!$ceIJohAaEa>D=>%p(T3+D~r?g z6*m6zeanA*p3EtSGk|SIxpRtsb^Izf>t03{9qxOiaAmAlaip)DD(j_X90xKL)0V+X zu8pSA!e?ZZ56Q2deWq>gNFDQ9RS@AvxN-6UJf}?5XZHOWnPGSKxHt-|!|n))f{=F* zWyRo=^Kw4>7H>2o}@6{>dL>+GCOZtX#B?2lJE_8J_axiAy_HUwqBtTKpL&-d%tSWg-L ze7u?Mk|O9JeF#00LmOlBaEH(Y{#B{ROyh&phK9~xR0I(Pjl*YH?fd;z=940P$(BFl zR2HcnF&_TXvW41^$nc@2@;34@0Y^Q(ha5@rv$jstIisy9hPt6XzZFQ-Lzk<|9}Olo zVU*vB#9wB_3m_!l3&Ty+R>d=&q!ul3b6sM&KHD_N3l~2u^LX}9fnBGb36OXA9KzTA z61icap47%*k2r6`*tsYFb6kw(=}Iu!tIf_u9CtJA3w>bg5k;V7E9C(50;9XOBuDug zs2L$85SL(D(qD37fa<;M?{^PcYn6{?8eINasSgCEg+M=7wURbTRh8mKAwFScF^V^O zxCEOOq*7w0m`3~ab7OOptnrH6x0f;$)c*EX6B@iB@$mMin8KqH4DH2~FV}P8u)gHb zMmff=-r>GqhlzhN(9#W`vYc0r$#UF@a+%p)EHl|Rie-#L;-SeA%S}8cR_`hh47E}MI=M8%v?}1$% zfizx1%P!vQlad z-I*(99^|;{B-S`j@%}|>5|!T@(Kz=Q;hAw?k=utEWLyD!S?P3FG8G z+OJe}Y3ZL*_)Du17y*%I1_+tZobPpHfO?;q#oBn)g1PFaKU%2+5f(PH#58iyCGHZ` zB8eopL8=^QwQb$#I-@=RVr~1R3Ww;)*P9DV!c?UGfJca9%BGtnLj8;K`2Jb*jQ$K z&(-H;*~^J9Rm+PAoF-iPioQXr?%1=Lmv&9JRL@h)%;a$NKxBS*f^1zHNx0}T!U_o`8OSD{DhnOH zYRlZbfg0%bY&nr5HmjE<0QWG~zJd4-E}W#}%I=VP@w_0x*NRQPWw-j`pTskv6nV;d zIr7k-fJU+XA)*~5g}PC|rCwgJeX zx7LoEYre9S#bf5?1<4}^j=QNJW>aLjiOF$yUeAS&o__=TjDGtW_UXN1T+i9keI{wi zMVGR*j!JHy$J#h`^t0KQV4et<8z21VNl5-f;ere^G*Z^9__Z$2&V+G%gCUf(aTeXw zzM21WOhCDBqypsmbMD4OS3XR^8U>IU3MJHtR$ZZl;S*u>Ux3neq%xGG)k&?rwU9FS z*VTzqTzP*+OXqpX1l>uu{7-Qp;eyY7O7%j{>c@n_l;W3c3J}0dc`8?1QfU`9gl#! zti&qya#o9n`x%Z2o9@(anCbMffMyKbSPEKhyMQom~0_tp4woE?DI07=KxfhU^dAw-^XMG za<1>5goPGxT2!-RX%jfS@n}FX{+}d|FyjMgYk?2FTvNT+#iC$l&9QJ(?l)+t-z=5K z=Mi^CSy}B`)C1;Z$*Su8_sS5p@s|!4ZPN`?0&4CwcH%31F^&Y?wpQb&d1DSIfBWBv z{EqcQv&D8)8FhM_YSmYkK=y{yM%3GhnCrh(K2FH7JrjW9s9>iEF*^e83&X?PI(^0Ms z3OdK7+A}Re#l!bH1)b8`R@DCcHmNyC^-0$dXi11%5wWrzS952V(f*;(ujk~kyrIJ6 zK+m!zT;_Rd$y}IxGa-dal8wO^6e!GNmS`X+{b#76=3Dk|t8n5&rBVCM2b60=t3#Nd z)g+Ox0jdGcO9g_GV7);6^9|VzHS1z&-lSzr8g$_2N(-Vbq#yC>+y1?zLO_5|%8`F^?#a-&W`C6q`etpHWm7VspuOXZhMu`;`MpuJ|C?BAABF3n5v`DYg;;&L zGyUo51?|HJ~q^xFnZDsU`2^!0eVU0)ldefu3}1YG57fGbEj41T4mp_a#aYZ@q}nnjI(;3vyp<2e#)=)hq9wlM z7dp?!@9B$NEP=R;+c-f2;EOVAyI5nBL$j@YYgX6tcyd|p!+wrU3EyQ)4msx&7HI2E z$|YxtmmWB}Ld+b8qHDc3GmoIlK8n)M2E8UDKK)=}6-|lyD$z{cyc`81#crn;0K8d9 znSj($hP0LMhI$y>OXBlBIWQZ1z#tu!i#>SSNEpTUhKVreN5KTx?!_`+1DP~T#S<%t zKKh>#I$UK)3rW#aSR#;4ka|W*xT01@%g&f{H-I}-dULJ*8oT1*{%rB^06r$zBkf^4 z9>+=YN=)QU#OAwfVNy3lSe7Qj@u9e$o0$RRsz)py5TC2W4+KI3=3v|D*t z#P3euKCq>o$~Vll>8p#SnlWqL>6V7%$NJ@qrB!?-|Ls0hQP+%>`U2;VB`K3yclChnt_BNwohJ{Q+#fJ-DV5dx@0D-Q~F6;f1KliVSAWJPd zOs+5A%E*Eo_km`ZZz=A_tkc}ezP0*_1*_C!Lz;Uz8fh>y&$jxwCF8glxTbYJ8w>+ol8#-1ti_XMQo_n++VAce&{Z z1#5O#wT;I-wcsoKh`tcto}-bs5q5e{^X|^#!_A>OKOs7>GZW|i@-oZ?uQ^>xiEUnO z9;pgFdQ)0X!RY0!#=~$9bF!n;M(m>K_n7v~!xXn7?~8lq)L?LJ1Dw2?b%8GW)}A|3 zf_^(gA>OKMwsTsXvVk;y(vW#R>OM5QW?#)9S0>y$oeMsD8RVY}wGTCCAKX!& zY)DQht29ux^o4lj#SO1*;Q>6|PX>iWC#(vZIh8RjojwYy(wD7cibF#8=NI*yFccTE zFyq>8Dfhh(OggaM{0Pv#;}b06{{UlhavZJ1|9I&rAjPVu6dtG~>ZkD;e=12QdOp5k zDHuD;YbtEZs4*9%*8g$gl?TssmhF_tayn8Vwo&fZtfg^ zdlWJa4*VQg0~-dq+&r36BWr^cfqV$~)e4QvpfZ4sZtV8-5Dw6Uko(a4Yed4o6o`78<@XltEs-yvXO=dKAhTt;dk+8z{wfKb5Z0U$*9PxIAT2 zY$|&MI#UTjSvh-}=M3cjnqjst@f>B(lqUr&{x>^mZdaZ?+G6x|mIu>2eTe84IhHDU zP&>^ic$-K5qq5wJFVrrF`SB#PTn)v!)l6K^@6n_a8@zWydsw=|y<=AbA`XQtm2!cR zoJNGqgQMEw#SEfRLz_2VF=IZ^1m%ht%;fn4MGUhvT-_3SbHve3wVMqd7IXk0Kfmf{ z2qBG-4zEx6apXI2nhBcI$hvasMgc3ND@zk-Ia`^fGJqQ_1`5JW`9pRxv4h_2NoL*yEG$V9 zh`)lFlvYYjQ5|4wPu z*8cr@U3`qc-EMuJ^Jy(v!IyI1TYtN5Nv=4gA#u4sN1sF4)e2Cy-y^WKw^j$8~n(pYQ^+2jEkh-ia!#K?h=D$;C{p2Me7R%cz-xvQ`|DmpnPRM412gtx3;NT zwV*N}msvKLZ=Ld>F_R`Q7Q%Wy&h}|029$n#(RJ6Nd?Vb)tHNLsoECE13!cX-(>fY} zltUTrSx$7rxkOiUd4_gvA$Xx`bAM79VPl?G;^e` zz=-QT+bLH~&QcKOT2TD~z{a?l*#_OphFgkzYAY}>J2JX1N4EyA8zy*E6EoKm#;W3q zjd05t<3L!ZlHF9JlTPG%Qg|?sHb!Dj;Ec?f{fv|C35;(f)rXmRVSPI|)q)DcFdQ}2 zB97ot;Qp4gkRmwky+LI{+04S_+7oHY&yVqQ4LBUBEMAt4q_-6-v4}pq1eDMHkir+4P*%l&57xo@r5 zC=3ZGHDkT;if=17&?oxo5<>c@q0SasdWvhl6ojvn`>P?9-$$e8q_KU0^I$8*!x{}V z6+>R%3pZPg7=h&*q^eSS&P&Z~3@~#i1~?E*iC^DYQYAOFC^KL5mMnom6hW(B!CV+m zSKUc;WS%2Rtb9XLAQxnpJVKG=ZBs8A^rJ^#hd{Og;{Xw!bV$eW+~dkm(4Wq1t^5rF z5+drv!Z)LVB_s#X*=iLQVZKQr>~$8SJIfg)WtXy4Tv&zdug5NKQ( zdFGL6;I~6#xZMZZBU%sSNRH<-qck3rjs)Ya2MD$MeW$1xHrJ{Z=bg<3fPI z0-sav*T)ldmyDMhE`!{Ss|kz+FSjXN2UVN!TN=8L)g{nfFw23iLLS=13p+-59qJxhC9%5C7vPfLnNP^ji7rC3MuwLzogJxY&G` zRx*S|qfos#A{6qU>vy7Qn2(GQ7${Esbw6~rvUx!jl{1)3IWsyW!U9K)=(v&2`&k<_ z>ZcDonrXCj`TiGra=+nA3*B8-DGckD=oB*BEk+mpuHv)D6F2yY%ht&AdoBqx*jd{$ z0?Kn*vK(BpJR^{%nzFZQ)_(yGF?a*_)9!nkTJ~0*&{>=53lu3E-0LxHyP2O;3f0nJ z%wgv~LstUOF2{h4@}Vr5xJ9h8mR`y>(%I~Us{HYKZ4{E|EIBJY-oPU;GNx24QHVhA zTtRuC>0c>+kRH7|^J&O3%?^xj4Ul5y9YpqNJsBF^EGn)lIYkKXkQOr+p!uYR07w|T zYRLD#mUAvYFvaY<(2O2>cbTujJbbh|f@3#yx=t;>Dag@LM?0BX}Q%#m|4)q$#ERXAgT;ZQUK+rKgoQ#y2;Xzhd; z0FiQ};u=9v=cKm{&UW9R@JfKVyHj$o(@lltT101}>`$U?XB4P}y_or%;E}eIq6~#z z*-U?-GYsdWS;REPKA@A36C2l_zkQZiJU-|;QCCD_2U5f=d~Ktw?*BZG3yn|3^p^8A zj*faa+gTm3=waOUa47}kDS15b=pmkrbDFb?(#pR%x1DzL zK3V?x#!gw?Lob|79s8u;oiZM23xJWk*?9$z0fR&wd}o;E3PVPmqCOmY^=I{3h_nen zlahNf;t(K9>A!R7JPbh`=e_?s&rG*NU3a@W;P`GcLiTWAB#@F*79u15rl^?gc$bb^ z5WQMj43ggQ9mdChLx@_(V#fzEmU(l16mjBek%OJcy!btjoRG#sp&-{R`=mr_mf~aHXSwd z0zi0X1FrmQ;B2u8Xnsx2IqT?ZJdkf~JTc0#Jw8CH-$LbFP22)$zrJSIqW|O5uLHR- zzKXVG1uaDWqFgsrX$los2raH&F;7(SeJB`RfP4h^3rLu~_B@}jMEzX5f$}9Aqx$%; z<>>omOYJ;2OoPGDv!*^jA~kZcAmlhazcETRJ15vA6|2B!o{zjGb-Ay0PQ?lQU23cZ zB!7v1GF#T1Hd}6>sm^+FI;c%hC1WSPNo6ad=Mx9f-k_z;IcKMF3z)}@qz}D#R+g?u zP(gbYRyyk7%Asa!oU`EjabL9QvVzVEo{U)KnQUPex@$@nTB)cGHZinf7bO>+3n07n zKozcoavf}kb5c$O;;hF(pMD>e37y}{GFC7x@Uv##Qr8e3R|U(>H0001F<-R|t?<#0 z0lwu=JbQyEXi8Zyt07WKa{;h^Z5JN8vd^*Pse`zhZm+J3)?wX>fHCS3=)=0F3PXlS zP^hF>o0S*w!rI!dna?jelj*Px$n+a-Lsy~0nLibUL1i4-(0By1Zx=jI*$(6_nT?)@ z5;0U6%p%&QRrL&|ned)n7Fxh}1HwrzmBptk00EV}`U`IDh%vV`aS|F!HViJEnU6t* z+t(B%`WfTxSuyjun5f?)nN(6B`++sl=JCYKm6>*=F{iR>?8{x#hRWtOpFdvxj?wOu zx#FqD0(PqH71<-jxegJ)GUAsG$h95GyIaK5@#tBBDEXb+X9K6Q^z;Jc>}vB@Qagou z*!m5RG33F0BDGAYeB-EB(LGmUc}pN0$O16aR5atvqW+4io%;4IO>7kItO#r`M288R zmOr#9TnkNbhB`7HWugqVFZ@R*ey$7MfnT`GT9~pnk=aJ7#_D3U<$;CmNnd-3IA(b3 z-d33T^;4@AU>z*d9>Uz|37lH@=q$7&3#N1zQELdhR!~puPvqU?4~5T|*j>B;nOAD= z(IU;2K+02ZVnKeE72Wkt`i+1lHojb9GgQycke~iskPDsiTo$6|5|soIiXWs#*w{6P z&1&gX5-F5_s7eM7-;oKueKS4KZ&OSZ}5-_JMkv|5_)qDM}6QJl{?mMfqlBJ zbd7z*kPfkdniD$+{ryFpplX9@V-8vdmESF}Y=DHqyU}2hoz)ph0>@da#IG&O;aq6i z$(qFiKKCVqg(>@+0B@yq_SXYW`z%rMKT#TZZl{y|ZAEi^3v}AvC-H=klxwF4h74yT zC(@c>M$i@^!KzB<8{|*e{7Z)5HzAAXk;vCTP$b= zrvJfppGwnU+ z8>Xs8lN`LWZhwm*VSKF8avPM727^i4PTgIYIEbU9WpEmIK{vRDZVH;&d){;256#+h=otACSy2GOIb`+;N3vth*c% z7i1Vz^Z^sf0V&hW=S;}fkd*nopYg?_!@NGG|l5xEd-{R4eo-fw*z(1~-U zT%_c*uI{`ghU$Qo&M5Pl6x*|*DDtZ{fD!B;l|}vy(3Gf1H{Cn}32(D%M?!EBMFhO} zk!kQmwPC0g{m2$!M@Xrx)L$j&RZKMYw^>T|$d10Zzo7mL@W;vqOID+FzMuQ!Vo!=G zC6i#X!v!iPb^k^&h3J}wBMyb#W^O?tzolE8ACfPH55Y3FZG6jn&@lY$Tr}8X zQ0KuuNo~NZONP+iFZXe}-~aJZWWGPHEeka`01^4kLfEGST$$4k$eUB|=QCqx{2pq< zE_pCgtfWg1^)71giMnb&J%y!t%>8L%B!@S)IvJtuxd2V~b7~>=qP#iAzW!r5kj{)( z+l}2$lHz}IXggfIdElZrFb|cJAP#{m0me$0=hs2~gz;$+Oa@)|CP7%Xb?TEsarxNy z9Lz}2&ye;XgAP1^#=!3h)Q2TP&4VHWN^J}xR;7a>De=qk-8|UKR3u@GIYUOPKGV{A z7?{!xg{;SGhs!qfXidSgz$EQaO3KwdH`*dFQ9y?l%*hKLiXJ?jZ&kE?tKkCk-}d>f z*jChGkVdD~oX@oLA0mN|CZ|G1-Tk*;aVGH+VA~A!79eo|tazjC#f z=&aUBI)q$)e-oTs14L@vj$3X-8c-ij>)K~!nm_i8FapCZy$AYn)5B+Zz&8fw5PKefkg6~z2RfNoywW(zhTu~+ z;H4KdW*ZmS7+8CHjN@+wRsjYPtMrsUa~kR}ZFN%5WBSyAA_8p%!jNz?FjL^# zpPac37tC-}fdt?vEK2_0BnYM^rIEc?Q@G_P@BxkFP(AyKw3YP@bi6Fp?dqlqqnV6H zQ<6O`n}4Zv;mElWu-moNRD&M6_pB*oehU46tbGX})BpefTcu07i^x&xqg#@r$aF}3 zI&^+iuHw_}Xi3bmDW9Tp)Te{OrWB>Jq?}_3TL)H=DaT|n3^T(vyZ+DjrqBKR9)17T z=QF9^d%s_=*YkcnAJ1UfdPvC@TZ}*}J-g;lj0gG6;eY7T?FOpNZP!L`MNd4Od6_Z{ z8<+AT;eWj8?Y58FHD4u(S>8F(Okqkt|JXzPmDeAg=z$4lbgeSO>3=a4dj@nXC(&;v zY*{tn{^K@0n<$@rB&YF~2~xrT`oKMiTvF*6Q4E9^k8>yA~|2A7t4 z{58?yg&1AQ2IdWIiM%6y%<~P8iWGet-mUWXA)mVj9089WUO}l$n90V<}^hLq&>Nh<4@oNa=KFD2P2?rK7N>myoH8-9C1_ z>HiU1&se!ITM||AF?`ma1a+(7Lww1KW~;2McXATB)8uycp)GT4I28*Mnl?$U8gE1C zJB>`n&4M#6dd-KpdnP2{innfGy}5`4Ov4r?sR@Jm(8t} z_um43A(s*Feu6vws_um@E@nj|;OW7HWj9ELxbUhcfE7Cf`Kd>;=|w7x@h;4N<_m(q zv^{CmH=io~F938jE`pnnF?=qX^hKK#jVc%3kmU?g3D>L;a+^8X740f;Pm zxp;&lY|RpVg@GmH&}JmWd5_QzXg#Oi zp!2X`?jhx&U9enf90d@^t6m*rzlqZS8J_&RJB`?GDd!0G&rI875?%Oc2@=^Q{lKNQ z^v}vZ^XCwYo=xyu(Y$$cD{I3$7zY3G7nfy04r}_7!-Ez_9Um(gfgVpgJ-WHc|Non` zUs;*rvnYn$SM;XezSzJwk{$eEqnHvKDf^Ql1fSMJqjs-hPrdz>Ba*%r+1w6DBxeiL z8w4Y-q%L#(iux4QScs5@qX%^v#)m641i*L3JavIV8c- zQ8pcJ2u%+SS&Y*M8w1Z<<%I}lT{-b^0TS5venX_ZLLK~QW9Y^No%AoacQ=RM@bgxw zq^k8aj8wA95VX#vVH-~2CqZ4F{Hh}LqBeP0fvFxjHwGU>w_?!sb!~cIZ7uRVnyA?6 zcp*#n-p^W0zCU|#L1jALAB5rLW)K^DmD%>e^1A(P5kgiuu zzVVgWJ#L9}%|dpd(d-(=Q^EVr&4M~7UR$htUg2j-qQ3B+b8xVM=w+Xzte;7jyvDe% zkVq4fuSNUnER$INkfoh+WiH>&fO3+WotY2MZMOHw6n>2GbjS zTZL&!A%m2gyyFHE6oB~GR~Y~Ggs4^xd!mJ93}d&`?#D)B<$-Ix4#%!qe(cYFGkOBX zte@R68&h`nakz897mb|PGlH2RG;AF~ zVU+>AuJr!9SDS@^C6=Z+j#Th}-GA&!fo!1Zag}C>d!bPvV^xxrwhCJh=Td~3;q+*9 zhRX^wr^gFCC^5YKu~F>oAb(EKi}O*KeJuCeCNK#2YJ8(`vZYs~@NJ*1IQ)6HQTh{+ ze6gtOdKODDt-%EH>B2aLe*j0;+7LhwZIAQaBupzd*&+}y%R)QvRh^A|yJV9v537)z znJ@wv8$QTR^gw>OPa?a+Fv}vyajR*4D>_~?b{2EIuiFNc@m+GC2n3(bs`FQPcGrt$ zQeV$RMFqPOoUD|iC(vXUq`MT5jRGtm? zR%57ceDCIDi%8MWvrQ%^y1V~meg=}>Fkzv%=cV_D0rcR56RPWseiMX)Jdo;zqVb^N zwH?38jUyFfLv4cJ1|~WC>XH3k|Jt-EAd(3X!Q!OTV~e~vwT*8B#&qv^L258J9hi+} zW*(pr-Rl>|lmN3_2HmVOl8t?D4?qL&LEQtsxwFg>b%ms{NhTcSL>`al-G+wy8g(X_ z_chk?)JZn2$;feA$xLNdH^y4PFij%)_A*vs_F)8^6!YUNF^)h((UjAz0V_|U-&nkf z^!6;%WeSN^X=`oE2yGh9U*SWQ(YpK&%f-1@#hkXd!y%t4lSp(z5Is-^NEKTuor^E7 z!OkRREv-4Kztaf7^UY`)GvF_l89NObH>hFtVIaI+-XfR4a8HUtUfY;mckJEzIe+Y9 zM=LNo+7~L=vAmqHMcIC|8R1*k)l}G=L6bMzIM~Irg!Ts;kf#ZzuhjJ?_z zUux)yIM?QW=}RJirCVXZ309~l!Cjc&gqNrTQu%};Z7H!UdepcCzSP&oFaron0us}x zlE9u@$D8{b{GBKnqkb9z<59ED7?}rNOB*=@^~Tn%OLW=3#!xuN)2h5%9# zwk&r-=p#>Qg*sotvOTnmJ28nnNj$h=pXEj_49hWjoHfEd%W?8R8CRU=G}1lW@6mC} ze(oLz=O>1bH)$%Z-r%3W?vN!C`&YXfRO9pk5=iV~W$<|Nqh)=el`+;9kKIQ9wWK|f zek)1yG(pJ6YuufEAgJv&`xesv(^6%|;vW~Pkj0Pgy)?ay0i(D@o5+`Bwr$C^ypr)6 zMY5h+>b*_jRNT)!ua3%VwqM{cD)H=OxhGAb%LGh+d`a-&4=?2!1Lk(hJQ&bc-hIOI zzqTh<{C==0eRpPK-#uqfS!F?Tf!B}XT`8K8r#b^uC@5H`59QP z@glN8hYcjAR87Y#OQ8^vEi6~h+Za;4`2zjU8t8BW=Pma5c2CIOso9wfS;zfSosKGb z8PJ6NTFbE1)0RdXc@TiDwv%_km?lpQIoVUa^DNJLao}M4h0Ok9(*aHjhb9K*9+BAk zVZQmBg<%e=6S1yz<79)o{ZE_DYZgPM$)Bq08$}OoTO01i;JRRJyn|Npuk8$n;&Uxo zNHG>=ussxjxfp}-l%14xDeYt31oRe{v7tnhdu71rV@_Y42m@mS1-Tqz|JO6!6tfuC zrMM_(*NH<<{`&%C|9YiIn&c^29DiY5mjk0>O6B|m)?Td)_iOJ^opxW4JKa1RwF-T` z%47D!c4VUDIbA=KBW)sOJR+EUS5Tr7X!_?JU(gcFl z00;Of`r81r=-=ejMXae9^}KO2vQ&actYKzIA&r`6*gb_|ZGyM$ePuO4(tRoNDm|WxZ}&Gfp>S3mCC;-Xhj<0q<^dQg+Ok#f zlP{$!yD2H)MuMYXD*f@^s%qgh;V7^$;nSztJeeIRsPHFSrula^9ZqBBD8z4?TH@#e zxy&BR@`I>LajN-3W(-wO`OUbnrvo((e{lNZi;ovM*YHC0Ih@idKrO0SJ7ltk>=(RQ zt(o)!XbdLfV!b*Ui2U8!EBgUD^X)?DI}C6rzZsLZMZv1i^77Enrh20>2<~ zUtvWA25NS{JJ#Mt0Zx)2^h;|~oR4NBKDcLL4t=0IH^rSc@WB%E*zIw#+N8{_;Mnvy za1$y6-S@b^Fv!>xU6X_XI<1hvEyg>IKyR1{s60(M%nDZITZ{S+^6|I^|Kj5rW84U# z6cWDqLm(-Xb+j02$~{qL&9)ps9CBDk(*j*H{;c?yXbOYjB zPuG=M;eZDFSAFqIZx5Hn`=*98{$%F&&=?=X&)&Z}DkqJhQOUiMKH~+h>qS!Qg_D9eR|T8O7c%z7Gn`vQ(z1`ORi%Boq|X`kA@Vs@lGS;_ST`0apUTR^ z%qv+)esseUcw0Rwu2_4HtP%RX(80pSRiVv_dIM?Y6ybGjW06?}Gy@fxY!N=>)>M@D zpA!~$uTYo@FGycir7EENLZ~dDjRNk^-uxEPv%HNidl?~OUnZa$Xsu}Cj5N~gH@xvs z%aGm7+kpJCBgnjE(@dWA;3JGIuj2vM!!)226t8tZOXR2?TCXf|V$UwJUyH&w+PdOB1K)lIV_}c!`2Z^j4 zi2ki0fBWe*&_2;6H#K$?2M+>p|Ikh>>)GqXro^MR-rczbPiC%Va*Rfm?C9Q9N!!!S z!m`3;CY#9%7QleUHD5_p+JU+iG$hHDozOcqJRMwNb(S8Unh-^g3M z2Ws$NZd7qMXlS*fdwa1aF6baX^n`Uc&;6Nq`4oV2U@>x0)BH3T4b*n03FG!*{vl{g zfmmcJU6NgQHeeMWw;-DUPBZs-yMP(`iIbIvkJ05Zk~S{7vToAG`}_6OCXFiG8rM5! zp;Jvk%#GHT;O=&p2@Y&dWmJtoF8C_(wqf0|=Z9?E^L&3$Qre)NHfrNA z&0|uLu0)it|s?AGy_@jl9}h;kKg6a($|}9drZRfnFP1=j*5*P+XUa zp;xg|TlX5PY9O?l7VQ$+%-^J$wI6J!-;W{lwp<*zXY{L^}0`0t|;EL1k!gc*Rd`zKC+4GYCz%BDj8i+Y!>*1Hg`FO z$PHrsBLV3-W>~nc#ni`Xdji&Y>F#v97li+z1^4TQxveFM)6YiuFts z77pydoU_9JDdCUm`Mtwswvu%(d6I_`@7#-BfP(vMt7bO>U4onIpmwqjDxFv(&Rb0#EUx=!F1iUS%NNZ{v7urcB=96P-DhHPQS{+RKVLJ)=`! z_8rfdG2IgbE3g$mklwVriqfkzPA0 zfAh-e=J~DAKsS9~OmNCca&(EkCKfe0-adAyM?Y~*l#{2j*;3@NTkXYbV-7b7?9t7` zK}n-V`b+8N7j2ETDzf|y(zZKLDj~s0Rz!~~Wzc6%Aq&B2JDfC)ECE_2e|bq+rb5y8 zx@nrzsSL*5{#(!Rg0K0NCz#hW5~j~h^<9^<1XxGEaP$35-5Wv!$`1p41y3rPRp>=r zY}&#dxLL_64C2MRyFCvsC)If~c^o_x%a}Q!4g=fA7w>*JSeVgFk$zm!kqYC5{tUm! zRD+5rt;JIRauGk}7@!NUIJqYopHzi~L5_V>kaa-B`fhI%FkA9NM$Mea5Y*%VRtRGw z(sd|JiJ4bX+o-Tzfuht)8D*^dcY7vg;?6~2U5(}Yy?cnk9&Y0DY5ZJ`C2c=1xGaA^ zcuWEUUlI(`hBx=m3~=cIe$Resd&F4+{*X<#k--@7iz@q{g%oy?86;d1d5K%# zfljA4Mj?lH?+dtwv74#&>+fUEV#RKTZB~yZP5I9^GaE3uSop#Z8HzRO+GY1t4-IlrUz*wperEL0NT%cfSL%` z(-lFd#*01-A&zlq&7NTef?0KWG2)`C4}-1AHQPNgl`9w0UIT!JT)kki-*Xz+&8=mvtYJ%c)s2lnAd!4_< zoVukIsrnL=xo+-HL+4C>XmNMd>kUuvO~X~sRcJg24Ox+0Q0$_}Ee$4bq%_B1>@9Sbc)r`pJHtY_7Zo0>ZnyQ&3=QBB@%QO&~rZ# z6t#@CS`g@cD|>wPKjqoFum=4+X69h5OamL9CGT%}RcVoY<3X4z70F!{x^we_SEAB; z#g6X!QqT(byQ8}5L;P&IBe+x7-(K^;NBVv+*GGTPB&P5=lP2XyRIw<%wBa5FA7|9T zGj1(9a0`+YqR*k8MM3?IrkKvBn>tYxpVTa%J9+G_Hx?&3ntAP8rN1vTEOf_}frX62(_BqT8X3>< z6D2t1#rPY!e0ww@xveI8**-0XknOSZM&?%H9t~&JgET=N;kE~8vkItH5UWCTZ zE7917(5^~RL8IV3(1t8r=7z_;37`*{P?lz7VZ{4ggj9L<{cv3CS^jink*f~1kVDLm zAjpgOOb`sWxrCQ&xMa+U}7_RgMFya&eb1M9qT#SYt3_Ez2$UP4po6~n@0!dNB@ ziP3mfKN0s>EUt_itk#B=ZfSo*RLTZJ9fgEwWo+ok7(>X-NC+8p399^UD6;8)j)?c<2 z(V74rQeMAj4;4x7#G*B9ZO+K)(DGsP2UQ`JqG_;q_1e(ZPjv%-J?Su{+8Gm6Dc@bO zSYSkA27F}K`rhSi#D&$8p}AR-Rbj#B)j1N_LPlrxO{WdG^TvV+y9L_wCrqZZA(1UM zN%Dzz%U;y7eTUoJ+yiS5H?~}f?%h#qqgD(?vWSgkoudlc|@vJcEHOqneLYL6R8SvK{(4rpFm)R7A^~AN37ADsc-2u8h?2A ziQPwm6Jy{_)9{67g)CA=1Tes!@N=OnPGDUud3$u2EZ}44@+$P-3q4lbUX)$(lsJ1& zV*ryNw!v}B$B%*T&sVRgi14?(0h2&EqW;fzm|)K@O)!+m4akazUN3&ONJbC(=vnK{ z6zDh0EziU7MY1mV0N$6ROMK~)VzI#bW=0)O&^#FYxqdl$e7+jt zU9=GF>MC~t7WdWcu?mEt_FOc8RK4QMM=Dv3W|bakRcT^c4`5^Z&DyY414=7L`34t& zobF=aK)6i4bfd768$|u_@oPRs&{~n`6ts-D%iMPwLwLuVoohe{vEj~*D?NSn-KsI8 zp^5y>!~VE9=OUZjGba!Q^-IfjXueolwv%%-`r}akW9SXs<64i?(|ssM>b82~Kd$=< zKFDbXu;V7@tRVr&a3#G8Qt@4A>R41bFt#X&C*pe0_!6#w&2LZ8CC+rbFj>CGy}0yh z6jtaSKxdGsOXL{=GvQHvGEf^x9=!DkAqBX(81q&x$tdX4oG-Hsnr6Q39ycpv zScZ=#2X|&Zswfjs0H8*Mk~~jov;HpWK`B6cu4X6jfFWWB8tBhLiO>(Q%6$l&vkG<| zkajm&AG$g<0`_O!l$ zx>aX2JSarmp>i#{UJhE7Dh%A1AH!X+XUVZwyqp7(%EIOT9!?fSu#~2(IxEnAJSM8^ zmX6ol1@z3gA%p%=2gYncvzQhns>TiCQ@fOg28ZTSQA4vD+S2rHKsP7=V_TVhA!0s| zh|LeyH*$wwFB{e*hf)DJsvg0dB<4*XrR{>v5su6?fF@`N^z>3haK8%Z;Ypmlz=mj) zWL!!8I`jrg&X}06#r~zRDvo*ezDw2**^*7o31F1vgG1 z$ac}>a{j2Z?FkI?ZqJ+CmF8`V6Rs`+KuCpG+@4Uz@;@wU~gt3?g$?n-7ZVBan3qxJ#FcidzcJW({Px*tm4&fg;&ccCvHhT`yZ|o9y0^(Ak8B-SnMg z{}H=MX?_xDQgH*K>d3Cb{>Q~EtJ$KMd;GS0jt9JW21~|+ni5IoObz_m^SPvAV?|CH z1;-OFgiiRsG{f5^+MT||1tT!|BE-?e5v^~o^KGoVcJ)P%z6vxCHjTb3mlB1tG&;M| z#!RGjxXc}MoiBuH=!yPgnv$_24o$Y2Lla2{pEgMxW9fz5T%RbqL9ka(K&rSh#k0P! z%iB~ARhX%F%Wv+?K9k|Bww4+V{KBf&!B}^yrX|oxY`7A;2|8&hZc4ZCNcWhkPY&HnrC|x$7DRd zy#_z!)|F(JA{!#_pfyK*3{2ssK$1!iwz z;dX_tu+&Ok1t%I#uO*E=g@C)|o47=~_Ap7CW8$_W+w=)@Sa`bTDZp+{wNugMRa=st zgQCB4|3FB+YA`g!9|0j_kVIwM)~t1*(Rt_wu?^TJNShFUxb}TlPaO(g3-`@;dW5>!@`@(HH!- z=+9zK^3&)#|4`2m`4+Z)bhW>RVK44+#(AmF6&B(8w9(g+CVb%Q_2DYWLZ9g7-6Ug$ zO#?S@zGP)D*7T8#=QLuw5TDjnY6ZSBUl4(rSqC#vn~d{ojJ`%u6`zxE`25eIv!ibLIV-Kx=3 zYfhWn~?$vy0-qE z?yk`aHURoG^dQY7QFhHoHUE=OFI7i&>*5{Em-KS;o!83llP`tH(w!!~coG}1J>{gW z!e8QI*(TdeH}MrM4xY)4k%poQ250NLN3+Sl%c0@r`Rzc@eNh{_t)`A?9~COE;&%4; z{}gS*TRwkS7@m}-H!RFje`1{s46P8V&yZC^bEdHiGORbi+BPrFB(V108-IWj-=Xed zlN9KYm}bmHJ}^x6iJ7?fp@10v`?+RqR^N2t$_6NIJUBxoj%XJ;Io#>}Wy)CrXB6~R zD2n#4?%C^H$|n9i7~08n^wx@%Bxp1XRhS08kQF$V&5ARbVEc4?b5LR)c2N4rO;6gm z);>yb69O{SFTF4TjAs1a)ZuInFrCq-ndy^6;GSSXDkt{|IKny+(YW)iMGrJx)j?Qa z7<~|3bx`E@)e(P7xg}@{H-f96B>5i&K%uEbDpp(ohSRChZ?Sq>IM1W55P;b?T3K`t z3!A-t^(WeA=o8KlO|gLtj-|2@b|P{LgD;teY~E6KnwXdDTxe%Wlk;*tI~9_xm%5;b z#D?eO6Way#mIoPzqUe`{XSX&6`=$rnKTSAS@?|Giqc`ZRww7hXRCWt+itsLWjC6bE z{eJLdQR8*Uq5f@=n_txKjprZtjsAuG`FZ~wH%p(*nxD~Vw2p9OCI6OA`^7y>{C?Lc z!9YrX(z(e2EZ0&|L8&z_3flvfid;z{+vv6oiVHkT7A2A|N`%P^7v{dP2+=aHO&zi7 zH&5Ko4E)PuQeS9xJo=C66U9giRBgAGieLyG%?#KDW6WU1IjCa?@W-LjKYbx)ouc096 z$BZ_AJg>y-;{hM}Vm~qGJ|Ca;fG*cf0!*GTe;}n(KGnQ7O|UF|Wa*ueR7%syZQGx3 z2ek9Ef3r@|86;kK%nk<2Zw9DFs}x#GPuqfz$5NK0JJ@Y2G}!)-lJ??FD^Q0X?i0eJ za^P=hYn(x5-%n{4xuQqu&Gq7buC?F|uEb*N%BsLf{;xWH1t0b1xCOYTX*ch6?#tg= zv&GJJmxCRorBx0lc;G|u%i3jXcFmdeAKPMg4wK!E*kOd1N{p9O%pi~gU(e+WwcNBh zf?uZ0KI4+O!Q{uwPTn?XUHeEDvVWWAEql#fxG%4gb>8-JZ)co;gQspUYD@5exk6w7 zZdhhBcPH<0Dmhi9GluK4VGeTSrxX><=8K*f6Sc4*KdFs+2Bn)wUSS#pIX9oZ)yYt! zjt8f+Tx^WAp&iKOMNq1Sxd5jwUIgk~5~x%nC(cc)j!<=`7^14cp5?&F<#i9-{}`*; zG=@L3OkhJvy+6xc-{2ur4^o{{>4Ue;EYiM!%kfNu(*6NsgD9>C5Not}UeXaiw2cAx z@;AsVn#2T0^9quja#;?~Jt+^HG6MH}UC^9g4E9XA06qHA1ckuNkH#{Vf11G;0z#p( z%2skpLgV;EGk5E*2L-D~P6f(48L)Q&(Y$U>fj6~Hmkp_+R}5ddjm+X~E16n{eNd43 z=m<4vm4UxySSvlaRrtV|bG;N#KePVjp(n>m4Aov7p`p}-fX!`dg|nyPnt=q*H-+>b z5Vrm|?~H_~q!AR8}}x z@lbe+gl_(yE$BKBubKB@ct(TTsCBb@3npy+adx5E?V{7(6re${mUoNT%EfBr^Mwuu zdUQC*{hwd$uI_0#es-k-R}c2-i_6ECchWUk4W%P+XLh(Hf9CRklsNrVzimL5Tws1I zPS3Z{C+%3t;hgo|PlugNm#}!;j%)*QZhK8G(JkO3_s#>&V={}d>E`(B)54F;@v^wo z>Hygq9e0&)nUX*qgHU`?k7x9(Hw)k%h=8WpMXw>?HGxPb&%j#?IR!=D zTR!t3^~$FJ?v5aYxIhjWbp@v+^SW8({WrC804#*G&59OUjqe{}#?)E_S-*D?%~;3B zCa*s2^*vFKHLZ+YxgaCQsq?1*TS^De@E`sjDHH1if>=(|6L-j#oR&KzF; z!}%A4wJZR3aK&7K(P{|{tmO@SUMTPW7)<8@W=a~;cDoo-xpdC%0#39V?vAy|-PaoU zi~1zXD31Ei_R;$rCYRZtyLeD{>&2q?MP8oX+l@Bnj4Zw*W5g23=YBk>Tm9Ced73ws zwVrfG_UN+}=F!M|Zn_47mv6S4_k8>~@8jd!^L_VpI7Pj$9%&9k5RT26x%{EUL`cpY z4nbE9AZ0%CACR6Rbd;arFKvZiP^4=z4r09kRo<%)uhd?#z!@ zpFqRX(&)A#rT@wX*_$rDfaQK|tZTE-V3nmCPcGr8TQ*F7)-F0FIn?8$dC5L{nf*CC z`?}W*XY#pqg%+JH>YM$|bElfqTG;;EqRkt0I!Arf{y>J7ER;bOed&y;TQUr=J^}yD z8sSf3Qd2!Jc<%k$SP&Du;=(32E+c<|DDQYUWHVsKE&V5-+}jJ-xS|keFW;_xnxfjG z^|EMP&qPA-!SX7|V&NMJiokke@M%vkW7EeHn7muAWzCz(k+{1c94070j<+CH z+)~$UC2RS_7eEgnYn7*9HjOoR>y|P;P?S54bJ~*2;XG!YzY2)|4xe9)5bX-QD!4c@ z2jD`p!6%9`QRM{QSFlDPjXA1%K%r#_dSsS^;B}x-A@Ca-8HW!S9qF#GB>@Q))z{*B z?|vY`H2$=hR0E`g&R&xw{I{dZ+!AqzI_ZZqA_-J+YhY1bn);W3#u*TIUgIr%GwKGr zP)Hl7Av42bE4~0CEP~nhMw@lvq0=aXkfj+pEpOR_5}~eV(O}8d=KPTM@hE*BD>}2V zv@2U<$==Cz4ME&m7y=OII;u0alS*3ysgr-S0gbx0s?-Za4`@yOg$SCK3S=-BNw)9V zyaA5*($1oJqL+(et5@-=7qZ1}`D;5FV~k7XA7ef#-cQc?5r4p@F z>H#Cu(3G$>G4io?lR*i@2;N-3GEd&Q8!NxDB$}$obAnTTIHzG{9ycSiA+BpCN0yd- zi7zNuNAoU_cs=sdS_nVXVC7mbq39XCe^UNIz9KZocf<|g`g)McT8y-nN8DR4DZ9kB zLMgjhjLxa`2jgmEojPk?H=O30n^Z0Iq>f)XFQ(3&*zoBHfmc{OCwVK&PVtIXY4a;Z z$3r2mg|Zoob=tW{!&3OB(nbvN5`;~;cyitk8C)vKr`*vaTFc8dK!14!6<2by0rwMn z)NkrLf(iv8{N{$C-WZ%PtDgWjvW^SP-R=Np@>sBW$F^nT)fYJ)OyrFEsWdmY^QrbI zKo05?UZ@?MQMaWYDr9ml_(BbSj6fpk(|j8D(9Xi?F4eo^*C5+?zYAi{`Ss9sr|b-d zPyZK!h_%G?!&kfqOwJUe(NVEAZ{4bA=j32NX@ZS(G(m$~sFLHdyi{lfWVB z(s^%l%JBDmpRk_XcDA)|9E0t_mFF&DW@t8^+$3$disQJ=sDrkNVn^5M($agG4b;M= zt!F0Sm$sf8KH>-Uik@2Uv1v3vS>iG_#+HJ%go^e2MAL%8_ox~PYu#7NK@V-bqudGa-eOT?^8cZXqNhXu?z`kH!!Ll&BVgL^ikQYTVyS%}DBCvA z8vm1`^)grwmxf>%3I+Z!57TodUz-spl2?VNISK%`p^$tHlq>p)wIo$E`ka(^brU5bqH`aQ>c0KrLE?w`E7!kUlTmX=@>h zsFH?H35T({UJAesh&e#N5%j{5SIgr(da5awWdQFwYE`bW#-ltY#s8$Urz}J^#F{Kv z*S2|&!3jHQLtW!^#o!z^D|Q8t@{t1Ohm^EV4}|6pCQNcH%az9_Gz%Z}ScaDTD2w8V z>omf(whGQ_oF#6_qQDMFiWK65L=rR;EV?>GAfxggXFOcOtH4I;fcU$?IVd zHw5ODArxS`u`WUtH!ufT5~d)5EVQ;baZO)i4_ZukM*+GhtM1(Vf#j?MM*%w@6eyTw zN{n4)L1Uvh2S!9y(1CrJP8Y|`+)GCb`M#v4WTy2LPeswGWT;^-+@oS0 z%fkUmBbQmmyb@e5T-IV8PPMH7e&e2Z5C}}LS=zmJpwYUOJ$KWftAR;DBh!~1l*0ig zd=5@^cNZ}eP=J~$NBKKc4gA0j$YtZGOY#h}EBQb`8xYLX3#qW>J2@_s*~ZWv(sXZG zdTncq*yD7-C7%eOT^DyqkFrp_ck5Ml%q1N6^4c9|mZMUapgShvhhdTYenBv3ZL`XMvwkAlD*wl6Wx08f zy2|OkB!CLB4rdZJ7kA#^Q8ey|xHk|Z<1A#$#IE#dEsCInK_Q22`5&w5kCOu%;iw8( zt^v^;*QaxA4SbiSvHCBjN8g2{2hJ8%+HNt>l2so2&oR&(q-`UV1ddIWg$Bv3d|;5; z03ZvbGDn_vJ(e!wronKStSWU30e4y|8@_O*#w;c|mdd*x>$OXCuC{MjnStY_3HokT zD@^Kfhi!a9W=L+X(_BG48Qe1v<(~iissg+7@R`77AZ`?N9?lpIh_Cn@MK` z6gQF?^sU9{W6ZBN&ix@8o0z%4Q%VVf=HKF}BUG;0xbA;QFQ%kJ zAY4bkW;wY1b;!<1F#oc(rSux(NA4%^W*RL4zreE&s7KMDJK3R9Nu{+`3nS>@n-c$J zEgbMLY#5NeV<=vFH_JqOo$pdwpXl^hm)$ATycZrM-#7)iU$Poi<>;46x1(?9vd*X& zES#Qt+7=IuL6XHe<7@-Ad!SWlCDhfgbP`_xAw65c?QXJ+8%6bZx9OHk3QXnrvWr_M zojJQ=otI9P^!b5(kDidk~g8kEz_>j_qD_Wa7P z;FL^P($J%NVl;gIZxe^1$E&J#ejp(2p2gH0w@u9n*-~Wd4<^5$`yy@-Y@CfE?>IY@ zBNebiJ1t|QSiS|`IUzgA<$^uM=QO5x60+-;5ryCcNou8HfAbJPN?najiEXKF5 zp>LHo#PMin$4|+?n*`uHieUzm^I%_7oW2%&;HV$Fzwk86N?jaV2&H zCP>-N!N6d$KVv+D354wwIUFPoAyCs)ZMKIlC=1pQSY#Y^QX;Z{8Dj{9RzHL+fybRL z@UP2to6LNyf%n6?5TNptUvu@aoBP(yTqb9WpuXL|3*3eQ4x=(swxa77#2p<_~iq1kld^!e0tfM zuWRT@#UCrM(g)gaIy=&+nZ+_+JkLrl3Y24P<_Gq^E*2K$TumcRb~c#0^GqAy$z&8k zWi7RD%l3w%?djIjCL4KJZv++>49Zdu^<&C<042S)8A2+Z{DxEtfowce-CDQZ3C0sj z?m0ttz^2xpfwqfSwN!6S^=CfQhrZmSg%+X$UJO^(Q^Fo(`BLK@+_L@Nq(r4-3!Obr zHz(`R9s<(~lw$w&J|5{t_Yu9Ho@)MOtinr#4V&?J}8%@KCozOR9mT%UPMrb5GrZ#w?q+Ju@VdU^<>Dvys!<)DvNnHFfaI~@!38*y0(16r1md9Ok*+95~gNdn1b(Ct+xqx88?xR>iQv^0K zyTL;AYgc%kw-)_qgx*1bf)hl&uAeId8(_M2B@Hhr6N?09 z;e^54P3>uP9269-CNSL%P>N)3h6Xg%B*wz%SU_Ypt*Q#yzpo7(sp3%vUY69X1u*n+ zCJ&v^d>^ui<|^-GBy%)Sa@_oe|;%zIvQNZIt0BYgom_hw^(L!Ox<0}iFcVvjU+auJV_VMFHCl^as)0S@!ltf zqH^^l3?}%km7|8%4>a*cmuK@tl*d1u!_I6x1rzalZXMH{25b*>GvyftyKxr{(oq26 z`*JWDQ1*;m4N2wuLZC|{%7Ahydnlg%rX0~=75##@Z%<&3V%yP|U4weA*v9F(+P#eR zS5mXGwh18uq`I#~mNt)klxp6Jg1Dk~{z;P)ge3Gb6=Q(MgJ%g+3=AIIyp;reqgBZ6 zp#whjrb1wjMvf^hII6qyHBJDnnzxjl3;}K@8Aq2 zlmN(E4M)Oclaxl-j-Y|7Nb+YT6B&$W{${U-d|!A|K`p@pt$p|HIBs+LvJkzxVgzz0 zhUS9a1oqh9K1Gz+SPz=KA7b%pbaLp&0TkBwci~kQ9ne1jgLYnJ?cVL#7N7>?zW?qc zswFF2$3b(*`a%}ukUBvLK3B5)8UAjYQ5_Fo@TTJ3gmk5Ht^#^qJC?iv-#>>>f)n~a zUWxSC8r}2!pg59%K~rTRDcdT!b)gTI;YcXgao zrZM0ybjW^y2|dt(o!+G?=KR$aL_NZ9Vxy_DOVC{X_if+)Pptt_KxpPwG7qTu2I4?Y zX@`c^{jXbs?ml`vi8?^(osQBJ?9x#F)iA#IE=X?{V#5%-s5`19yGD;gUf|FmXX2V` zBmxv86^Tn|D*$x!?)Y%y|LwDGo>H^>NLvlFlwPR>=5LP`FZRnnvL*`1SletPpdVKP zJL>59O-=oE^;A)+nw=vm;vaQ9;pxo3;Krgg4{z|0qCjfZ?#| zn-k8UUR?r3lZLNHVh}@jgRTK_B&tS{$5a>hf!=zM_x$$b?@K+1MV6FPwUOwo>ab6L*|ul9fmrBYJ={fjI6vJKF+5yS z4A9S^3zsVwIhyfAKM%t53HUI35`!oy-+vxkJy@%rV9PlKcWEewk^?Q!z z<4s7|x3d`ueSSd852s0c0I2MMq5C_+E>xEc9d*+xjy>G*XlPnMF>C*6e6z<8wJ7LI z8Q&o2;2-5mmiOUc_U2^RmR(mY2O(n5A^lg;3`j`P-V^mO4k%~5B7aN6{$IYg&lSWD)tRaX_gI$V1IRR2 zQ=nsA>cecfuggS(6ClHs$DoZNf4{EMD}6Bq_2!pWiGU=+_?x@&#D>IK4$j8t=#9!n zeJSfPgeDvg&h!oVUC$UPs1$wIm6IuTB6PcbPEA%_Ih5aok~d#QReWv{FnDMFTNlY# zIdC|Y54PHI$oq4@%XT{DI$JGlCR@)+b|^v@&7M+%+B8I49E5uNfJP$mN2QP@0`rExN-jwg zD$T#bN&9xo>5nc=`rp=K968Jx6^nU9@)&67MUPpVOwa<&EBTM>E-v_A_D=ND8*N^@ zBMI3uWC+*w)A9gO^nu+g33?Bw@w*qg+CVJPos2|w3(UVs^haHYQa*!U`rXUhuT^>M z8F&FLoa4W(uVp2;E~X$8K!{vogIDc?D!fugTYrqS{+QPr+Ohs=>C^Qrfd!@EpRNfx z^Y4GnvuF2qZpr^3|W0d6!n5i~< zikZ4vSiB5IM?=_RgtYOjRE7V)X6``ePeyDep_^eA4UZV43Zj#RI0rb&;Og(>e4;en z{C3~P1Y2*Qv35_Jj$Xg5ORyX`&cEmSl8_WE5hOM_kT`e9S@aN*cEVag+HIXL+8p=q z!*Mj9`eHL10%;gqfWGDx5zWidxbPI|@HY|E1~Aj+9TSnrlY*DYy0qY=2*~Iu$?OnF zS$z8%`WD_)A@Z=Wq10S5gwfJaO*D^{&&c}bJd9KL9f!GZ-9o}LxZUUC+ZpQ{(ghRI zysT<~&wr4QTkZrS+6<3eLo-Qjp}#Lfpegj4gcMu_^>%09*XU;@#Q*e;H5RJUzPF5! zS1dX@nI>7tjs3QF?^)y=S7d41`Y&Mpk@w{|Ws+sKa^e1(%z>1^U-O{oMRmt7r=iPh z^E^4>+hzHeAh~mw01cvRALBoWSgcj9o?If4Z1M*(51A2@>eZx5IvOm`&xYk#~9Hg$hqz zH@kJ-TgidAI&JorDAQ7H&r!Y-ZJMiuI*TNZQqYZ z_ID$-uk5(EVZQy{4S=JcZ66gsd-jftk=mxT`12DzM;CL>mnL@kZ|&QKj~LdmzduL6_b`N}zjfbbD{ZFc zFyxuMe!>{!{vir_s}m7B)x*H2z-Ou>msO825!tqSifZNk1&bHA8H7G<(Hi+o2f3`z z`Osz6_3EZRW?Hodj4ZmLm3$>Y9~N7+8C4y1Bao<7i4-L4knk$E0iIWu_g_6*4aa$~ zkiy>O79roNj@)HA=3MQw+MtH`dksUB`(3r%8|FE{+Ff?81EMLqr1uz2FGi@>Zqt8(*Vb$`m_ycCP}3B zzy+_gkZlJex+s6U_ArE)fgq3dCB|wTC+>oc%oV$7ptH!5}6{{mQp%~-e zR_45FWeyHUF1k7PLvr!mU@+#o(|%N1?5+#IWCWx-|5=n_4^*O@d}0(TO3F3*JO(-9 z4+uFJ<9#{iaQ@5>?EGN__+WE2L?t7)EUdO5FKVGY*>g%AInsY@7_v{-M76w^RqGEI zhOJgZU>{UJ-}MeX*V?H_*l7-w-fD&+A9x4Z^I`N9?AnmV(2Y?p&}bwuALJpZJ4Y$C zr2y!Em()J}Pa=WtuWC2v)vreN3aW>~GKV3(F$Tkcy%@QC+HMOcVt<%?JV-bh6q@Rc zKKlZ$B1qkCP+9qn6Om-iLl5(x6m{ZvAa=pf9QU^)1Ohl8X;Q$m!@t|77=i4nQa%Vq zev=+cVMiiiL8D---WB0K#12BcyOIOw-y9MMY5k@vOPETjPalq?FIeOao~QPW8$KA^nXm^H-5m1*jBE8N z!eu#i?SSNytl&^>){R3td_~;-#G>gxmr+vsy zMEt3m^QNc3gF%iWC+yHg&UOx>XFfr~1LLtT|EqP@isBK&SJ+=gPrf^uE3Vkdgl&(y zYXtUsSF!wmUmrsvrXd?LHgUpyF*$oD^fumitl{K@S0mvcC|>mhgZP%^_Vui9t|5a5 zuIcYd2dh6M)4H0!xF9fgddM5&TI@PD~YJf@Mn}|2y86rfh{|m3S!3m~uRr989 z%>di42g#W~eO-w2}?OZ@_KKyw7>q&aWo8$fb9dz zX1)P)#QTFLB?jtpRX8PmKDNh0!|_&rc`;p3rnBeYcO3zW*)F`YXA9z1BMoj-d>w-l z&X*+XLVgahvYUOSBf(KCWK%Ux_`T!OD#8;O+X6p&^8^6k10cU}U~h)fYy3v+Fg4f# z)Kz?FB<{SI=`ZfAJD(!I+Cpe#^}$sCVXWQ#?`=BBcB6-@z*T<7?h0R1Anh7`p|68g zew@F|iP{1^yYKAhKLvfS4BO`2)_3O5EeaF3*oZ|k6M$WjOOPvJI0q-o4awvZJAu+{ z3`q>fO+{XIAI{%$PM{KQ3s_BN{O{CJ)p)NLVLE}nM%mdc4gs5eq^hYU*^HGAv(%OF zPAO3(kno%nC^U^$J-Wp4e==-#vvH9hn40NPh}$#8)s9I3^8bhBeD~+N$fqlyM>l=! z%r;fz7uZQ$Ig2EYDNa}*=cDqriI7BoS_A(p_Y?-MO{TiFEr7O0{>D^IvP%`IST5rG zaU$FPbc+WqVakT5*FB_8HCa^L24^_wj<{eC8U*)znn zGjn*7`5I~XxnuOwx>&BpOSpFq9Y6R_^YO8_!j$dl9>lF0-*2Rx^+(vZu)Rb`+NSs= zE`>lENi6<^f76F~II#IF1GjHFKXJ-KLXQR6=iXv<9v=-E6{i~91_$_L?YPN7Nr_>Z z@KhB?CK#VACuE!=FG zB9J{lEVnE?SXQIh$F>too6Mt9gx3~ro3ur&Y@deSb_+iY*22I?Vj#k#+w`Q{JL&s3 z4S2u8tv@1e_y?p_+%i>xR$2=Ukqrf|=6KFTcM)cDEN_2`JQ_9ac+M#cipN?%C{W8N zVxVtK)4usHh6qp0nSK6qwv#^{hi3$=jdc0d&$2#(Mz?Z40{m@XYFG)?FhOVEY072O@5(aDvf|{2&TurGh$;L{qY>x2cFO z9cYp%7G~VgTV`+q!z~5|(Xno|Dk*ckXB&Il}cN9&I z3$4aK8sRc-J$-#)OVT{_NN~LR7vmG3o)S&Vi)k30>^QrF2m`|au+uBd7M^8X_gv^#gG6uYQe2ube28e-GLao1M$3mv=+mvAid0 zI7QMm!)&yL>=*Rw8UkJ1&>*aWd9n%vN}f*y`04Rb2AEA6Om}ue5ONH<#xFERx&{-2 zzq;R#gClUXyD$M(o4aam9EI)D3l!xCrXWP>5}Ucx7)0S6Qt$*`9u;MSYXkQxhx)!8*u$sWBZfM`ihb<&p=1eD2P}p3@1> zu0^XzMW0MNY41vuxlz?`^M!P?(9^=4DDw;W^h-04$2IAkmv2pwr*BnOm}0+l26sq5 zv|W!oWSoe(VynN#q3=LI8TMD_x#FFOTT#eXkniz}5XR8)aOr7q3aSI$EEr%=q=TI3 zJ2j)%j=irTUfEZj>00Djubk{QvPUDk?Qzn=q5ttDmyh;8k`fcTcDQfL-`f>XF1Zq} za3{yJtMJr)EEx^Tr#(nf7hU~#QsgyZ0UTwj;J%bIl5QMIq|=YMH<5$evYJ`cZ!V3+ zZ`a0b!t_hVFphot(pcC3l~h)mo?+XOb9322{Of|4136^Iff`eCKzb^BmdmfX{Cqwm z6<(3=td8i2*sz(@-@AUV7h8Nkb5k~06-t4bj|jjlT`Lw{m0n3wt=Rt)s@_i;#Qw@T zL4yQ^Qb5cnc65r{!`5nTM=Ha$?AB1FzwB|X9`Y#u@$nfJ@ynKTNFxt2S^hO^lta*R zx2+(sfuHZ5Dlcz;p2?l_)s4pM9kJ*02>JX}!I4yHfk%2&P)mx4AssNquQIpsTw&Zj z7K^j<&uihEa#5N?ejKXejW6dDHj5>iqINtbk_ljo3YMD)SQ8{&9J!~YDhg{AA+4*1Gqm|&^LsPU)fty$hL zd44Nm20W^a%f~Fia8V?x4yjJ~7p(XZUEzkfv6-%vS6sEf_9TM!Wzpzw*?AjW3HW%C z$UU9lLN9eSR4iwZ{Hcua;6N%m4*3^G1SLARxp%PLc)oy0?;x%kdYMx(rYzgByZ(g_ zv!K8E9Cyu|^E>FS{vE=;wjGDZT%{{oxHmTi&=V#uWTs^_HT8Q3-W}XYmUnG?)(3`E zD;l)H+T;&}5TK@>FP9AMzcf@i zDAih&*>$96W2T(0iL_oAtV-o7tm`vuozum1URpHjT5?8;^0G2ZJn~H3voBRTw@R*1 zA4;fc4`aHvb7J#Mkl8%@P~Yi%+qeck39Xg&C`6+1_?e{9t*gk(103z>tJP}i#u$lR zF6UYj#Ha7VLmfoUJ|P$vzvMqlHoug|3}SET4KSM=a$H6oYmG)j;*$MorEdWzRojb* z$F;t7l0Aq!P>y=d!O-M;TFAA)(zDJ8br_T;T6ADR$p_2coWa>cNCxOe@d!=bc$ z;wMAnEBl%2W+jomzYviQgi+PW%(sK1e<-lco>Ll)2Y3Yd4(2J=kI5ZF4=6*&_<)y_4gYZ`)%a4o0UAAPbueP`; z3@QhHAVaF}IyW!&0F;Xpbd8|b!!Da8o~+`vesi8Wv=K?v5R4GlUO~Z)(7CJWOp9#4 zf_fngJQq+z5rIDjI6`lSh?u8c*(vs*`T*X_jibhE7yEy0VjZ9}uUEHUVG5VHdlnKs zM3r&m{A4!Xhi$zgFo|zZoB5q}UjPN@kDFoc?h#Olfv#AfynsV79 zQwmIX#YL#bd+Tz>F;HfV5Nxgud~B6!`p9HW!?8P0Q(C z^CKJL)erO)P+pkNo5NpKvs6pFB5ew>V025R*FQlqNETelJH^_CxOM)x`2j=w2d|Hc zoUN$C)pv+VMmw*@HL+$TEaPyGvNGwFgO?o`qq?&S4Ui4&0_ym3%KVVdu=`=oX>0Ps z?!%iLLvnLogi*CXY=i z@=6Afm@jSJ#2X*@UAvB#5HHePb4vbC&O)mI19jjA<2E}bE`|UJfWnR`NJHv5L5%2` zc!J&O0a`*l8VWfxP%x_mKm1W*9b5TFf_D_U&M11ol?e#7ce z-*{1R`MiwAhSZ)cu2>O7Hs?vQhIlIWA+qt|H+mZ}8>}_*z%L?h?QoX~Wu?r3hLpj{ zg{Q!<+fx-HR!P)bquGZ=H2XYgbZCQkz?5rU@=|M)YWEz2;E?kdpRbEFO~n8zVr3Ni zfrQtG)iE4|Uu*c(PhF5#_pgg%8&YJdqb+AV(CD31u2A>%`WGkR(Uy2LV^e@Sgcd?7h^H<^hEh2X)hi9$Qn^L^vnb0jUGi}gusG@5R zl@vfs;d^d-x4Uc7^e)?z*j;?EV;|!Cq-^b_K@|2q#F)oP*j|?%(m{OOr}JA5v=e+6h&pydsHAzs)oYLfsnzPUcnFLbw!QIv z%HgUov1-w_*GJLt-I1!F(|08@S3Qcxjct|1DUum<;CeNXt!Xg&0*7@d5@u`s|97_) z5@WVMyR+L4F?KU-;2>)6=plPaa=;#{Mmxe11jK~y8oR84*T`lnA$a`G(7qEeqRr+f zHdXE{Cj9?twq1`S9-Xid->(r3hu40?Q>sVDp^0!!!9c9-hg8D_8XEbha1BmbhM%NU5fQ3P<%{yVIvR3lMygS zLW4bTf2#X0@B+e&hg-B}0*K?!kY$l;1=~nKLUk}SS4Y)B3{4t}NY!_|^rogJ@u6Ew zbp~w4YF*i)1zP!()CnLS_r=#{}Zo-iISjQIU~!*NQK*x%PCXc}5x?M&M3VwVjuK};8`$*(kjdLD*Ix_C0Rinh_CN=3x5z&_;*SMXJE&0ch1|N(#kZ-u=rNO& z0Hmfa^4PhY7ZX@b@6YweZtnleEG>Hq?!vqej7XgsGMg?uZ`z_~GFJG?wZSg#!Ylur z*%WT6)zH?iLz-=g;uq(Nnp>>1fav2se?9(r&|W=xuECC}6xu2ddU1XLkskd$M`?^H z0EP_iJ_r@a*Oyz@JJjI+aI&*8L(XGmK~Kq;k17|4^4a$U5gmttOYdq=`MhHs&{WpJ z*a$yMHSj+Qa`)V?R|j9f)NAiEx5RKXd)NVs@IFTUA19Pdffv8~>VHE!f*241*Udvl zF1gg%`SxTVPxMzUZV=T()ki}cY@66jA~B%Xz@2&}Ua*J)hcy+QxGPg$NHbD0qlxN2 zqE$|cldSAtOZXqm!>Y_ARkOiaNegq-;9hpFe*r&C7oLTHOHhY#VlPE;SE}%_Dwid| zta7E9tL>G!39lt&@9r+QL=-=d2c!S7uR8zT6rEPZbAd)h5lz7UFX>f(xMAMaS7hv8 zJUZ;};=p0$EkGr|^$g1_c`?u{jHhtz^W*xPs1M~J|8F9~37%714mU58s-rG&wbc}9i2%w zP-EFRw|Mo!<-GBF6J`Oa;#!UQq}T1UV%ghN@g&5|vdvk)Mt&>W4*5UjV}%MbOJ8j{ zOTet#Wb&+&LbjI^msIiJ27W+Ly^MOuGlg|>nqX3sQr1AX@z59uD#v$lB7WdVF#$1s zgn`l0?A)jV;g;B*EC&~0m`9peK;5;ZunkRCaU5RWx#}dHVZk-!MKI0n^J+vExS-=2 zNh^|;Hd??H{8i4t8h}h;Hv;^x4G<_N3RD()$aDg5zF`5AV>)4$PZ{cQaTJTp>Ae|TLO z5O2qD?vB*zzo+fIsi1~`y`GPv1-Dyi++b$Gp{kCF1Elq!FBZtMuszBIwjWO=>gf^8 zl<(|~33z~dg`SrBL)M46fzBc?SjJ(%Oay%~jBmRuj|YMU_+CZi)B zOMJW&wTS%lj-u$Cyn_B*6D^*(q6R>u5R5i=5!=K?K@e{!hyip(H^aZZCrt`8M|Awe zg<>9%U1N@LX;VT0k)<*m0=|zId8DVZTq~{?$}Q>?xnh^T!9eE;oqfvPneeR_!a0_0$Pon;CG=6AI}h{|TziDeBVwDrvJlr+r0 zxLsPQKrc}xWU8V?qy1XAcGs=s>?h!EZ-V@)9&a(7*DwQ7+}EN5HZbR_&*|&`j3_-Da6>kQpK=94!t#)nqjf> z?d7&K`bNV_Ny{uPcm(zvLey$yn>-UQT3Lf)F=s>HX!kSIVMW?B(ftA+>GD0*>fXW3 z7OxP@;2|9ctlY}cDD3wBnM1=iw9E<;g~@lQGxtFf5ew1UBQe1izL+D~Lq!D-4?j2_ zm}EkOkS1eYZ1?8mZD6CSqQj>13mS`TWejnH>2Q~HOTjxz1v_oeExV6$LrApE*FVG^(H%48LL`!^48H`ZBC|w&bR#!IG2`TBlD*l#U+sc!boO#?~dWR?(y%!uGN?+3;#c*nkax}99L{<Cg@?A}Mp0SW(K?BIzNg1uZWmLlqdEkyyMKBDr+VFdC(iIE=)` z2yFNdNZ1FNU2K3n7VZyr{T5r>Dof-}*Nn>{h3JuJ^hBJ-o0Q}~7jeG%Qmk#M|U zJh8D79YShvY!s_VR4b0Eulhj0V*bI`QL|iD;62FraFsR!(RjoV_3Dhg48GA@er`JW z4k%WDw3KK|)?89Terl2ejsG!TT@#fAljO(;L*vy2jZS_qyFu3 zLQywZExYw@$7md32@6ZCxE_sR9wEvhZVM2xTZanSVDra4jh}zUB`WAUN4^g_u>$-q zCnl&VBZGxO#l*p1n_Ea4;nzSS%(5(iDlxYihJx_ZSG9|K3vexRE30CT;&aTlZe4=x zs_fYl9o5sGYi&>DRhWtj3@lrZCxW~~VTKA1iO~w~*te|oyq)dw>Al?8gH-gAi^Sj_ z_B-!_^Z?6(R!PlR^g?8p=@cvsW{K`@qt>*!cL-%_cqKuYY-2FGhhZjM*YBVE>urb2 zrF2!ldntsRxIx&|1U?-}3?jNJh1<%n)U}kjLe`Bp9>lCyY%9>%f6tIek`v7?D+=9+ zBobF^%|GOcG_m}^?l1icpoZ~QX) zdn^Uu?|H;vrg?yJDTC@HY;JZ4T612+onnzOl^U`mA8$5H$US;WI!y(nL3SK{44Um(W9FB_wf#r~z zC&aYx&UN}(bVvg|)8)5_EEMOx<&GRX6d?fwt+gTf*3#4S@^_W(?#qXoF+bW&Ia2Jv?q#iYI%L_p!;4ayuVIzR|95%AEnJh@vvp6Nuxy?aGF}BJx>jn+%6F z@T6#_?gqg2L;iooTXT`EClJIu5K~mpC`d^`o~kWv`-CN&RUjC zcy(OxW;R`sucr?#XTK-%TjYkJpAokJ=1bMYIT1Q??11AWP&>+&xU@fr)_xvZzlae| zGY*>7SV=DPqXc0-kg9|_w3RDyq=wJM!=DE|Qt-)KkzQZ6T@woV{`27b=Q&mXDUKdyT#0M&`x}2jlFixshi@ zsurAB9%cR?Mw~34>pD4LN-2ISXQkUY=89Fk^z`w8!lKdRpH3#YoR&ulZl($q5GJk- zS3$jE6z#ItGL8`3_Cu+O`#JW`+20qilUaVBb#**Cqw#mS;Qgffg2)UhTKNy*nh9nP z{UucWBb+5ztUgGezi6b+{28)=D-4m-+?Xd#G8N137o!#76}7K=lIxY3YnD?+D!U-u zO!5)%9nBG-{9jbb6p)P^vGDV6KCbw31HErLhGh0aXuhnXWetrXg)@myl2q{xSEaW)S^wF5|&DDk>!6tV7Xf$srCPkIxLCiG8 zqQ@7B?=M+)XPbgN!|e5V0m}qx_UxbF^`^YZjWYZ@O;8P)Qm>~!Xo;UIVF_L%9-w1j zcZsBjCrw+PSTjd5>_nT_i^sF`c95R`Xzyp2^P>1L0}~!5JCHx4{ZqvG$1KUWUGPMx zv>;?@I@9448ogGj-c;FQ1CM%GVG;xgaMhBK!B;nxJg9XcPDf15Q$@5r*)p1)uepeO z)T5vz?hpAuzVQ0Jg8}g`N>T;#-YNFl& zXi~)Uh`ayz^^iOWO0}j-bM;S3IoY?pQq@QN2q$bjOPVSerYt)klUGKCR?slmC5rGq z&w<-)P;nk_pptK!RB}2yYLn5bukuNqQ1Q8-#{845t7iWrKHLEy3xegk=Ht!8ivMy@ z#&+7GcutjI@@?|0y$v!>l>cT{UR;C1XG^NM=fDAF!sr{Sq$Hd+7g@F$(rI;soEE-^ zJG&^;4k%xS^foxO|0(M`IftxgQDy>jaH;FsclLQ;(c;A^)mX`vs8x7v7>tRu-r7B- z*Ec?FdeHVhMV+ad<<%gfDVD+U2=~O|bE3GL{%X&4k-4q+K#-(w=6Y0XvactgUN-V@ zC3!yF)hc9HOO8w^9UgvuaY+Exwd`xrMk&PAPj|Rg!0U6j6vIXNJQYmTi??)GO4+KR z{xsE*omVQUyiBNv1jbpFW}gFAR?3L;A{bZC+@PPqxT1{`NU!p8V(n zQl7aq!@qKBaK4)wS1wc`V+h!3Ucy_|X z8LoWba;jc_&*Bl5Z}kceWAbfu!gzZa$K{|WXIz6`A>BXH#9&4PXcGBH@8(US{*_|~ z;!?!-$661ev)iN>E{=XW9mj9H+1-1RErAZ;!4{R<74y zEe95XB>o3%fSzx^1Lkjk_kn{P%TJnOfI^r8pa9rDoU~(;WBXO7Q*qC}vq!&Q-^TOx zgX3|WhyscLCsjTX-%lrRYgVF@x5Z9`muqr0+}=AJx@sUv-Q2PqN`wNC+U&^GUe%Ld z#8Nwa*X@U|n@mxtSE0DZ;8WN@F-xo+Y>F|+yz4xCJ)K>}kax9}4K3t|eAmkR4VxJe zaY|wZ`Z7+0iMe0;Dj$y`U=$RNQXmFHY$u^v1=9Fo;yHd_M1&DD@I8bP8IU(V*)2aeaM_b?#gWq3Wv71EeG2Ty#Rq8u6sd z`gSO0>md{Q$|meM|uV(Pd599L8@h= z9pYPE1Onyo?&d70F2k)*X;@WEt^tahJ@>qO*h5n({wUf!X0K9p?cD3Q^pFAftEe42 z37()8+4-7Ejy9wO>Q!jZ>T4*GbgtBOZa&hWNb?SOa|Uq1Qf5mg`~ePHyw-p!Kg?etcq-p&MohW?3kD*B8^f*hwRE!+ft;00xXnO z#d9K}02sC^48)T&oS6RXlH0Ls9*Iz%o;?wZx!ubAr|A5>LL5xjF|c^6FTD#OAc6L@ zG##)x1xd7hEu0VK5EKjUju8Dpz!6a%YZh`W%|kr5b^%cJ%Vxs>WBO%7jPhd$1TOhJn0Ojhuo;WR zV$FY(q88irp~jjN*E3T*Nmmr&XWG*NVl@Es017>rVU@VT)Vas*UrboR42PlUj0Dcb z``V!4>7lCNWI~sTVD(RM3eTRIw!ll_`E?4YzLhTnKpbCu5c1cJ*L{)NM`y&eB1$NM zPT4t!Aw9Njk8F;0zfr|In~h-}Z^peqc1N>;>=WdHFT3K6 zdGh*$yeR)Q*2JjJyHp7jJ7Whob`YsuUdb$;?TQ6~Vka~*rh;@@YT5PlvWj)qNE}CA z?a&a=kgxJL)_+OEZcxB)>+{3F-;vm7W3nEg4Mi0eCs$7-TuAm}ik9xM0xQnY)4d@o zPzb1!rK-b!t`edBM?n2I(hpyT8lCAbe0ZswEra2(lT;* zTDN$zD+)?DbH~T-uMF)rp5I(DMeF63{SLo7dB1)`MbK%Msw1pJJ>Qo>U#_^dp3Rgk z@t#XRP=iqzjaNGo#D$ok!wo|c)!&O!5=nHW+dB_ffi=@#Xk{f*`nZ0fHDw0x8pfvY z1K%`at7((?)D^k1Qy-^?E)c@vULK2nQ7ltrP$<=RzB;9l+wjKc+*}dhx~PN=>k;2B z?Av-5xfvD%55~q1=Vy0jqri7j{GIG5C+Ht3^tjIhQW3iYDvu#)OR4OEh&%84YgOTt z$Heg>)8V)6Vkfqr2~T2TJ=gZICJhM5ZAejZ$>}W1*!>lxXcQDZ|f zHbed*7mN=@F*t|h4+0~RryCn<>{Xe6(}dk*?_YZlcKr_jsmzOV2~WhmU*0aatW&YF z_pGM8{7O`%NhV?Y1PWK>J;Hq(QK6~sf5flMG3C0xJ{^rF&-&T#YqL7P`~M^I;T=zB zPPG?D4vmjmQN9bEi=lRe&Xry0Nhz1xq3Twooe^g_--jQKVY|k#x93hn9yds4I3;ho z^s@_@Crw-Pl>)rP0{!p)E~T)qhs&Kd80czDA`~T+v2F_2O?W?WeFAMitKXcDCN*ar zAQ#JNH35#?y9dj4do(Ps8_P!d_GeHI`9n+F6qbrxIN_L2j_{P_OcRW0;~qDyw$4=+ zNLk;L59K<|f|}FI5GC{~pFNau#@SweS3a*()pw3O-xffJ$FO6`?(an%qGuqT;??a( z%T?Q`s7m2DXX;41S)HrXQlDXf{`(`z3v;<(pCBLQe)&Ijt|Dq7pD!b2s|uKomS;Q?4n|eO^;Y5` zv%hN)&2W1Ad!dL_FY=Aq7w`(02rWYXKwHm6YL7v8mXq$yx~rIYK$q-e8=05PqYT`j zyDRN&8q1!#aMSDY#=w2dGlyJvRzlfIRnF36h)8l0B5NAw)8Q2b!Pv+4wa15|I{`G| z|BzjiW3q03$?2=bzB?n<9;6akKZ+Glj_g9&lA+1IXwDKKH$iodP3gd?>8RR1XIxm+ zNeXO;h9T1_Y#V+!B*Xkjqr>c<;ZE})?E^Jv?b5nEYDgZYuo{EFe?WrjW4=-c`Qi#t z1K~0aT2Sa9w8d^#g4L}MNsw08Ecdvec-U^Q3~p=XeG73(D=&<5WWXJ%EnpD{YACv} zQF=JFYIA^AjFJ2fDKMOGax3{p>J^4o`&Ti5ubc~a^*aHnHJ&e4B%2#^C)Ek<#yfCy z`v&0&%d_H42Rj$b4I=2h*F*{k*7bHn%z)D9dXdv2BnXpO80*WpyW<=6o_zJ4LLZaDV)VL>eHk5LlOLCgvgspkHe!_06tN zkrXqNyeRxVkCd)EUp7cAThe$BF3piR#!9i2Vq#&(k%7%ftxVioZ&Jx#OB#QBnC;gl z#~8obWmvH3pJn8pitETS!TlBzqnFcc@OIQ7YqY^t<%_@S`ApmnP1DsklYUhlu~>>+ z*?_o3=8DU9_C^gCPi$i-1{d}=U5??~Yq18nuKi%L)y3lKg#IR(a%WIIr3CM{ zWp-_V*&Zdlw1XE_z$MDWJpkNm$ZeqAgHmaa1HCeE%XVq=o@iG;i#l#h5Gdo{L%hT( zrpS3?>P|ZLOLqZ+wlMH6yU#DEfn<)+8+e!dp2sN#W4k?3v}Q5I4I}nr^giF0vF@G@ z!ZM%X+IFOuw3$tlo&rQ?v>ChYt$c9WlM;>xpH!sxQ?o$C0U-x{(V+N-HlqfkS-Dam4@0mf8BhF!eI2`&ZfX0J@`~Yq z0@Qf!G$i_U2g~Cwx6|d+QEAV1zo3)cDqEs7GoV#|>0Ozf*0VIw33Dyt4=dGPp}$Yi zpVk#Y8m4UcVt0_a$~j)=-tMXScG8BWZ!M+UbG7n&R$NyZlUx zU%5r-`vAS7Hv}DwLaH!N`6qa)Y zmgBN_vCMi+w+=$~_6^a0)7MzXZrLPdK$q!boA}>j*W5KmMhF>|j%a|R2W|}kr_n>e zg_BN#@gE#>sN#dh)2%S$w4-ZX`B3RVY(cR1xNT4R^w_5yfNCo&$ad5_ox-zFbkFS} zq11<7@1q>3%LJqr9{XAWjR+~@E7?CA$^KKvIwhrU%mvA*WKo5;uzpq%GhXp3xzG{c zAVRr?E1=u^@2+19MiO zFWxHCxoZSBuJMg9Df$_>ZKxcKhEkH49PEI4KcuX&>6@N%psq|Q zzA9EXJ9urEea?uIeI`~n1{Ls0A4wv7eX4}ect$+wm%LX`(B4g$d@*F-JwF{|t2pr# zF!9Sf&sclL`9lD{he(Za_%{(mY7tN}1e5|IhEW6Oa`}xBGVtsLQG3;o?zcxSQ$JbP zOCfYEIe!yQQ*gNY-WO-}5GYLn6QXQ+w!VOY6;inwfkADYZ`=Kc&3R3?WCnb8)Z@gW zQQf7Z24*X_G%|)QCxoKj=?Ip#KnErdG%i(qu|_f2GFJ^X(_U83fNvg)ZZGOv7TL?L3bUt^ z?^oTEqc2Zo64sml)|@d$)wE(RhQd#y9~|Co(h_oF{hK)P?7O@73y2RQq~J80F3%w= zM#tNIJ)FxR%{FW1*%N?i}A9*=(=?0OI+Xm0ir#W{AMeOz?--rVu*hsH`Eg(KvcV}~52k#sn>YOOCToszamA@FmfQWsr|DO`MYc^;Q z?+@s$kuoBWQt_1~G+pVvgFLCb%SxZO0J9$(zBuRreZEQ#>Bx4ec#j&MzvHROcB&ca zU@ZPlZJAy{khKW#cGz%))tjB%eYhLSa(R!T=0MS2Xn>MrZmWab%O9SGx}v?eLmRJ# zRpW^62a{07e7|7qm04x}+n`aqvqnPGcS6n&AVW*Y9P^4S8}&DxjJI535e z@wvWXvujN#sp2@!0#x*kmYxF#two}m^W23bVqR`Lc9oj~?1yxtyh4u*&68H-L|ZGVU^Z`qKnDIV`P z2plyi)v^muYcPcgEc}eGa&Mb%ITzvT<;fJC7QAr&h}2OkK5!He~acY zlm3*cgB(XR_~tP_9oG?VHUCLjD1H8Lc|*NA5=$iNLLxDgk+3}}XglzysIt-U=w0ExU4sGon#*?+~GCPKNTSEq2a&s`YTRsk- z+1u!PDo*y<5Z>X@VGF!DmTN;I?HhDUT+SMVFxk;E zyN4C*8BGpK5pi?z+h@B?7x^WxaN-{3tp69`8w*1cXRd|fBlfX-JCFT$;}J=}IU2xF z_6dswQ)x%`4OUii=>uVm%P}4}tkBtF{afS5vqi2!-=v^^QTIG$q^=Nq|9l`(2cc}i z7Y>*22k=?D#sM-U(3lEpUvY4Dm;VjsKCEdt&)cp7*auX$ren@8T{d&6BM(i7)13NU ze%$%q%44^_9|Gq%6?CD*S-KWvDg4QhT}|J3QB!lq*xfF@zDIV>#LMWD*%q<;tMevN z+`pN41Wf$&d4u5I6B>Qg3!Y4DcG}@kL1GkUrLmxlQq)Z5zMbJ0_GK z?8~TK*PaEZP)f%3Imn&e>za~XovX@uTmE)$nqbvf2XUM_13F4NKXdZqG#kv`cwq>H z&p6B9^G7Dfzc{s5M2qS%xbb!#@-(`;xw??lcj|?~Eh7DY`GjQi(KIO(dIQ@)h}9CO zSc6sb1gfiZs{E$(7c6RhJPUc5ARQ@a^r7KTbJ66t4{P^2@p7%8kVsGXX8~7$6eL{ zceqz)N{ixOt>JXAhFjAiW=qQxj2`sdu;IdBu|WLg1k2Fmd;K@eRd>6NIRHQ7H@7Z# z+0~`6bp5evmuD5FcgCp_?`*WlGYJY9*kX+2Yi=P3keHuey@9+~4Qfr`Km2{Rxj`S{K)|rM*Oxn3` zU@^O(42Vy<2b&u)S#nzJ&!A^1PLsWJn*I5=K7?P8HT--n_+sp|K3$Et&31!-5Mv%H zaopc;v|}-K;S)~QFv=S@ET|`{^Wr*(?wHldfpwO#$lXOeaeqOjl*zlhPBL)O)=Z?5 z5^hf!uPfqF4^e2NEp2D>Jbr`rU(c-gG165iT*99l9!xQD2x6kw!~6g}Av)zlLH z`E`ZUrvA}ir|^ih%-EavcRKdnc|jd^HSUJFZrgal{;O6S%W76d-pO0B$nhm7{^-gi z6rQeQCf(X5$y>%P;`#X*pbp$$6!pvZ;5c!F`*LW@k4JO$_pa3qu63grs7D*-n_KE2 z^%zXl&r9D#6$9D$j?%_CuES~?rblL*7QGN zJHw7+j0E{!IuJ@FJKNrhm!FDL%S-WFF8{P03e(U6Fw`(MWt5rhiP^`ao2z{{{PcHH z9cn^r5yUv#f5`ZFCS}1+0fpuj^I#myiM50r?x3^ImtfumjeH#oEosgU=dG558>-bgWOAe3+h%B#!DJ zZ3W5x2iI6FA@afK$%aeUd!NS~{RhFE9tvAh0(XEX2`4<$3+$Dko;*p}PT*ee#;UnX zb~zG73Cy2iOLbiY*Cf_QVyP`8)_mE81^O?i&3Rpw@IY@UvNm<*Q-H{6mF0mEHCOI% zQ~Q?f`=N<>bCXZpwYM;~LGBbYdL?JptT;d`I&qUO@6EsfL}`J?keII03i;4VKO!~* z=q}80R9y5rG>522n=mk999fqldf~$#qG$~$cAJTsNPWMOM9pYQVMCZe;|alsh&j8H z@c={vC10{2yOYy3tYT(Tpo39H4;Pl9=^OsVzPmwmc_HDIMclW{zDPq9-m^PZsThti zPsrtmw1{~;rGUr3y9$K|Y9)6Hj)P?wgUSLSl=SF&qD8S?7*{k!ylyyXDNr&Y{C* zbt=X39Ok{FoXR%$QfJ6ahN>xeb8fbi!%!x0gbc_CNX^KSec^qlV@Y} zlgCMVXt5*m>Yk*NhC40tj|-vZIj?cS|HZe$c*XNG3dHD>vXy(EUGtpc$crM<7nzO@ zDWG=fN|>v}OcD^wrVym`z0>(k%iC1hlJAa0KcAJX<%G4Bd0H7bzo3KNAeQTGyB07Q zB`WOS=;P2mn<)|Vgt55o4rYe#c%0KEXgdEb8%-}^9iMXQcEC|bTJV=^q0sb3(uUyO zf66s>307{CM9yR@#kOZ=w{-x23ew+_3i*@YX~N@0C1-n6)B4RRTCA&;BTyxll2kU> zX5YQMWxps|dG4OQg<=q!E_6t(Y{A*9(~EKfW=#)&-`{v4c4iQa+nnMkJNO2L8eJP6Xe@*3m$cSqheXNPWv4<4r9k&*Nrv&wMpg`tI zn4FQoHAU|o?8+X71|moN8fMH&ZR7(-u3hyz)?~pG@6MMxio_|`ri9g)2Lt1qCgm{; z%&!`$(?cAIrOr^T3sHA!*B+ur?ptciGK`X_{`1V-R)W6jU8gOTc~k~4BO>jPSM5iA zY?bLE)mtxnC26%&5B<+iYiA5Nrs6X3}np2f;pj86Y4!ig=P=-g09L-lmu7%6R(K~nGpFeXC_af#bFWIoN6-bJN+StLEnlI zSGu%L|26f%#Ne3o(@9+9({J!!ZpN~m;tj0qKkcAf)E5b5E)v}O?Oi{@Kpxf7j#MP^ zr5$8Oi`aUpNhm4dKsC&p{UGX?M+>(>uBfaMWgNQ~4Khg4!6vrr>pY5X0UnYTxTQwA zGJq~(kUCJpyU_WA0O=qYAWmHH32P*3KKN?i6W|3*~(gWLzqz(bGz(`c9 z?~}iunf6bt;bw`IcC2Y?2#c=lxpv~9&^#buwg3Gu)9P5}=9hG93lBMS*S!6`%p>qz z+7o!WwK3xLx8`fQ$^jG#q;0xcR0*U`-mh#cg%=g*NNT;*LRoPqdC(831=2A2joL36FqU%MU($&Q-T|QQ6q?e12@~gJ|ZwLA> zh90w+#Wy?V)Lfe{{NuOVktdrSr!&RUSu;o9biQcezK$P=nm8k$lw4>G5VQ^?svZW% zBxQa?cR@#u$U}>9>X*QAh7QRIshUk@5k^ybEF9d!U`Sp6wntH|zu>)~oF53uXrL_w}VnvS#J9c3yme zBc|!9IGM&%=K^$h8so2zt8B%-wqU;?-+(7 z%Ib#nrsRhI#2H^lq0D(LUC%vTW~v0C#H!xW!9k(HAy}>7JsH^rHe-kM3j!LCPTBAzIX2M zot_D#J7VSQkhn_EflIl`cw!7E!TC>F#w65@f$7*9)!2l=n{-zk!PRF%z3Co*qmR3$ z3NrG0UCfdvYJ&W2xDr*<{k*=98!T zm6f3$&zo(i+AOTbv@WQL@IO4L>LmZ zgv=0RiA=c*H+4F>R!ccMa4<+gX!SRIr;A`|RFK7+DKl>+TXcr@lD?q0hLu>eDg$}) zr}z046MIWxh?FGnm(Tc&apzeq;T8Y)+yl14#Jyl0OA{C|m1PgMrRv4|S1+B|=9BUv zwXVf~*x;=}$08U#RXQ}{uc&JV_m;oo|bG!HaCy;u>+^-TJ}{MlgDJ!<{$KflDT;P>G|G1Gof%i$9j>H zqKM6)g+{#ZImMQSQR7m6wW zVqRxW0W>n;1cO zMXdR=(AjR+0o61d>?rdT6*Ndutc&Md&>M5^#tHoYwchDS<{iOC3AdU?ODlBs`K&J2 zr7OnMNe4-`m}j2dxHK7XSj)MFbV|kiwhUoa4C zUIFTn9&&Fhj!t@gX1m||yYoJI8l3=Rca~7h2!{ZuW(fD-?z7haJ$bJ+LmOwNUiYXN zlqp}(yyIGx+Zx2+Yq60MebpySm|(7D&&|>IxsoMF=L95bCMX>%*4cCj4_QdnCtf%?f2TgzdxWJ zKJ&g_ujlJ|04lT<9?LE34u)v@TS{y&AzHRZRgb$21Jp86%eHcO3a z*wGm*^wn<(3zgJ$pH<*if1~|<4Rz|wf3zS_6*VaO*|;o-pzf^Ff6oY`;s*$O>SqYx zwEORkGX?{^Q0XmvP7h!DV-rYjXUlpzjvJCJsk(gg@7Cqz`@i$0&9F;TS^p@p{vSn* z_Vd?E?f-)wLA7u2t_uZ10@JPGW@GfS?MmrxM`#Ri+rk~=syYt zuvCG`pH|FyzXYGf;aGCb_Y1TCA`Z$n2N3vok<>&Q+w-L5JkRP@IzDM0CE^-mDm2du zL>3&gfi}%lgZ*`Mo0r|fmqXQI#@RL&f$#2`_ND&sUwitoGoS;jn@FHn;Qy3fMi~l~ zVGOMBr+&5!LR?*RGF>TupY7)$!(SY(l!thi>SdJRXRFU2`Oj5f=M|f2ZDoP+H<$({ z)o&c;zuTzAE2SEWMZC2NP^1`WUXH?TtJJIW($+9z4AQKyn-~8)&aQN*;WLzO_MFzn zP^)U|o>ZsOY{4z!@vj>s2;%lQX0hw$2B*fcEf!w;U)XiD)M_*hz-4A-bHKtw(1IRc zr^ygH=#|fI=%Lf<=k@>d@hF~RZ4XQbcR%M#eNMhlgv`~N2K>7w#C?szcz9oF!C9x7-Csi%o4$u?EJQO|Igh+X zL;KKmo3rRi^Z6?{a~7>crHHPvl5p>nL2M$%57`3$nzCN%Kr8PcdKyteUs|@B~vpc zOkr^>X6l+It+a7DYc>P_-;G@~kQ&^uzRJwl_IzZMNR)o4HJAA&Moejat~l$@vGf|u z6PDTP^wDDbn@k&{XA%|k-~Rk}2G`=Pe`|yA^IR>fsM9!<(P(dRw=r1MUh_oWILsJ# zza+3Rs#T-Nkn$j6q{WPsX<>?cl|?KrvMYk|s3w5gA&b^hmu*ntF%y}M)7Enj=7>NA zA>*9Yijdma7cI7wL_doC_CbHkdTim9@p;jmp|ueQ^G&mKVaL>-UC;v-K9oUPJ$046 zXi$gsN=n3`oxJwR7z{S{a`~&5V^MeieI>yI(~dwi4ej@;ZO7_fU=4MTbVQ(wfmd8X z1f>1x&&NXg%N$8yJo7@}SC6UMc3DU`*ui)^^-Nb;#<={8zXkmOz~JEH-koL%lLK2u zrKljd^X5#VN}1r-XE>@>{aS5Vz68}`f75)+V3oJU#-`7plh=;?1vV^5#j`cBt%{oA z{l6eV0{*=KjBWvNFO_SbRb2XQlRx^6s5y5ma^wzI;1=FI>g&_SaqyQ>st`LftWh!k zsTyt{`Xw`By?o}9QC2V0>Fi%}z%L&P*$Qt5uogx%5!Y-~Xe~VbI%1>)6G*bE1wXcK z^_g^HP?iCQK47DS2;eW6H8Q5x139-x^>4S>m-h!ciHgQxZm-v)rQ-{HwwgVt1&Q&> z6VhLMGE!lpHW)I;d19P15Re}BvHfz>lnk)kC0v3)akPOTe`7TVGo_dyrW%h5QqvQ_ zfzlu`L#m|yCM2dAv~+OENvcx?gPpxJ>nLQO*mKeb=m4}>i@>6fTQHdaf}w%Mc7Sqd ziDe-*==%Huvk4y_J9lTTXH8VcpMb-<t6LpSCw=yr7E9>c95<@zl7zSuR0WQEi%Jv&e2WH_pf zlIPF4tevm*=RMj`tlWLT#bw>*VX6*7>tc)9V+qo zW(oE*^Z$W-o&JINm|XL#LgyWQ7lX*8q1cbNOSJ840^G2tyCWqbb1RE2?Qw?oXBNg5 zGNh=fv&5oA@gH+Wi2Ei>5XQ9}#}ydyH=qlvq6&c#In7xYoewRsXcwu<+-)d>6YS-JCyY&?2_bmp}Up7IjI$;m~D87+J{N=c(C7A4T+v5ClcY-OtTSPLSF?hjifu&Ko zf>9oNHj6!7f;nr>E zlIDd4M<@b1@x|c$d#|;_sG#1eZsEhI-74P69BF%^%ksC^IfafZ873F<`0@V@ox=fM zeBf?PUPVo<*0#_^Qk{o};XjE)wHZexM2DeD9IPxfeVGPeQN$~sPiuVW#oepYaK3_$ zRA`Cb+=RBmLKM#inQx`B8we+8z~7qVONsazdB$4P%OuCF)m_qfp_fQ<<`luk_oz>j zGjfHLE;o3czFgp6DjXOxIB1ietr#ooa%O+GroL+U+Qt*BZEB|y+WCfBnC7+&Yy{1z z3}I%C>GL*^qtv5q;0M}r7i7z|r1PgLJ@<+F*ZWl;N7SA>IajZ+)yrBs^cpjEOH!@cPGc&2gv{C20DuP;AnK5lI=Wr*fGS5|c^--ipAF^Sd5QWJsno_&=Y zED4$E9LarKeeProroSxQVpZuHptq<)=Co17aa_bPNOomR|^-DT(sLt470Vy&-1mvB}z0zDHc;Q*wo|ARd7P;gu z_y_>Ml_E6QKg`p0TE+2cmFA+%%W2;A$#m)aupt`Cm$4pk5qe6>q?y(L#UW_(+AVj~ zp7-TWoQ>A{k7rE`gZ-&gwLwakqqWgJoz@8PLWp3Agqcea{<1GXAlj100Dv(fc7A$7 zllJ&vk5Wl2zy8O?GV9Bh{>zSO!@-oH0w=bbR*~b%`gz7)aGbVNThrZ84fNq$Ju&xz zw~{$ahp-E@FJL^>9X^EBS}pMm$XCSGgO9vGre>Db3U|l|pj)m0FCxL;B}f~9D?&|V zaQ@OIb>Ljc-8l{aJo{zle2b(cc;^)1g1@Z|(tfJB2s&!*CizV>w(r1M<)0f=X45gV zfbW(I4)1ZaChO?pGz>OHSXH273lvBg51d?$XKc*WnF11+Blhz@H6|O2nb{0c*8g*- z6?}jeF|mte^N1){$D!tge=M@K9rO)vEAo4NG@Eib^9P=>{))gIQeC=cS6Jif4jVAH zIRn}iZs~fC%}#4Rh@(zAYLlcYzD=B*m=FTGub^y&Oz(fOT}`u*sbQGJo%@(L%<0DA zxfXp3!c>hn(UsJ2U>c#MxK}T*O7Bbf(w|Jcgy@f#LWBt%s&@Ursl?}s?Y&N2BVfA? z|I^~P%UqEpNSY*D{1N8OA>z93ks^}Lz=~F3)gvNNw`w4e?Pe#5@&4ZT#WTgKe?4el zR&%lXI*7QKGPI%j)Q*%i@VlU;C4gT-EjT5$hG%f>4=MdV(SOstF^C=uh*ZI&mpt&y z0J_te!P-DV@r2%UQ)P}=uPM~P@rJ_|E10eHeO?p@uhW6pkqy3!{MCMLgf@G#>5vfxyCsq@*-P!gJhHq-z?O#2y{IkdvNP z_~Pp>L59VDZdPwIr?-dD zV3+hoCMEp|6KWBkhI(NTgCtptz^0L1(W>7&E`Wio+~d$FKA6M?nZF-D%JeE7Z`S|t z0@^F&>*F!#7tcWBJcQ@G&E4YE9lnwg)qRpHH1UDoopt=8y6}nW(Ty6D{Io<*RMd!; zyji?=HT|#v|E0N+VfOa{1dWo~H0}-^2=JN zf7tK>-&g_@Qnz@=X7m4VrKLfD3ZoKU3TPJZ-{tmoW;P@#*9r!Yhf12}JHT&}X|aC2 zVpjC=T`+`KmMOiBMIb-o&b2H*skQ?o#qK)w;<=sN=>D?ypeCXU;y_}W`u-6$^%1oX zYLMv{wgNud89C&NT;hg&eFC`~Ra!R-u~3h#Fm3LRT(urhabWraibv2yan`<2$ScOQvqwi(2B`|y5%oY5ACHDWk*S_%gIwF{N z>a_`~tcC#motoTga3SdU)XbKU{QZ`ED^otfK4LTUG&TC=ICatAl;cUhE9Qefj8 z(MRZL*qW|ka6gH|E>GWs4_x)mif4Hou`5UpG0cG~9^CSe3;~z9AyPZ^7;R3LWR#;D zm0*1KK{f;;!k%Xxsn(K-ZC&L5H5emZj)vCm8~y6WyZjF@$k4VM`^Q1$($3#`hbZNg-+6D>^K#cU zcs7b)q-K5@BdrawYl$ZRo_o7nTkYB`=!p}xhdEeM$vrs+c#AOv6~t1yol>4m?5#fg zSbkwVJV*UDP$1!xXBH}*mUvgwWc*OHb!&fQ!IriJ$`tSmKSCDGXpQ?agX$9id zaHC|TCgKk2)?|9o^^vNEE4WKOzX z1*Lt`@}~~>61{siwZ*+6(rmvY+QcU^#M$= znW?04mrC>831=zXwTLxu!t##R`41h|8j20`r_Ejkwz$69$tc%wNqU6UhsoO0wBY<~ zO1ajSwG3&|-V&Z7#p#pD*H`vRgoh+;L#DP7*}8_PcLp20U&|e9@}S7B<2mY-J3}=Y zN33w&{psPp!mzjAPHIp2^oY0 zDg7TV#yzDF1TYx({_{w&&QUCFBA9T}%M55k;rv%i3*DGjGsnzO6}$fUocZ@z$i)X> zqhp-DVSHIKSvy&|#lfB0pB9NJ-eI1reI6j)#wYTt`7>jWylRVF918YMQi76sSxmbM zWP~k~1JXcE{4;U)!Q$GW!CvP}(@^_oL&{P;)|%+FuNHqA z?a1QA-TLR?*5ln$#HyF2ie9m(?(pIsYkMFLr=S(^Rg_&PL|twfzGUSVK{JPRSRBWIeO;2y+ClW>|TRy#NqJO`qqR=(eNx zA_)I%VK1WLTnc;@rG3l1h-+3~%_&C-TAuDt4<3#VJ}Hr1%;xGWwG6vAOKdxuq&!=^6mi%zvsU4QPNm_wlRS~f%#nM6>+NHwRY)tzhM+67kgfn5ew)zO%F0T@U-dykie|iU2U~}KnDm_XGBDzAVuJ!^8Hm= zlo?I@4b-7TdVR+l7H>e1%>KmGzs?T2YXltMDRhrR&$#F>4^_CxLH0B$efBm`lQk05 zmdX#OR(n$RO7WX&1-42q#MDf@&1Rp9C-`V0;nd!0>5qv{Uu~ZoaEaP&h7?)NB*sU8 z8(B~Vl`E%%gOGMRjMQ*mXdF9rC!b!9_SbZHt3@TwgdiY zcw!i=$bfrZf+G|yXEwKCMzS?IL563;YGLw#i9uef7DxMH=i1M;%hh_Kc1lGdmynPU zxHe^-{Oo&wtHb2hf9*GrBlWRnEHfq(iiycdZ=$OrgR58%YB+&~7p0j47k1j(*2^eP z=7H4eN$WVo@js+%7e|+}M5o0GrVNt^d8H^VO}Q6DD)by3fIK>T{;vl zQDyGbHG489N*$TwI7AIQ`Gz8C&3ctn<fCHpLQWXU+F;@C)`z z>DZN|3+!^L;Q=z*=q_`(!Ps6HplH|^M4A)U3L7IO3l;m6crZ;X+eL)-V8*=IY3PL4 z`CYToWUJEg_M~yEPdBEUTC0h!o&@kYM+=}>CT3aSVGs9-n)SEH_VijH6dJ7UNLp=t z8%OV-h)Ei%i0e-wGfteBKQgr53Hx$H=$9@bY{Y$?< zgz{SI{)?OYTV!vgj-biDF6MfR0H6EUL%LV$(UoQ=#KfnmOejej0E2;67TL2 zy9(@f{YKw~nX+|18-RPjJI8mq>RY#~_aDi)(N3Rp^-=%+<+XlMt`uNh z5o<;XVg8TbYLkp450L0}9uwbF9KvWEdly9w6aVqfjRWp9hnE4pv2$bv6RZzZnMYib z%rFI`gf7t-L_@XiP`d@HtR6+Fu9NBj=e0tY60bAj0?1k1hwvc1ck z`0c&OSPqek%FkWXwKLe0U=!@={M~Kqp+CNuLC7ccnU)}~fF107#6SQSJ^wMulhtr< z`_OoPQ)v6W?q|T~5+1gpgU3%>=MlSCgz>zdQOf1zTvX72MV91*P}~!WL?$N>u<8;< zW|!(aG@jqTzYPFQS?M4HkuQqGarb|m#rCO(*Dv2kR`C)-+}OCd#3zp_fLUg{@N$mJ z@?9{*h`A6RI~IMt{^?h^0@$zK+E6v}X6&64;iIL&hGgYCM)z{V3JS8?&EHd6o6}mu z&nNR9$ii|@c=(x11IYyTmI@MvSWuoa;74hUM!#ATW#?J|2TnUMLQZB(Z5=TJ6#4UX z5qbf`X;;kkidNrzK0S#R)Ez!d`C-KDiA)m&D*e30LONpLh@u#TV zjON{cjW^^F&N7XsL-iorw~v$?@|*upPFp-mS#?svFBR8UoAfV#y6N1c5l9ak1fh;xg9iH`8xQD|634 zFEDk`73>D+sG)7znFA&U1P>IGl`L|d+!~k};viXUk))_bh@Gp?QM`49YbF?+BT~azp`d@`65!{_ zkAtcVI*NYu#ItqK_I5i`c0H@MfGTg4k-f99kWAKb=iJ|10-jYx{~VD)W7tLM<95$~ zt1up8ToGS0wJ9QZF85K34u)5OdnjOfTB=wS5O=)+u1*l?h;qqSfZRIxePcc4Apo2q z5!yDrUB1>C_3*trc8&I?rsNlXL$=67Q8XNeBAS1pl8kHJWC;L_U&0| zj$3i3L96EF*c`)Ux%yR^U2c>R2h09B_mg7);+4y6(vXi`Any4`@a%iT0Rz0vsn3pg z#Th{k0w5QL9MD|@c@qM> zWB7ATsJg}3#ZxUOsT z^egO9@Iz;NFU&kl5Jgc6M`9R;T=7V&OHCkgSaG+G*8aa&p1a&-mFKG5Z+6|%LgK&M zuM_>0xaSp@fho)@BtcnQENSR}DE~f~R@!y+tU}n`4)G1x1K9^BNx0icgCzaHUHDU=<(ItS zfD?97Q-?*wCh)lvx0z5{XXOxE_3V^`h~?#Mo`OK8!}M!P?2$uc=i_|}@J8A8;lyP2 z`O(7(TeVJ?zA6i~k+Gr{hg0JVnQYU~JqjT!lK7~`q+VtFf{hWnAtZ4NE%C6Reqa3d zH8>6gU-|700Qxf>BdjfyUvWeH?C%%MSSxf%3{4s9qU^KXv1`h=VTzp6W#R)b{wCa( z5~QSInK33y}1dH_$_7P%eRXF<1Tu$(1y+(lOUTqCD{((hBrEJoub~GS$8-bf-H%m|CLnYhvf5yPHMH4kN9ni8j$M&-{44 zl9?+ucH^5EXdS!XmuoDARBQHBO+>GR)H5JSa5mqY;SOC}sqmX94s$uK zmx&~dH)nX`SzvB2nW_n@7Mr2{ry@Uph<2~oa;7qN>dahM-D_mA&763t7dka*RcxI8 z&hJLm&9I!rn7Wp4JuW^_QL97f%F(=%Q3k0Ex(2Uv1c7 zbpHzz`PE05vWTTOc#0w2&qL(-L4Bo@vF~OUYA3_?h^7)WD#By$$(Ip%23;4PSsYg@G1JhL#r0ra)d%9w^7VMa4WsNK=o_|x+5)|#qkN%OORppzxPOd8c7 zPY>)x4*hZ+1RLCfk9z$8Hd;loW#K`#`^~Lt!PhjhcSqS3;rs9@Fp)8(y0~;eFjI*##hz=haFf z`9mlrmJ#_pIUT?;;WDmd?#Lx; z5V%jOns_aYk{#aF&eyHmosy+AyU>v{(o-YQVO!qZjQhfdn2-rOrC+Kc;i(P0_KNi0 zqcCNzx?hjQeGhXim!^?kqs_=c@y-> zEeYf7%E>YP5F7O-WaHX5H`I`R-Yz@nYBTAjT#@kAQWquVs`0$Ck9xRu`2~eYhgFad z$3k+W+wb+5-||II7EDHT)#=N2Hzazjb1N!Fif9t<0xANp@y+?VWlo_&> z&hkB1<}s}Xla-J#lM*3OkE^^r)!b?8;Y2Z!OsS4-_AhrO|$i zhXm;t@==|a7J9u{&R1?~bGquDR$KqB-zc~Mf$^cI#jnMEY4u?T0^13^1A(;0y1O7N z=}#+!9@rrJ*}16jpAjD+u|TAIwscy`IcleLTDHEjxY1Dbn*}gH8g>Cw$ZlRr#?*1U zBZ5QVAMp0Bt9tM8SxeTRs;f37x!oUMmf{t_0T6FssK30S2d9rqnl}%A$WQXOx%k_c zEzSo4C@rXbMds-Wt0TEuIGFu_Wq>~pSa<%r&e0@gPmOcop!M?|M*Wyo9Us>{|2xa& zUu%47tNE{n$U*1Cw@(f+%q;xuiP&S^Mqnt~MmhQ7n!3OD>u)=h1}sufuf|{L4*GP# zq0Ig}ARBfMM4e>S_a<19O6@xLv=Hi~8SZ+y8S3w3IzL(FN-{(GaGYBut$spWcadcF z0Puj5Y%qI}x83h45jSlgnOzSle?vsHZ9;{Y2J)V+oza$B$wCN=LeD8$ak&77>9Ut$ z1|C&yP6^MgtIQ{W;?|lIROH%+oZj`~wPOSM`f)EC6AYRr!A|;q{gla+5Ae8ixyvn} zhwyG~3I8)G<+iTV3BjHTN%Z>xJ+eOK(k$K3!K3Rp1&;&~yQ&o|-B492U6_dI{Kgk1 zOArwH%4(nJE|hS2F+9U}dj0U;@RA4|Y1&_*{H=MC`BO9fUgY_g;Je;WLAF zmI;3izSS2#GfFKH>NFJj-Zi*Rw()a)A>camz%gHtZe)Zat`?@@InaR(c)kf!P&oM2 z-K7CY{p5`eQJoqdfT#iwl{HaWj@gN`kZx{j&JtERcoGLFHVYG6XEpt}15k zxJY#o5ZP5Ki@{L+`A^7(afU-jF3%M$%S>j-K^sl-^PnHb83Ky0#TBvr&lE*boRD-yi99nn3m@`R;YW$vQ z{NL0=P_~Bxhj2n}1E_bJ&Cr3{x2If(v@t*Jbr3^}9)H)PTj;-{K4R)ab0skj$?Wuw z+cVmBwaSrDAG*rZ^}>-hj&CY%qWM`)b>Nk8OGZ+Ou-*~ZQ*f1)g6Cvu++X(v?s+Ji z8oV;Vmxbrvl3zjyOa#j2n>p>+(7y4uS(m=)%i`w#`dB0!?!I7r@9a(a9%xDQO4Eq+ zpf9Si`;p-EgdBAf+?c!z=VxGismdw~74ei?F)=kITtJw=xYW~fN8n}@6=rht{sN_) z2fn(JofQxV=JXDJPF26`jV;KUuhO4DPUld#q(D1#5;unYd&8)Z0lP%Q?ZnJgf&byxG0+fyh%M=bdJoU*HFa zMK>miQ3<26vkQq#qs%UTSnE|g5o)6P&S^n=MSZWKbm4<1^8ws(;^{+VP<7;eKfV<^;c$6AGSi7f9fj4gyk(q!=2NkI9`&H3TKL{v}r=}SP=P{ zqrTqQ2Bs9n^HPR4S3KU8qfo+QQh*`fQ=>cR9x7ciK&Qu;>3@Gv$?MuZH0k+x%Vmv( z4YoR&$q|0quTssQkA?naG}8^cnWL(A*}bM}a&`?vNI&F-TBFVW5PQYmf@Vr;d+d0!CcizM_Q1MKbS*P@uGx6_c{>B>KRk##kIiCs2(fziq5u1V3 z1U4Iu!Ltn}&!Zngyotq?o-PnJjFf~26px(e5PKLQdGepw*2Pip0yb~1n(Yq}$^vG1 zsH}i~s^tBi^zYi9ZjvcbZX3L8x7KBK({t~tulQ?+LegF5p4!G8-oHh%3cbl*!vYv) zPhP!~Q*G2)RIE)DjA?RgDd__??U^S23De`T_fHw8TnA@s{EabcRhcBqlFBsN@ez%tWqBzL4vcA2dd-G zX{@0?e4*67Va6Io80px3?C(NJ*afdJlW7}v!U(Yps27D{k%ZZPg7RcosZD>4@-L=R z5(ewL>W<&pOXsQa`qAEu`Nc8b*v;(?igqwHuN4&S?T`H-yqW;s*5u2o37g!B#pQ_G zsheB$*ZoyG0me{`eddGVKO8p}SxjxjTY(ipBZee?Zm5NuknFD@U7Meqo(QoE2NJn) z?D2eMmldyG%4;=*a>^YDX#c&%{7;xE?wha@jI6iah1eBFiQi!1TanW^i)v77n8Jx- zyeI9Htt-1M(@JMoqz4qa~v1bVgf=vP|4JDBYVCfORC5Y6ZBr$C}<$ITRYZQ+E{gFP_3Xz|`9lWKe2=Ygm1VCGuLWAOMGA*+@ zpxbVSefTw}G8l*$&Ae*{i4a^9dL;9qM^4UnkFW59v9X@911}%+qK7p67((7?_XUgA zJXWuli~fDLk`0$jyFWa~T4pNS$@;2OV4t&Ky(@_fOgn>*jQ59L&~SOYXI2nuHyABV_S(qoTt%+RT_+FnknJiLBT%~VdDH8&r8mTW(MXxY#;bMTB2J)m_LT^s z%`Ucy42>;j-L*3?T>JK}4!(t|3+X&V3;aT=E|{2;^3E>(`hXjJagLCqj~x)#2+Mn3 zbEj$^t!JvQ4`ZLXr+%hq01~uDS&X&U4HC=!>J9WJ9#+ox6zq!kV(aFb{xUjHPEn^C zy6^Ro-JoO!27HrW5X zU*%*NT9wB=Qgb&e7ksV-%nt3lagT;JipYb3H5pUb!i^Qy1x~8M>sM7v#osndOsqO& zBakfzWOK~6EX)RB!({d3Xx4Rk#9*+kzqHinj+J4akmI@A+$HG^dJD{`XL|{qzzxIzDzB(TLh3S8BSjG^^ql}-l znEl+`;c|^b@r=afx^#!Tu~q%ux0>W}Sa|iE+=BZ)j*8M&^%JuZC|=+`^7^$o+nRS) z<}E+kYJrrMb?;JT0XNH?_0iNHV4(|j6nIk@e+l}nVa;tKGKntij5p5CG!c`Q3cnii zAG;2Z3IBZ9HX(66%BqhU*)z_q;8#eq#bC|0#BuLDG+X)jVbs`qW5^5A#K_uK1lo zDZ}YS6EWnHb5MV|zlZB1dL?jI&WH!Udan)OSBv{@kw+FOeqZQ2*6PRXbL z!eCzb#4~Tfg<=};Q>f-``8<8xI(OME76=$#q5F8q)7J10m1qd+uHs=69elgoPagaI zBva2gJ3;BXdchkeny~pU`NOmBZ*eoU$=YM)ScNWNU&r~iXfu5}LM3~ZTf-KOrNGto zt&8CX14s7$4b#|csUmcDl;Dkqcea<%G#&CxTJj$!*O@&4cIZW$cEVJE@b zcaN5ehQT@Z)%~sMwzh4v*oy&>X1v{N`sH|2NU2{;rUy3)oqY1luYp-p^Y>x{*apvBR0yYiRN|jm;UwJ54(k1Q~ODl}JIC)nUJD1LG0@j(|?pxBR<2$me z6-IA)J^MRma1PY-0SYK+KRPvzs9e`*+!6lDwfG-M2Pfy9Z2?&U&icpDw8!TZpD0ku zZq%#h>|n}-e1EF5dSigq=I*|YNS)78Pby>nxvVezkBW6$8=2b&1OuNBVMApzm0i%t zO(5rN!nb%-_~eE=SBV?IzwW$G`#Hff{`lt?KYz!(eZ1ue*&$H#!@B$1HhRB{gTZVR zWL~~q%(xM0+90>A*%_19^oYQymZ4!e;KndpoqAfjz;U=!qZ>Q@nvHDI*gor`p#7m= z{28Wq62Kv;zNc-z!bjj+KOQuJtgm}Jy!Q8{Bqhs_Ny84!zL~BL-&n{}B{Uhv&;n~7 z@@%Z7qtwvDgM_n}eliWp)`k4uD)Fl!+fQn@)0dxltAFKedpg;$#{D`gAzq~;H*)(% z%I>HHv8-0#5KI{zI;Kj+1KxsEZbm(?X6GKU?A727n=|DcXG|?gp#oB z2FD70A1pvNHCh^as%qpVBW2I#YieU9SBx@O3lkD`Huc<`_thVcS!k~*U;CjmvyS}J zp_Z^V^w@(8l~P}o-vG4MmVNUH7`vEag;qcsM(3R0(^hCpF&)6X5k-zYa3lfla56!9 zGC*oF541vOisD3IjtTroE%%p=+O?%?MM9VUoPI>YJe-rYu(h^ zhPASuU2o&=G-*BpV@UMqoeR|$a?CL3NnM8>+N5HlD8yIY*=EOArP%dFo_L>`p^x2L z!?lR%xyG@#l856bt;Q?PWvSinF}U(zP&Ls6l(*?`+VSB^U5O22?*>K7Ix{<0E__OZ zzOzsv^fWNy4}yJN41Z9QJgi;D0D1-L7*6AT-Fn$MZh<5!l7*Jt9`x*7hRvb$yZYIr z&n*PGS0(mq3t#}bxhc^>V?dV{=8)8+&-`Fw_KeUMW8mW0ryKC%nXwzIM@@;)oNeR2 zZcVeLtnz%ibukHdvSQ@T^v&%f9bOT1VjtR?N-vKlZJK2O5v&|>k?fj{$Lg`Zo(i6Y zpi#?Z85^39ns5D~>GcJ2K;cra(WKSl*$ws4_tXLl-CT<5S*!@H0=?dfAm@!+H`;}8 zZaXE8W?%rj99z&3-i*+-?^b=-B{wm<8ToQ8R@xX496Md&B$j-`^BI+wlXaKV1#&F% z%Wo#Uh20bcQT_pb4CZT^M@V6l?9jQWw*)^HF1&AUKXU2PXcvaH(fuLBHc zV{DaKhhMIZ)9#kugw`VART}8O7M&eOTr^8TOKZ=!+^*Iz6SSt`u31-YN0q#+D{Rlo6$BUTdFM}roRtx| zT^&2~seFj0duBZ7hclq86fUs5Q1`Za_nLpsledwrk!7s(hI-&~q4>`X6$Pyo7dXE9 z*VuX-qG_!l%c2~myB_6s@^xeqT}pHDx2ZaJvOpuKKkQiUHuDT2A5;5ukP9*J&lT^k z+i6KzJ{|?<5-PoR3c5yRZ;7FG&>x+=zFr&{EEZ$IdiTt+Gc-wY#t1lq;Z&qU{+HfN z>U{+P+X3Ule8V}}_riy38_*PjGbdNTkvDSeXHl2WeO zA7$rjxiRBbwoiDa1$}}pegW~-0{~-+JYt6GcK30X`&??grnWB?!;O9|N7-{PuY3T~ zUm_O67Rv)zg{^K_|3OV?9ZOl*naEpH>DQ^IeZE*t+5+F3^C(f*qIGM}!n5(e`9ojK z1rvHAm?V|F9FtZ4M=pxv*T5F(}IpplgVUEo|cx_aG}cKN-ZG(sVi zq78wdG#9SA0fEL3h2#t=$MJ@`T!nq)AKkIHZr;pD+3t5O2jkycCLN4oqUq%2KB$kE zJa;Q&tLDayl`DL2oxG>*`&rQt2xzdZAGh7g32V9CYeYq(s)St^nBlD2;4%~PW|Xc~ z9*0AIy6ITjx;3EPq5ZimZtJy70~xmo z&`@Gv`HCDnk+7z#RV@Y#`3j_IKbH%IQ3>%QZMhy%0_wi}^^F*2&iac_FdU^P37KN{ z9Jkorv7(?idXDypr+DIEiQC%v5ZJu3N8N3lYlAv+i)}8OM{JnQ0$c4VG=H*>N_2O% zJW$HD6kXHzjK-S0mQqS}zbZJaKpsohTbj1P=}E+3CnV1KF}uSS7I+8C+OdOc5|-*Z zec&WSK3eKuW$m4|Cq5f4Bs)wF~=CMkPFP}Q`5cHd@YQPk63u=K3u?&lJ_ z>T4t1c;WSSsX(hca0&nZJ@pgk{U0&7!A*BqPet@YFZ!irHQB>L5V7GfwIz;2Y?vP@ zj|>D3;N)L~854`n**^tdhz|7sX$+?XGFD600WyDA&|cNbaANdZ(N10%%r<^hzAoOO zW1PbK__|s*lm*ZmGj%26KHQ6N$v#=^Vyg#`B(EyO#V3dA52jtCnNEd+-5dXdant`1 z_T}+Vul?U&gd)*`O4b&YwUDw6rPL|Wf~+ITzOUJ4EJtah6%nHpvW=ZEhBlQw%V01h z>llMEhFPC$oO3_F-+iC%=b8HByn4N6&iA^$*Y#Q6pZDkeSw(L8=hCtiB~0A=$N~zxz(?tv z#Zsa};!Z3H*?%{PF{nxb>VU;@)TIfbtyKellYJ36 zpurO0FW*LL#uKd#%h!Y#}Wd6GuM<+X~@L$4d8M^n2LJ4(sX}sO8 z5+9yv33&j`uVFHf8n zzPh_3H&b_TKFnBaobz&1Y3576lU<8R45e}xYDDzMk`2%&`qDK0T6@I&Ont%){o?aW z9dY209)KF7_@7Yy?nr;Phl2qt7t<|+urKDT@9%C32SgqQDc$FA1YBQlww)f0+{w%d9Ed`LTdzMK-YMfaxPZq(4JlH z+K;l+#y_^cnE1l^dH-Wq7ed5u=L1VkXjDV88R5!Y4dDwrTbAaCX2v2w>IP_M9g5|P zJNBF|lew6&n^B7QRSSs%%P-@BNF%xTSkqXC1CZhN|5WS0x`+EOgpxqZoj?VB%Q3Z~ z??P2Tk#x-D>Xozlw>(Y{@(Au29?AYl1@pRX``EGqJB=#Acv(l12gbz@ zhc?&q0(rh+Aj`(k)Ag*tk<5KK6H7koZlJ(PBH||c(D8`_2+bVl zZ%=?hewRDwaITMW{4kV-2ZwjH7JjA-=fWuM_hmO3O#u4x@uE5!uDCXTE{fU@100y; zRl~kZ|A^JZ%M~vlli2bYltd6ehsvaPNC{)WL}{$J*yb-!ZMnUTqojrio9S;~P6{PX zNbDVxm9g`xgO?weB+dQAefk*R=VaV2*NsL$G>hOMxB?Ac8}BI$$bwNMT|l0`<6?%*N_ako@fFwxCnT%1 z{AVQl?!n`nqz?K&Qtj|we{Fnyo*Z^TAzc5oiNB0ly?m;t+!fW7gwN z@1-NWN-6n(Zm8eyi4LhoFW-Gp^pNxQ>}E0`nkZF-Ek3a1+Z^tV6l5@mXG&%C8$jPv zj{ACo4j#-s&5~TzVeq*<5NL+5NC?JrOy+kyN1`0mkR)m(n&WZgX~h12CRyuq0L++6 z)S_VXR-rBst_%xj(RPMM=#Dx19vmX5Y!aH;@#&SJ|s4Q`j2EuMUZ-ljf{4 z-{raxov{OiDG@8XOFsI#(Y9kot9M zlGr+O!@Oi^`#;LCnF8GJ0TihU__?kaP~^xy#dvcrSnX3wA}2T)0JOn*40_S$uOUi@#(R6ZAFBEEF*&?1WL%{%*cQ_(Jv3LWZ9XOZ=vx*_xPdd z=n=C9XCsN1SG}-QOdVdNFR!W*WH0yUeVz4WZaKbrMeSIcCCBy`pjEBhg6K0scR@qc z&UO$K&Y95$a@`)?oHHR~v30oppj=zP1C5bMz9-86u@KNd{Gjlg&{8UVYMe?8Rkkujj>cGshgZ}7oZPhi1E_RVV+UQ* zYe~8NZZ^~VAV&)Kb+{F#_(!6S?oY-`f)Yk^cmU4cTHUq}{`L6COF(`HM5-yCWR2fSd71*=k|&6DB5BuyQDueW5y(|sZn9Dd0GDvPh1E{1 zge{Os@ZxC1_h;dH)?r^B1mMq2Ch86zr58+yUljq8ELHFpB{64AoR!lWFh)*{0*9)@#&yXgQVhpQs`in9OmvF&i8efR=Gj zgTO4Dt~FT{=c|I5+-`i~M;|1=VNeTTD>B!}Zzrl~1Lee0i;mQ-K10_EJN;So)Df%p zuIml3R-tDKAot2m?0QgN&cBkD+9j5J!DtjKv&8S;$2Ts5G{Dom6 zx{TyZA#krjg7eM5VQm902!*(&*lfj#~?#%W0A?U z=YjVOj;Ju~jz@$PVACrLp|=*&KSV1G{+4eA%A-d23VU{ z7(Qf;qNJ_n?>@I4JIhc(mz3lk8Mz~SX|AT!#k8=aj?_2!R3l<43*4|}7Ugu6$&)yb zu9ItAIej)^uQcq*TxdDVc1}A9*3bke6oP-vpLYZ%ix+E8>z!TtDrA?xX@Ooe z?92och`eBxEvm^3$JBY8AUF#Q2b%@CMmMq86o=y~efa(7?~$+#;m(-$d>|0lMfsH4 zj;zzeUu1k{`*0l8&(4;o9JKG!^uC7A0>@yACHlmx_tX|{i29!rYU-nhjpfcAHjd~n z2HokoE%!stdPOR%)`@m6R;2Ji&9dlGq*rBIrFXT8RpT1fHe3DX_h-v@=S~;psB17n zDQy!v=2&mvmPmCx*fmW7xSx6EwOvFKU>@s^5CYD>tk(Cms~SnxQaKAWb>9LuOC);* z&mcuAqZ`Xd61_Zd4nX9zThqIS4={MTZ)bz`!)ZV>C0%BEtpgHJPGcT># z`k$;cs|&i5z@^vAAS1gJW0IsHzv)-3rBBmrH~2x&V9(DdD1Ad;#%;h!Cn8r?7ZgRGcrZQ*SQlN#@~vZvb9r(MjvZkI=IRZ?Ar^C z0^g-Fh>py*ek0L$*@V%e+jJ_G-^C$a>Jo)>_OV;c9Tc%4|hi!6dY&H!CvqP}(B?-RcQ zT}v6f$%@zVB$x(~5ji%SI#QIg((?4B_2;K0sPGJli(Fk8Lgs_^!}j$xLt!{qHFqjg z(Uw!jkbl@5_cPI8po~h-cHI&Vz|}QvFxi$HI+%(Xf{6~?EXk4=0`q)XBnFt25uGgg z>2fQYU;|>XL_Q!Zjo?g_Gn5`Z`1txCtn)l;6Iw;*DIVT)0k<#|3m}%=!Qb|~H$fjO#Ny0C?>`0wfsi4tIS2wAPKjra#ft-uw!T36-{R{~Y>qAUKo))WPlKR&|Wm-UALLEEa0-i31aDjW-d zp&cN0DdMl--tM_rPL=CR0X6MBaIUcIK2osgy+24DA6k-7SBgufU*ESAeEe(DG;RXO z>0~XS_UZ0|7M@GhMsP^CrGOdPhzwM0c@cc|Kj}e1`+-)PTP`;_wE=O@`IIvzD=DoP zbjxs`3r}HycHU-a^jd@CA2l8p?-QGKD~A@3t2}d8>mOIUn6QYi0U>VR#TKC=?gUtS zWKO(Y?Ag_zY@jd!+TRw&Z%(g^6uCZO-~AWjOQAYYBlEzw zqcZ-+?x<}7APlvd046s`iNI} z9cx{Y0?^A)hputw3k1b>@lQriCR&B4po!Kmb({I{y*8*v^sQ z&jYU2l28eV8@ObU^|)c(`K~vVa$~se?}E^uvh=L5TrqPnBR~Kuw7ya??!P0a9?=}G z7e-08{T}?%U{1XyBNnP?IzGSNHX@Wm;Od9HKFxjTN5A9*cr*bsoDElC)Kk2l%mJ`f zJ0(aP8Z9i}0Ga=1yduZ-Vy4|2AWe7bLA!QsrOgS6L00zrxusYzRZr&7PN>A+xiFV9 zSy_v)(q#isrFeX~jvq1?i|(U=;|yc{tn`OF|NKud<72<0iaQ03|445lhg6+HJRUXuDp{AG&n*skhHSy? z=!M?Ea>lOHZ4pQPBk)ax$Qrw*wbPPZ4xr(aIIobGZHXxZ3~Ti?qQ#TKAE!h~pzBp) z?(zyn2Pwl(3a{)^ef;x3@ zpyk)Dt_lpN9x@PtR-J*M*{8yBBvNvtCy-WMXyo&6P_Om{hP0XU{NKW6D?A9BdoT;wQgyO+=)IFM zD7~v*Y;XuXbx!)WgGO{9BwZM{%%wO-wyhLNT($%+@-Q$m^BuckMLi*)}n22Stn?UasKq^9J<tFc;a0D@ch)dGrexnxLw457I zBQewqBrG<*@88-9l0PPu3=KTw&bqfz1dfJMncqhNBkez}1kS!AiFXEdu!oQtir{sK zv!8+hVu&&dO4#g+5zTjz4PZvffq%yax$LlYY!Du6%0`o%KOV+)4(BZ2dKPwR4A= zir?5;b%ZMbldHnlNZ63XhW`_IY~c$4cXb?>nn9!Q8seEDeb(l5Wy_nf5P zXaMkSfY4%Nd7SltS3@qwH;gAuU2dFlGd|tj1OuE zvjxE_nP57$Q{gq1nCiq2CSOMkOgF;MnX0McUuCfEP(x%@7-eB{(kBwK3T z;e>wJ)QhfIc5ml!pYa8+K{uhBeQ)VavJLFM1V3XKJ_M7trM=m!zdBsU5?Nr6rWT54 zIvtI#e=7u)OdS8y1he!9NxMV#AP$1orl=F!#Gd$I4Ro(TjiQrRj^9q0M$2LQ!6Sh^ zp>#6^q3Lk8iE!MASwcu8hn1g2!(+BVhUZVEJ!3c?HPydNP}8xX7wEflec^Yn>MI4s#!vfUHUqSA9!1H2n~C$$$zDh6Kz&y zwG7YDEC#E3*;uD|>{EEeQT9lU?lmYyx20DL&l0?whP#IL!~ps z!Co@iKE6YeCQ5&!iND3W>!QaYVL|AY;6-edI$tp5)%$i0hJ7b*v6CQ_y4L36D57Gc zv|U}k?fwQD>3c^9$+&h zlpROq<9Cdub0A23CxT>2MJXwf6bl)>J06|E7e9Z#gwkco&M=4qrhuAzeMaADUmNQQZT}WzUzr9*1)?X z!syLF)BRe4hIi|hHJhagE{pr`mRgZ|wp38XJ9U4#( zV7r{|9~I9YK#m`BWcL5*$odQ`Y#&_w?1j!FV){LhVU4bjKuZibKCrgs+&Q*oXL1!o zJcNUr?@&-kF3=f?y73Z=AY(()3g!xdV>%H*bBS=?ee?f$m!mlIZak1|1IXAfZ-AH{ zFX&np7GP<(El`#p9jjlRz9ucmz@Uat%+gFm#2!^vreVK)IY~hyIJRp0)wAn^_<5e4 zhoaZ)DjGLmNFP)~?|e;SoWx)eIA7U|RtGts-W>>V$=lPXs>P0jBynI+Ms!tq=xBT!Ds^Ya_TCmVA=yON z;7TFm1_Ryxr(bn~@6k8R-4as5SJQL}BjdIxgB`N2<>H5#YBbR0piS&oY?(ZFocbz-36$NCBQ0f9z451|<+2v$Nb@nAMcM1u*P5qFc%Y^Ht#;j= zKZbVx#zB}rkpm{|lb(lAxRxPP))tIvh@%l?=e|v9xTr&`tMT>y^)_aF0vnXFxNbq& zec-4^%*Be6vd>F1ubuEpC9L86$*~SOaw&!hK^|2}_KjwcA%$@M(WPTO>|592-dM$I zhOUo3-L1C0;Nxw6rHVDH>620qes)9&o^wamFCL(uPPit6(`sIs+6ax-CnQWvi=T?M zPnqjC;`*+?d;!-VDDXgkdx!P^*d+p~^L;{AK7gV%Yuqk@pyY+dF6iYa!{PdhYP)S- zqsxJeiFcJV{S9c+FBmk#gLZd zpbRxIPq2S+B~Gf=?y-TM=H@Y@lABKTQ;jK+W3vR{-(9{26$Dc`dWl3gHVNUZd#xA*=@kpc@4Xb5(ez z#K!N|;uOr5h0a9E@z zS@LEbXCZD447hFpL8yX@!8Axa))xgr`*-6%y{iXe;^HgNcVg{1nBx0DQlJXB+P!}{ z2kuP<4(@Mv=Oo09N`R|dDQM(@c6S~RxG^YvA^GJ zR_RSgbQ1UIorOI)lYJAjMlu6GW(GpJ?Fp$5p(dqB!KX8;NFQwqA&xa$%cf1?d_*MX z{s1w#?L+_L+*ii^{2hjX*R}!bB<=2^l)*T&{_#aeZ{VuP(HPH(3LJvk2>mm~tnp(TOHL z{pN1E?sbSTfo6W=3;4C}&87Y$_W`{xJpbJ>bdWuXC&zVmzh~f!5yq6HIJ2 zLq);qoo4f1E61HY&^H07pTERi^p^3b`mliKiGlF?6W2;?@KvAn=Ltw;1r)vY|F+9_w4&zp*KayeFST-*p%@j{{{TYTQcgELfOgn#ecT%GVR@FXB6K9aLA_tv=_$rk?|Mi&nJysQr<9bICaoY1cPx`Ms@8~vYGSMlr(ZEz6+UY)0sNYnrX|~yC*oN;NQk_6({3Wg1gYvO>nyl#U8D?<&3)%lX7A2UX zo@HQdYP1cotw20bWFl1eMA>|1P|FSZ2TB*C>alQ1k4LGFvPQ3W#fND{Ud3*)( z&cMp!$|j&U?_6FxELIv>!7vJeJ%OS@0w|}D)1tj{Bz}oqe140JCQi{^6zcS6pmc-w z7+?iyN=Mp$x0tNF!Fc)2Z;XsTF>95bpho-^S;*Wc-qvNbK;Rz2Z*%lCo4WP7ZK#lCsa((qJwpZOS7gI;8 zW#6)hjL??+{5*cc*U<<7m*}QbN-9S76B-E0co1mLe5_w!>dx zf8xp)gC?O_+FY0a+;VLNNFVh=$4w_AKL=~&SbrH?&$Rx>KY`rq**-uOkpm_q6(*^= z50Yz%x5YV}2jZ1{w_337Tv3d@usrSZkb$g zc+Uy!9U-q{zAM!P{W8mVEk&!-N}BpMH35H6$2k0CTzZFlEj(3X?wcPLeiJUca6=6_ z$Ug@{C?#;Ku-03wc&@#gXsxq>4cGGPB4O2V6md|?gVQvZ+eMF4^f>yQGRY65v6)MS zv^y=t)yPXQ5}dKJhEE)CzH$}hEKhtU^(JP?pntXq1XkF)38~L?3^1i;AT|&V7pEc8 zPO#Z?Y(HABqUq~g!Z{(qO6n6`Y zT9hAR9gV3FJi14fUyq5+&}E4`CCQqNy+y^I5%8dU64Hn?8k!nT#<=50JZQ=rL-wS@ zU{cL@et1eUf!vw{h-afhj4Ch&3)m=o$)Yw_+M2Ep06~r7UJD%jjEB#58d1VVqp{HQ zBHK#laGh(EZn7&y3M%nVN6?0A7bDJm${S>Dtdm1Q(Mtf~!RabE)mQndq42VEh~Old z>q!M;laxN&wqOvE{T64Ea}gF#Sa;gVs49Qw&X{{H(b)oenS{MX@q`eg8-u84d21sM zC4T40*cF>AH5WMTgzZljZ#f{|6If&*VkBUf(Z#oo9qzGCMSgWhat}*b-#F^&%Oaph*_B3%Ea7HaTS)UQxqU160>e|D3 zGuWYN-xGakT#)L#Z>E?xFaLM@^7@b%1Fp5K5gtvlC$Al3Y7@QLOviX>QT;d6$dIX$ zc)AO$6sg^nJY~wKIUL1ciuWno=XYcbzwbmm329>r>UZ4uD4N(6;_0NEvb6aU_qwi0x;)ut1?-Jl6tORbJFCuzVu^jfRs|!?AX|=T=w0oeL8_`z>v-Ve+gkoQ!syoer5m$SX+vcxg7r=H>p9 zCQi03+)+$H0>52p0_Q5Ilt(7OrlSs88K%OinCg+;%LcUu0Kg8;^cdEe3zl{|@;j`? z@SG-JmmR+>FkNelx%WQ;AcKM?zo=A{$ibh!AM1Tb39T1ndD}?r?G^8d?~cte@2+G^ zY-qMOFC?(6T+$jhBl(&`=Q<1x*BPtBq zXTAq-RiNwpa3R*lMPA6R`?RrM!-21h13<3*$}-(ME>^~@&0pCKdOLzdh(@t}(?9S- zt!bxAcDtPWZP4)R-02CMP5>+H96GPs)%cB1@Pmk5y=#oXEi0>B*4@hk8xK$SeDfVk z9)aE1$Vwaclq|g57#LZZ*>I~oQP|WJq^8NrUG(Cjhc?r@$z=Aky?kFoNkSoZbu(Y; zH$eS-qg-qcr03DZ;4mGp)T-{LICkRRhYxL%G+e(}^l$Zz9(%AW4V3?#WA6qH<-I#p zJ?_}^p);uJn0E!XpsAbNsQ2mOlu(4T}=y$#pruTsmZsd}vXvZ`GoSIwd_8 z(RAt{Z}e;SU6cC`j*whz08#RWlH7N6Z*RcNWh~yh`BkR=AwMHyEK8kx znG?1_jtwb|Cykdqif^C>h-96K;=0x;=7^v+L6XE=cu)K&&X#iRI4~EJ{PuSSJNn56 zD3xa}USJ1+$w7X}ZreN{3Q`pzB(*jwqVMJ&(z4Fl$tDP*I%kgT?I4{Q)A>T?6Lmv+ zdMt(Nr5f1ty|e8#7MV}b-k4QuL!os@Ba(b=*mq3v?3|kgh?1Bfb3Em~wu#Du2L7|^g0R%;n-0-kuV)MZX0;fJKNf{dl9|}{r;{cl zcVJ{9CmC&$KDa9N{?>cdG zjpiQP|;UOV04`+mV@;c3c)PBDmB73 z??J|nNNSRC{*-at?K-4Su@pAMQ-^G__n6wa-@oc}{{x-;0fun9HSSVSa9WF~=^-s} zK7g#E-p0yRz&NLEy&@JQS6eWuA>FqpEFioy2E75=pprVe$rGXX{tu#eHF-Raj_c0( zb|pVs;^1f7QCs^W!T_J>2B|C-iZdPlI+$2tFfi0GFApk#(M|wto+!aKtA099i;A_> zvPsk>ZyuEW5#XSuFuT}}I2qM59^-(0Rb55tD`F>xnvssh9Gb9Pu$ex7$$?Zq542P4 zYdf9abS(wi|2q6gtw$7$YXuZQ0RAGYX==u;Npuz`s+_>k2>A6itJ$7`I9oz2(7^MH z-19`Ru}7bBWMcjfKDlYqw!e_E4Ul6Dh|<*$6f08Y6%<@LfVV*P#Y;El#f-x<_L~)6 zAcEU}`Bu@Iw2o%~_V0C}YSoI%2Ux%00yd1&)A5nyUL)a2Dv+W-%^Du$ak!4=yC9d4 zL!)Q97{uwzuhmh01n8BVmM0b%?<4>!-i&=hR`H33XTW6b_LP)VAu+k)0(>w~Ur7%r>U5$zwjh>vkC-08& zP3(X9J4<-b9g5b6Hf-H`Bq@z2VR!1SyhB6VA7l+`oBxHH;>Xq$5S>*zjNUxJNLe8c)TU%l4#JdN4-gx`r-2N|fayO$;>G-6CTd!#97Y7dYeusl@9n<4>MIDjVX(-n zC5TV3&}R{2SZf0Y&1%G4I7`kIs- zZc3E|)n?J`gNAD9vs|!UkRm*6Vt66@zrEyLa=xN^r;LqTQKZ3m5vX$tH3&+YopnM& zKi=!t1}!o^1yc;xYE?JOZ?XK^1lb`y^k1;bUdi`wj|XE|i=pT|BPgV)sF?47sZi*U zZOQ1@?2k&V)IXyzTP>`bY6>2$+o~TsAxGclpbbzx<9il1LWS^A)Jn$PU%KPxVJ41T zXshj=1ZwH3DSgckwVyMdqRV?lAGEMptQEz#C$Lr)UEsQx5$yO!xI6ghEd((FCr02# zt#OmbbH=~<%C3ZR-j-f!zI()(DZ$1!>jn=0qUjXSpZC2!iIUY;1#RX@5mu$=tNl4gDdSat8} z7qO#Uj>88qzZ%RtEFS${Ic(2w$0ZHWgc++|f*~6)^VL)EZgfF+HOm`(r=QJALu-p( zI6sEfh8lO|M7nvEjN{lWn~oyeE03-w##>C**SS5$vVJ!5U^s<|{u$`4rK^LiW8DA2 zK~Qm}&?*SNCqI3dJwE)tJW&xzu**Z`kAKt`4jK-;+>&MFK3VgtmJMsr51$S+BW(%C z4n+)8v*U-7J}ZC!O-dJil^^<33W`lgxV9zJK{D7d8whn)5)_X-|D&!^qsYU6pxH>K z;~0XQJEv@~nnUBREE!$(o#|F)1{$oH`wUMkzCpjAz1D`e2+Ry!lA{&2DJi~PsoB>Tqv_?S$^-oiM*la2 z?9&dYar;l;7u%j7{sgc<(QviNo>(Wsfk0qI~rFt-o-8j^x7`4?%r)m z6gBg~O+_rLH}U#Y$>RVy<=>C9+wNmXyHcl>F+V(RW59g}AkG6i`P9dhv3!fMSbanQ zD#zCPMc;T?G9^bUPP}t&AiE>O!D^m=0g<$QV%R|QSpS+A{uupk!oZ>BP^u#L7qVXR zLH8;#Vn+-xSOU3SIE1xC9k`C|K#;7W=3gVagg8=C!9#WPI=t3L?*Go1$$_?}&2p!W zjfFOXx}^lPFhw;Iyqf&oYx5&;wjIsV!e2S`^=->EJYVLHog=`}$GkR5TwUz`3`j7) z=#1-BiId2H%bnv{$z)uMDHLsekunG(fc4h}SZC#~cZeNeA#2m!ip5!vYXn9ksypJN z;#5%vv_((KwuFA>A|{egG>t~pr|J&XbirT!*p83QtQIR>O&d=iMwKwmtzT&zF#9(eR_|`OC6NdJ9+7X+b-J~2=$^~9t5XN&4 zF!1o*yDLz`x3-%#7+**VfqjlJkmI_=NKj*7b)IB_fG>k?k6_<+G|Gk9>?AQ_3&yY7 zXE?y&%I{YKK>RP(8oP`IMYG$F=D-0^(ioL!B?0VMbV$5Zq72P15qWu591i9bk8q#alGxi53ah z`w^a@E?;aISJ)rvchVs)(IC*igyqtGp!gwhVHGE*0{^-%jTo$g)66m(0Rq+%_Vkap zZ%+^#8eDrA<4d7RGfkakzbzX-x(8?o>TMR&F#zS3?U+4S?X5)PNwg08Q8!8Xt`x_w z&h*(IKQorO`3pok$X5$H(nWqcwA?Ty>c&di<4zxU7yh*%p(iS{XYO3^%95(xbhTW< z-;3J=jjAwVxdjH;K-ZcNtFo=3!?3e}Y+>zC)X|n6#}8z9t8=bgd5U8gt*~EeSE59B zzhSw8Y9pf~-{PEjqrz(>iK6w_VKF}rHP$C_RBvAk50>tJeG=O(tF{yh4{Y8N#TLPQ zbhtBst3>qr&%P`MMg5@2*RY4b$6VfR=GM$w(c&foHyUWOZhU)?TToDmVk0a{#?M4yfDls*7s|&r(;QUbKAS@$>uC;Q zPW%6QNHGJ*kW3!3W-IxPVJAIFHf^rn-gf+)OJp@o>>1UBU)W`q;(4q&xphreGe;O7jZr;f*7^B}|i-aOj#PZrQ)UQQ|y*l^f*7BGP{ZI(zXDaKNxw??De(PWH{ z6#u0e3s%YsNh_Kas>CYdc;lDDH2kz!Eic-siDPrawv6jh7{d5%01>*psdTJZ`>=KU zv!x$Re$C$^B))z;)w<3yf*>ppM7P5gk2I!dVX;WBuE^kN$4QOi51bpkkIp>UD6!#2 zGKJ&g8}{a{isRerMo6eXYA51u-I=gmcvK$eE zDVij+NNv^*5kuDU4kQuN-~b|=M8zHxTk__iEx9YWc;Pr1ZOz8zIOiV-`|CpPmDmfZ zS!>AmM~3{DMj|H04z1JhfPDm@KW2tyUppOjU6_OFKLE#nb70p9+5N2beYK|1951V~ zx$31_k0*;tN~clY6KOAfO|w2VM6p+L;cB?4i)d$-{DIs8zx4nQ;16n0qxgnzQDUFo z%op_b&4yw@WP+Gtv*<%vMn-XZ_RW=!eLZf7SV8^p6zAqG8A%SqnH+@sBFHys$++YJ#O%$NUN?CcQ z$SG|MV#>T5wH&Hn?wWMs;s&iu!xmidT}9CO>Jlqgvgfy~ox^<4!J(6Y>QX=%Kh&$E zhVb;M;7RiAbJLj$648w=zm~(g`zXy!!*At1i(U2cp1AcU$Fu1n@|y&@ZOxhNOGZhu zldH~>A97jYr&^-AAC4uaOj1S3y-S&W>sZ**PC%Px1Ji4%?!+l(Hw>sUlawI2`Ee7f zQriX2kMnV=)qR}r&)r2Y9tttM9~GH}q7c|WUpZn6(tQso+&gn0J-`yF!>%WnpwtZB z?mSG+=~i3t!$iToXExMjT4Qv)77X=h<%kM(8?j>l7Kw13iU7CYB^qagq3D86K9Eg{ zntA*%oThC~(pk9FopEF@Dc;;&P5l_3doTQmnULDm)zuE^-J>IQ+GeWva_kcln|k~w z>L?$?7cOSZiX1%03BJ9O-a!yssd-1G;_qk;3p2RK*-(ZTT5fo1GfN;_i>=VI*9K}W z&~-tFDp-JW_9=?FFyH+Ac^aBfw7GVO&a_n>V<%M;Zpfx=oL%!Z?fmo<&k~4m=R}_J z<=r9nQSiY){PN%N%?vLjWIy#r|KPSG7@izyooQ-qFuT~*K_`zecAE7;VDOCRWWq0P zzsg4(;JE)u4+7=aePA9&u%pa+EHdCLyGwHATipm0ZR=AiytzB)1SeNN%LqSSP##;v ziI6bAwf&+-^b5tqCQ6Mx#4GugFoR0nYw~0y+gWI=8v&RNQ9=nq*&h`Z}h)I*73sY@5oPu6>R+iL}8oE7oX8Sz5`R?<#wS@dCXOkY# z%1bsQZruGP;L-0&0q?c|B|x==gs(fN+Z%x^<;`en4zFC+EL@kxnqQfJo?`dm>5;80xa;3u0Q_zV%$Gyk zo9LUM3Lkc$tG&UI$xNBaP>HJyy3Wfa@68eRvzUwcYO|?V-~TA?`0wUyE+z=T#vtSb zdegIpXDPpYvHaz44;8{}jwgfG0*yv$?tS2$Q>3)SsKVV(4&OK!N{WrIm~S3f`gNGp zjCGJHUZAB{zr&8aRv-cY#8bagP;ln!l&G%-Y9nUUe(_7wN zVr-{pzCEus96}N*;$*GEBFn2zoOu#8kL*2cLn(E?QZnHS@ORGCQ4RZf+8&tSm&)PN z_u~VTZB6YTWp|(VJFqP^bdEq`-?z^K)NihBzX2{m!Ih*v;D@a@ec`m;}=X#n*{EqkAH7I z@Cg`^%26B~_-twT5o3c=mCW(Exq+p>FeUR^DEeuECgxK1vVL8tNz{|qIog3adT$4P zo6-q@kGk|l9Lgf=VlEQEn5`PQx9Ik=IH9Ft45wB|%0B+xD&b;gVdd4;$U?%mG%fm& zr;fQ;;s&0Yj=I0^%bEb>x5rphCQ$)gEUeeY5YEr+@!%nY-E-5plekhgv-6s?=qwSW z!TnfxRsPtP!$o^`|Mtf0f<||rO$0$YT&?Z`p8}X6Y}x1<$r!B=kV)kk8910V-*t+D zalQkxlBbLc{SLPlg!ILTESM4G4~i4l-)>hF&@Y~*)q1AnFm8|JUX^9TBXJ@jJSCp= z>)agYIBD=3zi{i~(adquoi83I4lAw0WngFqg0-v?N{|kQCF_RHMhJ?O(a?ZUzJhR+ zJoW{&?|2k7xK4ccYkps3s|Cx@nZS$^3=Hsij5(-J(SFf~rvOvOZ|a55@Wu-t^=5Sl zgDlCv;@Yf8uEnupGo*fw>F&Q{J9aX>JE>=Jw2kkhz{?lo=Q<57$kf%i^FI$UwOgpI z4%YUj$W8zCpft)j-Uhp4(hJ5>xElWY%<7hb9zBl@YNHKSA_V(A)(%{}A?IAd`lvOE z;^jDkTOuFNWQvRl-LNXU9D}%dld42=YifYogQW$>5?NqVT9?}*J;T7PI#0RUJ|c51 zV8Ky?z>Q1b?Y>#CyEt9lY_M7CuRW0ik#q>>1$4Ug=^)v+ z{v7t+morFKGl&|=Glhu=MnUm-R42n=grVA!{5hC#nm9%*pSb&c#h>TDAQ-*eSlWHv zx_}s1FFq=8YL*#pL#){1*k;LdkE1B$nZ>w+ew782X=9(fj?{~R&WJ1^R>%C}=K*~< z$gsduSK{!pI^WlEApnz8B>E!#9yq|Nj%1Fb!+wm2XuHuRSN4O<8-f8Wki=N@oXEFW z+`#uD_HMdwUl4J2jw%60X06qq7y&nN6w|Q~(`6*gX?wc2(m-|2v+C4Hhw#c`<2?Ga zIOK>Xua```n#|wlQ==@Kv#@Yhal2Ovx^Y8m!CyBD7@3uDY3h^d67P3Wb?#z ztlDgtUGuB0do}er6#KLGYV|p%-ow=#8-5!<<^vyg5|C235Iyo@y2SjZs%D9-@7gQp z7*9va7mYKum;1N^O};D+;(687K*j(%+g(z}yi+#G1~pvkjx0iphSsmG@fitwwvxXG zXE;j!S(CXc?F*R8N#(l4Zg}Qa929Jdr1?Yz+ia-H?!^10>>KS7Vf2n>nnK}6$N z3@sSBW@v;n4)RHIH8RDYAGEgMrbYtp=FpZi9f{fR&Y?J+*EB{)E@-RKyz7Zw_Ht67 zd-D|~R(kW5VvjK3o~ZO#G6iiwdsSL?n%}JTQ$P>%qTLjzk8trX@KP9|C;fzy%LhAP znwAlqKn80#DKfIaAQX{wdAPZo95nW!X1?GS-yz)~M^0nFli!6VFE&CYg6tGVv@a;` zPWFVAm`aH}i@f2jXZG3vYtomwoN8HVU*)yPcw-sWuD5tkG5NFj&i}*LdxtfdMcczc znu3UmfQ{l5Q4p|DMv!L1hM)*Y4R(qYrI#cKgI&YB1VjiB zLcowj5|aFOaK`JsAM^QF9v{TK=RIeiz1LoAZ3{8Xu5j5TUEG$7wJ%J|LtjvKuNQ6Y zS^`RCP)2I;I>=NkK8$|4%$cl6t0^R5dY>|o)hDsm1)w=cg6yv;0^2#qpSw~aBWMhq zK_QdD&#2M_pjPT%}GZ^0M}+}Cj8TbyctZ0Z|OXe+Kx45_*2 zdFHJIjU}zSi6W0O-mw$7{zwTVkJ9C^(< z8$3iY^hPJ@bX-n#I*c$60}rDBg^eEQ&VmFM>k{3Po0iRam$`>tS6u-~w&LE6a7SUx zusBm8!*!6mC(pqYnlhfoYBD{{q_o5RY>dx=Cg(v-{_25p^71v63?~<4#FvA%vC=QS)G0&GtjYk~xihn^ z*fr`0H(;tEc8ERyb-#z1Y3SCz>GOlT!!FzP!Rid!!y1vJ6F(e6`Ee$*GEQRryl#5C z<3=t}k6H;oS?W`gkcAjC{LzN)$I;Lf1DSH?I2N)-?*LWIW!wk=;nR~E5u9q%oy=NAH8#CT~Pkx0~YZ5yNY0SZi=yU%buP9O0#F?Vdw%!V7VCLM>MYJ@vk0i#x{qcjU>+UBwc~vE7cpEvFy*6oaH8A*~JkH_^ja?~zY3uu+-EvHaVrv~DgUR$PV3BHHhUs<)WhSyECPxOMa7Eh-A+YcdLb#%2yAcW5WTMvDL7_tL z7e^I3WltsiJ!?esTRBGAQ5I1oJNJPZ$z#{nvYGgZQrDjH?2PrrPy2~Q@n%0FIz+xM zzRBc{)4_`#_mt^hu@-P+bqz-Owpo9g=+-MBTG$7clV8c#qfGLLdH^7AQa-J;U})b6 zPrFDpA_Eriv}%X>M;P)2nH9lRe4BOQAzDIz<7J%8p0-R!3?)_hA|G=xn!h*jc9!cV zu&RDgx0kO|A1}{)8lfPOL9(;EB#r2b)jVGnTzeS!yTMoPcv32D83Njq_Y#Y`>XY_Z zrC=1gw)$s`Fz%oxG&&U!%YQ=*l%{^%EB2Q{S2c zl%>p*u(8R!CHRPkH8K7)x|;LZYs-Qy4p&McR=Y}G9tJXsGFwq5`QyzLVH>SP1zoAv zH7#^#*tEs+-+c$AYaCyd#NB-aqduN=L4qb<=th@2F1z-R0YSf%F%gL>Ju+@ITSwTN z+4^C@&Yilg7$P=JB#}rqgF!h)Hpj)cruRGW4;c^sS<;g`G9{EzHpqHaRpm~j?0S)F ztI?)b7y8W1?Y4Rp=z~M%wqccZE`~k*T?M{uTrx*v9m3tZJZnD|vlWRIR-1No@-*ny0O4u=R*^Ydd|LF2<)IQ%%x%Kd6*v*MnKXq>3Y zhY3-`#nxf`_c$ zOAI|ADRVBE)n2~8-~}iH+B$hi7Kj8^Ymww7vRDFa&T8KKgPyvpUr7Iz-L_2Si!2LW z9wWnQ8c$}cU(NTD*>Gp3IU%xc=F9t2@s`~FJ`6F7ly#>PeI25Y4&nvY_ND^D|Dyl( zM>}nWg1mEYG`ISpjdvA0P%v$GxV#|JSn0HFLMge4em>C{N;+~~8Rw2(!2aApH8g!Hx0l~%5PD4i$hca+~<^R?CPkNJZ6pJVyBA>L|na5^X5xP%xo zeiqp**%1WFC>6hORx35VH~nJ}^NKi^Q0Ut5gcv{i_kt_86tU^VVrY6MYjg-Ie@zp+ z-#lSOi!#I&Wt^}s`g-BqGwwD)dVB6LclsA?zaV{am4r{|R%8CmS?;U_M>ryVS$L{6 zE8-O8spwp5I$R051Roe?&z!LJciLzV{dDZqYo=osl>y?6J`*QE=co7$L2akCgH`#^ zw>{7_1V7h)wt&HjZ>7brcN8=q?ckYVVycIgtf+a#UmgjCCWW&tfvTbE+O$s}uSH&b zA`slT(G$;|c_ABo3-+M0PL<3%$j@4cYNj!&zPFUG^&jQ-4LJ|*bd^QmT0p(XOj{Q>#d0;*ul1j&RV`+S@ey$fq#s>qF7eFV-(etK2A#a1n2u&+Hq{ zwAFk_H6Gf$H}X8TiG<>%FoS#a_}5CL#XM1IBoh}4pS-m)>;$>H8JM&qW)u$@W{0S` z-*d^6q~lXAk4%6>#`SJu92nHfma!^pV}_Hrg;R*Xs0rJSA=LWvb+GJPYj(_pcWw2d z9!;I7+k`{>ItH8{#0P?)Ot$c|9O8LF2NCNCljnR{uHTTpa4oW@rCtJueAM)KSsEh3 z*RYYru$Q7C(PK)yx$7sFx{`c;gnv&Et5`|D_{Mp0RZce8WTxGhPVKMS2M(4>*FP1e zni3{BA|6+^z z2M_KsDk!ic4qxE#oP}0aJ!uIV%%@MzZb{PEl?}&Yu791xR<9E!SNiXOinP=j-u{4Q z%Vv02dCRTZ7_Iv#WNf-X@PPKz5!tPEUst&l^>MZYgYhBC^1@{)@!C%{ML+AG_lFqb zg6ig_VHeMo481Zddk6XyrA6oAe;{K%eubtdpuu)F59El(x)9sym-#Rz`!^q{KRrG! z6t#utF%$?_qb~z4(9506BxsBRM+LTN9%}uKU<#dOax0*pUwCS-c-x1{g%}y?38Jei zhX3?fry;BbV=nyL($!SN2Nq4gW%f&MiIQozctxANhc8!S99zv9caOat?>BtV^1YYx z(w6um2GC@)UuWt<6S|MqtmGGtG`7uH=NyHcTW5W#tj(cyuqY*A^m`f~()%50gE420 zh&=}>hH2OULXu~p$18BeG*7k#pDa0$*58dITNjj;X5CrIW-V3UcX>I++Zmc*OYv(bGS_Uc~-BOxSqcs!wo|d=JY!eg6W&O ztYLX{S~e_Je}IS@k<~h~yhgx374N`B6}T19qD@hM0k>ZElS?dVY%$`Gvb$F4c{!hu z-rg)z+vfz2djdjGUIBqK{Pwc;1V?H4M9;A6WP#-(M+4vX@JP zySANku|Jo>4C{C0Tv+}eI1B6q)vojMEucC1m|%ouk1H~wKBSusXiiy?6l~hOp+hp` zZECFF#T7QnNSP~Z9DuC+H~>&AA-nc6wJB7lLc=;(aRi|Kf$;P^_X0hT;>x0`V|OcP zqzwHvGQ`Q7!CLBLNW5T%LGQB@lKgN!mBo(iVdf3vc)qheM;jU0lhK+u#LF&#QwEms zB3vbfAS`@D*@NMCy!7a0#)eyQMjoC!_bhK9P6YDTfeZl6=k-3Tr2v~_ zTlz@D{&-E?sgh=eVByv84QpVGxQIhRb%^=JYbil3HS`Pj{Ai0m#}C=N*~=!2AF+fp zYbbYs8;+zHqIZc+CrdA+vbqbAk;i9Kp#jI_yxwQ)q3j?w4BQrex%^R{!lhPKn+(>s z%ok|c(<}nf&t5oU=hM}Ei~0I^Tl!O>8`ul@ZD^Cke`$SoOt!w%m1yb=P5c*dxr@yN zU%8$arO_{jn2i1vmton<|13xmIGi63px_RtJ6G5ULhpfT(vz&uooJ#<;8`QimKM$& zh2BFk-S)y}@Bto0XFcc?WuP&6>N&7{;llcjqZAtL3Cl8gvVDdUQED=uli%G73`XJz z#VW(ri6gCW_HiY;@)L5f9q3a?0M#+eU(GypTiaq4zVMX&~7v?Dj`I20IJEF<5(<{n@LO3OzxUs;b#uzwb7n+tDWN?xWH?q$~ z1$sU;L&D}^nlc#NCqq{1`%8wBm$ZN5UbGU{5dae@k`0Jfss;{VGi=Yu3x1?l@V*jA z&6Zmo{DO$9j)oBb5%b7uj&HwU$ep6} zB2x{mY1o&4MQ!{Tvk;E7sR0pHA-f0yM)A`oOo7)-ICmyg+DULOrl}lD`>PWn(WZOA zTkKBQ%12UW*J)`;>rbz*ePHPLr>i^r0So;WZ;A9*}1mkaFJaA>QJ>|vni z@VF9Eb>FD&T^3jprI)*{)&E03E#nBY0e#lzl8o>U^1*vN+9_?}0BD3zFR4a}G0KO_ zfd`vXT29Qp6Niyi8bw0x+kA=9jY^qhk-SZN%0>Gi&!&OkCgU`^2LXaj1kSwGE_pNs z?J14`K@^s<%LZG1@dl0aWX!bE6-(LS!n;NoCURs&LH^xkQ7b1cZucbca(97Ja3X}) zYN1{KQ2O}t^yWI@?t008?*ceM(UORYMN*Z`e_2w(bJ!2LTz8I`AHKuIIu>ue-p^*_ z=|QKsw{I&Z4b_O4p04K%JliSy(0^=>e7N_noDzkE$kUZlhsc3v`oy;exiLDl3as~* zOOIq57Y(-A&Y5P~iIaq-w){uTh^hLY%wADL#8b?}YNZ5E!;NvAlL679#LjESWBfN24yeD~gw}NmyyR?%g;IkN* zlPZ3~foCyJX?~PUR#4zFdbHMjIad#ybTjK~t~f8#azFWCLhs9c4gFR6eB#&1W+lzr zBC%g({xQD-iBd$3^ANF}ba(#`fZt4^uv`jmlw8k}l99eXqhrl2KrSFfF(u zmqG-!c_D@s1GC~yUMSo;V=uFh2?Z0T*+ljWQ~I;fvhj%EiMu09sD7iVrC?$ayMrC% zkQx0rgLEo3T5^J;n39%f{$AfT0`1zUv--n+L`_aZB^F`Mr zq+NsW6!*-GJ(bB!@5PRxgLB>FRb8NxwUB)_QMdI8o>(ChH^F&8Dx~{hFoZ>jqlJH| zJygd`+w}1&6PY)BQiu=z40_*?8S}5Y8A@R8(Ru}EYwvf*VLR21?#yb$F)K$_(l zCRg@1oLW%v4$I&oULeXlGeV*`<&5hQ>RDN45oP(gnrsCtSx@;@%^#*riC(khOFJbU z$L=BkQAX$?{kI3@W|g5)+pTkVV2QzbBeWFniQz4PX*gKi21UP){|i~>#O_@<|JqVK zU+MTc6NEW!D9Ck&o9H}K`0Q{(PyDcv1QTP1Yms`YMd9`L3zF?!KpTV6WhIbcEe>c+|ZR!3&P>crQVjr9j<(rMF>DF+_O3}V@%Dw?whI!Yl3YL6fjcF zkd%OWm9HOzMfZb$H9dC>Gv|a)F$1WR(7jG?MMy1iHjT5CGY**feB*ncE((&dE}}*R;fd*cm0M5BXx*u$ zsq5B8_fvR$O&({pUQ`VkS?9&gOCf)JFfH*b*MWA1X5ZL6YtlvB8o$uJst#BF2#Q^! zC^{9MGH6%;0`If-MIW!$s3rylgeufzL6oDKXYbK*wNhV|Kx2x}$cv>f%c~%>wwQKktGIunX{&g~V+t zUdDtfd|3}tO|Fw@6l&9p2bn&Rm4`QrbzR25l+)WRd9*Z>!9qi%Z#xxvaWOYco1~kR z#S&fuY>hQI+e9kd&^j+HzJ1iS9&`f=Oux?7XkB1svD1sw0pQaHud}Zm`?$>WV%jg z)sdbNMgnS*n<4fqcTQvDO2pke0>{kV&OhC!ixD-@<|7+!A7woli-)Ga;rQiH?5}f_ zq>BQ=)g`y(B80PsTCJ*jx00VOlwH0%H*dX_7Wj0^pE(jLEAuc#&wch9CkwP>tl#J* z%Q8CWQYpWBWWF%Pj6It%y9ekK1TSw!(7xWXaFa`qP5Ic=ktHGTrNr0&kwLGJ`jJiQ*t_iV;IL+_vCaS^WUxB$no z@I%g9meZ03>LexUoTxw&H`&zit+7!OsW0&;L{{#E_6lg zz=Fz^FM0rFY>gE)K!^d^VJrQsW3NINdJK3<4p-dz#07Np-kuqy*XSVoqAO+AzSJA} z2f!v;R9kxNi_HS`|7$Z1Jmz03zCPU^30EQW699y03tc=RBdIgQ6;g*&ix7a{cRq2% za_7EHw?1-+_lYO{weV$s-G*7kTho2cDbQfZN};crW+i z9T5qe_kwyIC9t~1MsP}CT91IsYU4&`k{Jqh`l+X0ja~z5tvAplQ4Dnren7bJekGnJ zpVt^A{0uwB**{|zY7qjeNWg#DFvECTF4uY)dWLuvQE@J@VU*>pt52)7r*NJ*&k$my z+g_+xWlpv}gWJ@1%c@Yzf2fs!nz{*}^<$5ipKKZWRKKxHvL^XRZ6@BVhhz5Bn!E$5 z2@3x@toRR(SqT|ieZ2Pxf$T>-$b0ko4L8!qr`P3?Ym;6HXxh8Ch#tMJwz{BMUagRIVUZ-c#km*fYV1R_^>&rCB=d89obi)=jtop2!Y5tp>L`zF zb|`MmnUSGyOk>|iOLlJxvcP20GlwJnZ*)?t!@^A>D_mRVuVPPd#}BlM`gD@Y*qVEu zo6?-Oe>B3n0Dutl9NBNx4Xk?o!RT{^tLsoU|10Jk(18`#ZIpg=>Nw|82})-ouhe%@ zw+tt#1O;TL-hwmr&pEQ9&WM1EDZhsI?f9yV)WHSb2v(W<)~Nu++(KFFS4cY_c4`Pg zLZ-wx$n3{?pX|=es*qK-8mt005O1^J`+MuF38M!#^cS1T#&Q@AX4GGYRu`q};Kk(O z;(_59v(fQa#93G{{vbA|<~2XVs`vZ(n=>sIz3s=9K8nxp2!eN{G9qQHg-OdQ<_) z2mFoBqp>NI`HtMaE8+)*%jiQuGa)t5hpvx=fH?|W^4yp=nitz>rl@FNGwu2zXL^nH zBhk&psD0oAk24(AskJXDbI7H3t%D=iv-p}V?O;Ue-GU?-1LRO`vSg} zmtFNml+!oM7PW95m<+OOtfRq_`s?k}%^{Uu9OVhh=AU2#k*A1!dAXJ_b$cIb8G~Cr zvet(fBOT)^KR9id(lx4T*yl;JvTy4==2|U$C^T$2&+?>G z!|#iu5K*B}Vn)j`(S8;kzbB1?LM@*J2azKTkd9@KY0i+)TQ9`95m80QdTIJ96N|L` z24uw$BJRW3Io6V4K%T1$Z)I_BU7I18VRcD0EBwSD9q}?jh3zN9Z+73(NWmt?(uBwe zZ9d0?Mw#UN1jm1O9GMtO?Pt7o=j<#oAqRayd!kS+b)i<&+hv!eSH2#)yJ5PIfq$Of zX=`;S5tq54Z$^OE${8{{t+Y@n1jy9ilZ#}fR;&MVT5z##zpB@vtQs$hX=;+Re3`6s zEB7qB#FJ}1ULPr(bf;lRI@(Ciy)50m@`JumTgB{|SDs7$L9yUFmm!SE4yY=!8j=cjgINnql$#p^TesV+S z?KM5i{{H)z^wKli&ufb|iXMDP*$*s2m5~(|6~XuBvAHfhb~wedo<<3oyl+kKps9?IX-cR;Zy=6 z+qCrT4L3%&Z69T@;ZAF$U*^zlx`6*C1!-GzF76hWm%Ob<-nu|L7-9Z`mqX@1e|el4 z(RPPS9}O`fqsqrH=ktiE)$B_JHWo0@_5EoV>m(=Mjft_P7q>EbbmJ1Yb?f+Ydkw7fRkzmY^ z_mQI>YEmyh81B5BdU8zDJwS037P1F+%HPg|mRH-1P{(e#^*PK zGC069nHZ6@k359O|J+40N0_gK=F^zXl#s%ky@p-l^sbQ3edmM{y#7$)axIxbLVwD- zGXlu`EA}=0RNdw&0jFO{(Fp@3=R}}Bo`7nc`{kD*Kd4UU|NM`g2#DJa5K$WUHvDor zjkPQ?b=S_EMcd@A_ZM4I&)9l|O+<|yfA}{#v6D&+k?dVoPR>O)=adfHuf8FAW%#}ichkF$zU{zrHY}zu(Ovu(PgH$8i5OPzI0`r&FH&gXC zYe^b=qJFu{)d!9!EBqZt;X_GelFMl+i8jA||E4riTO<)*3Z^JXM9tHK;ixJ1YRO5W z(?)7DDYCu2LZ+*A1;T#fB9SMI&MFWoxN;DPrfgz7`n_637<4l4);y_gtnGjFa_Lv*-8SEsX zINkOAmvQprMrJtng@4y}KFis(4-#+k_J(_%yyd5S1jKbs$tz0Kp0KJs?%~rOd->HD zdF`|=Y>gyG_>~CgZ||g#_wiHYZT=`I1%)E#Pv>|odk=!Q*Jmg6>xBhU5{UI8%ho$0 zE)kyksX>=yepG0kC~r8xoW!*`x%N-IS4X%4#c7db{FZ zV#O*E^)q$k*%T3E4Mnk};6Y)bYmd&EdM|$3$*~^F2SB?7{Tv3C6fp9-t+}6wY{Sj8 z!eoq9hZ(cPDkq=<)L5fCs3XnuX64iKj>|uCy;fj%R1vh3m;ucCN?M^T$uI0Yw$RMW zdx)^?hE~OihA?z|5huWEYjV~OpA;Ig_=E9e3)RhcDc8hl@)plfZA(xhelnzSFNGXo4B z+`ch1C0fF(_-qeJVHQRI(&MuFS(6FA$g{jrd9l2TrbGVq&SunkEP<+>Byz+rNF4Hs z`6y7FG#YpUBue%FfwAE(Yz1y4t)RN8L2b24nJ~W@bJnFQsrZa#Bj>8zr$S``xN_fG zrsBd`*Iwo)&ok+1hB}y$bp748b^m$*{`TF7dLA&Iw=rJ&WomG3l+xUdqqS1Wh0atX z>+Clr%I=;KuI;*gHNELN_GSh9B>5+Q`}d0+I0Ib?F43igV}>1+6|!cj^6x^BW112` zB;oC}V$2xf8HKnyr3zYrHRDALLiBR;o3*e@%Q4_Jz#HyP{Xb6y8~L+|ZhD(t1M3Uh zpIJV32$Lb;Haxp9;F#f)e-&P3RvJNu2Z79!#RunVnJ zHg7XxAKaC>%<+TT`Zny^-yw5c9Yp36d+Cc#r@dCaIDjpq{JEr7YQVt2%cvjM7XLpn z3lfem&nUyLYUkzQ{GEcJL$+4-=28QLR2(2A0#?AQOvszzrg+a(W(Qx>3WYuoA+ z7=`s)cZR2!n)GpJht~Qu+vd8~Gf#8s>2-#@U4DoEr+o`oF<5`xW%EwEl`0+0ujY{b z`J>&%LuuHGLci)>Mv&`~ffFS)Mc35IcqWY;PB^ENL+?@a#iP9ov%m)BvRv?<+rKPS z=|MXRIu!E$#o6G4muzNvXM5~tc=XX~oX^9idKF_p8Fip}H_J`yaf{$cX;t@B9OGxC ztYz~qp3LR{_3z$=t@axX4%I3(B?Nm{2--6@TAkwt7ElwMdT2nxf$22tFi!O(mu!ZW zcNitNWXy)1Nk6Ul*Q#=2UuH~aGt%HsXEQB_4{c7_Fd`sm?#Jd4ZRe=VOA%8MDDNzX zeCA~)Y2A4%Df!k`s-bT?CusC85G5FBb^@=Ce61rmGB|w%Yqid==s7L4Ec8;z0I4>H z8Jv1;_1=XO%>mehb|=rt?*;FWj|poR^KgH|(}$w`Z#2;goF9rkcMMw@o)fdAIu^xP zQz%x2mKLOlRqi<76}xe6*^huSZ^~99P#HNFMdT3bU*Gt|wI;b<5E7tP1_^bjS3y>> zuWQAkVsJSN^zw#!rY1s_PBHUP|GOLs3O^@CN5}uVo8|)v^lr~LFY8V33}3(Pmr21@ z6UwoU%Wi#0Cja!FlIS@`Q!#_uMZ_@J$g(XxtPd@jqI~+lM(S*UmV@N}RcVm02-Z*H zGIr$}VdK@1{6mNRFd7BDhiMEuA3d88*0?)O$avU6*-5nQ6aRZ#ceLrh*GCkvzbXnj z4X)bdJCTgOHHDO!2Q(K+BrwvUsc)iNmis9(-*sJK%Y@brS57%hR~qOiC%I{+_bYFK z1D($3JNUmgwCI8T=Rh}@s!B%>Yi#V{9qf@2>f>`Yed77NS7g5qYPqkE>A-jw&v=B8 zZ_1f^HAwIiq6;X7>=zid>!BwWex=L7aTUp%0ufPC*9E6an-~{L zth_NAbjiVR)G;%;KglnD?@FjKxY%+z?YLE@i3Q@vYXHNRuJmSyL1On~vt+eG|2d{% z#bnZa>4gX&x6xA8T7@u2+4F!Mp6YZq>}e(yY7IZR^YkCph~5 zCwM_84H4;oq^k~7P<}&!jt*?+X+q8s!5Px+e=PDaa2goLVFOV}Cdm_Y7AA~d|#q@JN7wFyta*MuoY){Q@TPJbXzA>Syr2l-= zQhWcP=Lh+jdDt@E;Z=Q9V(XoLE40(3s|4m@fw1 zP~Kej?6>p=J$_b}JHMYBZUtn6H{-e$O|)Y{1!@HjwiP27B8l4v7cpRMCneARSjX=l z%)#^spsCq#fq6yrjNivgtS4Vh-6}za|;?f!sv9S zQ$kwb!hqh$yxfvUS`JrnIv`h|@$^+>Bv1W0@A~+2H~`>$mq?51X zv-GCn^RfG0jU37%U2Hjm_~KaG&L;(01AVLzl%NpzxSzrw{RWVnQ|*7Gm#0MvuV4V> zMo6kAKw_L)c9PFKpBmphp8Pl3rl*~Yd!EkS0WMbtHe3NuKQ$q*OZe0FTMVA{nu{Bg zH0%!v#SU#;d@y~T!AHMSied-=A3f|8CU4~E8hDsqlh?K18jC`1*^KARy7jyDGH&<` zMk9c`Jy-6tE@+m{|Bg!glK9UA>y;e-ItD5h$lRB! z`&P5jxn*q^vc0ObovWfVQsh_Z*IJz-@rIlm`Db{X=ARRxB(4Ar!%`ggSx zr_$B_0#*v8w=^#?gfr<+lEzTB^p@QTcYDEG^MChvjyU3|m*=9*uOy`&Xi$*oNz)PH{2PugGQ{fk4%rD|_zGYIY&TL)YeX3r(59?|ra?E?D(T)qm{tZGd9R z92PZp$WuJ$^F~}Uwtu`l>JT$zDkIVF z^>s+8yCh>oV-tFxSjuY)p`j-;r`qcgZBVCl`N!h^gOp7J*oL-gp{>LV?|b3hN;dVO zUR{;4qT(HTnIb-;qjTP@Yw^Y&R2vB7@mg0aqSfi>Jxt!LvR|Bmnjs|;k~C)jLNjyB z5$3nyA)~a*jK7yx?X&)K-{8x6n2#6p0!=4-^b2Cyo({bQ7@@!QS8k&WPF=F?6cp09 znh*NwK)3sTi>Y4(SVktXEjI*}*6-+jj(U_xb+rBFL-D&#oAYBhgvo>Hw)iEJoRZn0 zX>c`U$M}8x6q$P5M>sjuX=?ojPwD2+Qz(q^nU-)asY$dQP$z;%e=PAoA4CQdlyJjX zp;@(IAHPm{-OTL0U+FB7Ce$UooKoWXX)?(`&m&C3YJ2Y!8wk9DxGW|(o{29m5n%BK z3{vcMi-lUG@FKUtC7k6=2C03rbfbc2kSa8>q`<=JljvMj&yg(o%g(+T0nbwLrx-9@ z+?^*M_ac2u{F@G)z)h3Q~y+!5Rbf` znhr5=QcdllyG;8Wt60EP)2{E8`dvl+tS~J`N+MQnWpRf9<{LN(Af=_H!&si?@p;VX zr&ICN1TpaXgGa3JTFMvc{k@bkx(+=s$Q7wZ*f`EVMwcc!o|G+5zWVMdVgaD6B-cCW!>l>%2dwMTT_O(j*Y&h?{@Uz^I&$bg2)c>-NJYl^~ri`qsvq{T~!J?fq(ZU21f9R{!KN!bWA ziGvEPUUJ~8Qm2}?)1-Jfry)XVuiV~_8Ply*HbqxZeP(Ezj_WHvjd%~%iLSeW|G4gM zLbf$=g$o7s7|ZpQp8w47ThT7(!HlLb{Do#nq@I?VyYX{!HCZ8()jLMHBE zNHAXkO$nGk`pd{cK)?%I!@fE++ytqM%JN+oj&@2(Wap`67buV1IJ>qbvOfrN@NG78 zUC}WWAU2X*#b(_29`WA!0reAG^HyRk-(?JIbDnvgZb%KXcE&X6eEDz)VQw(l@aTDW z{v2Bc&2w-{E0<^Up7vH~2bsN#pfGljV&&GhQ4M_lx=`{HnKDZBtKq9m4edL{V0!M% zKHA7erCP+42p&tN6Z)RBE}`Rh#|jIXUQB2vFEvGS`*f2ot0`@(UWoJnIJJZrVif@x za-AJxbF-YrH*$+YGu^~pC}tmm&_{2LZE@FQauU=_3xy+&Jus4uuh(a0g={&Xb57Q9m8y#eWFq(wWfQliu`VYb?$GE;*v`NkddDt-2|({Uxx4b7P&8`8DIvb) z3WwS!m?v^zm^$)=eRvFF?YdX4x)*z%(vLa()4l)E@sf~7OtEFXyjhIHiGLdF8tOxv zH7#?@?!<3F!Yz}$a5A4W^+?T^6T8fOs~4&-_#q`@Gm-XQV%2B>#P+^9eFLvB>c`Bx z>;6T|MQGAb<2tvCY=!E;lK1s*GCg?lW<%dC!ONqXC_?hH+41(xTGl;QhcQjYchQr5 z{=I`*JM@7;%T5>sA>_b-=G-A~07FC16aH~!dneKs{PCy7qIkltSI7-uPgH{)}(XL|*VdG7Y*h$-Lr7FLqvN{a-5$%iZw05z0F6_x+wLUwXDX8M}SQlWTRLzwP zW;Xv++eSX8Il(DKxa{Wj+W*MveqV|xBI-UAZ-eH-t1*?;Cg+d50EZXrr!Y*a5G_$F zhmKxy)GJ5Ol4S*0Dc8!dABZhs(ui-`AJxBuYppO1fPq>4WiB*4wd@r(iKlgcb|@vE zLj#iyQR+rS;s$iIy!b9HS|?BSIqPZ%sqbZ4&uOCp(&6+M;_Z3$hoxUBzN8ziT+hxD zE38BRugLZ;01?HhqG5E}cx67f?7s=eHlt-{L@Dju%r&{T@bJoQ6WkUmbP3oK-JsV! z%;V6oYS54*=uSlX_9g#qzT>stf9(I`s}MC&Qh>S?8zITX87C|dUlS50u6*&NTR*cZ zz=p`l8gBgtw14zge|7%IR}pK)1t*jF&yJsw0xrkt-@NdsZz=B7H$k+co7(L2VQPvO zOr}+OKJ(70Al+WybIH}MoaRF!edyaU78q58=V9d|`ZLCkJQ~#;_+K$CY8Svh@!}i( zsW!GHygh1bE^t?zl4aaNr5DT!-sO}!nbAm=S}>mETvyS!LyB;C2SfL4Udk)sj)nj? zP7$b{P#4b}ufOzq*ZYOf`*C0_3VgF3wj(@Y+s{Ne(Tc2-Zyru1VJkNlKm{hZXlhw? zy58o#aLmjxoY{#&{^Q*ZjzDXTm3i|K1~rP_c+?Ek0c_``kA=)kvanu%xXN@fVzDw} zpd6Xc(bs#|Mr(c9Pv^P9j^7&2`xGPPX`0@vR<_)lH^iB|tnxFF6)Ju+7`a~c`#67> z6*yed7jZzC{JF}E+D~juW6_3>F>Jkf{L486>U}RF=ix{12x4Fk9phENPM6#u?gZ4^ zX5_Ztw6C1_k4`@f1lxpA*A`C{Q9DW2f4n$O?Pzv!$OV@ycSkC%LFWwb&vjGzg67+6 z2Bjh?A?dDN$94F>;)D**kxrtDX2vBJs3h~@cT61d0as%*#(saWRwe?xJ5VlL3}qEJ za^ZGQ&Hm5;%nrrY2O2%;Zb^yAsGV^VsN+7zp@IF!IO_4#K7L6Whknbx=v&^ol%^Yh z|F75%*4a5PqUxk1T?7^fnuon4MmU{{cGY)fYQ zU&N^Y@%r0;WapcqR+U^N8WvN`o^__SNvm$MTOLIa>aJ@??kv#fS8lZ~^XooNyEOC` z;@TvRE;csYsurwxx|d&5En=#){qw}rix7{M#y{0Tg~KP2ym@Z=kNbFGY;R({G%wV4 z(mK5Ta`5=mVf1Ndd&m=*DXuN^E32Y#B!e}_O-t#`=IqrvJNL>ftU>}tCjWG*VaoA9 zZ^&NlxujqBcTtk)h^PUJLn^_E`6n-ZBv4LLL^pFIB&zgkKmr zk6Hz6ScattIwdow&n5k>iKu}@ysz?-;+A2n0%EzG3|qq4`1;`Ca*+f(Z>vZ&hw14c zZu}m;Kx2)CE^4_q&;A5(hCcY!o@rTBl%F?T@Vw>HsMd~Rn5v{Xsucu&J!*_;MxSqw zZV3IReMPx%DuKZ=`3c&9?c4y?rV-6)DNQ#OKQ+Ze#eu_?kdUxEC1@R@O9S)rnGzOw zwq|k2d9T)2+c6m(!@7Z~}#pgw^L_&)weCUz5YDr=ZNzxQK|5z_vI2Vx?7W0KKg zbLRB$8lz?ateQE6b&rp8ilI5_&OHpI6js=jdl3sgmC?!Q0Jg$U<)QgbNyIyivfu4S zlY?D}>l|uRP-$C2g4S1k{Qzp&E^0Yg%>z{>nP22=$VW9K7Lnw+b7Xu<`uha^{wEiH z`RPRh=nUam&<^=0zf1K<)fip&!$gH+(k1AiyCZ41r5^$ zx!Y^c4vqlw#6#7`t@8bK<^N}Bs;FErFILwn@+$*$bN@5W8GQbby=pVut~(iYQ? zD^bC@J2CsTJcP62PHL&f%3S8_OCAdOrQX?<jO}n z34%w%Ju-UJoy0f)QD|(3hTz(Fx1pwnlp+AFvh9~Nv7AAD@eF-4l4}ywbtR@7NY2*< zcXkdgT8%C}(q>#xnpdPXrcql-sJFWdNXvGhn~K5E>>t6U+l$R;G{scKQNxZk@Z%ap zBudlfSUG=9dvFy<{}h;Q)kZYb`x776LQ~V-E_v_AzZ8A2;llK&;8rR$Q`&jwoCLc4 zpR0uT;H-iJFa?9s8|Uw{V(6~ZS-a)(1NQT~7LYv`Ha+^#PBJKpDZc>0kx z{>**2a%pI{IT4}DB)t60LxU7>v;qnr@ys7@hE=`8|K-0dHlbI-4|9 zU$1bxyK9r#_9j6ZT+n}2VMp+cfXja;dV~13lLUP>%+x>zUoEN7eJ|0AAb9b+)6}cV z{>M$yzo=?0-0*t`h|}yN&Ov`DtY=S9DdjGY#j=~}@kYxH)6}CZ)jGnes;U6DD7?Z4 z8CwxAD8<^=Trrq0{4(DQ`oV-pj`?|@jnV?(%aHEi7U70(K z&q%uH_0_?~9;s`MJ)G-r;7do}r0lK;1eB2D+U3yO?B~8GlRg_Wo5Cn`{jrTinU4A) z7%~UO1x!{!dS&>BcFc;`011_bN~KehSMnjlmdj|Y>q@asRNZ6)XKZ{WNx z^XCj6ArANXI*ws}S$OOhC_Yr+;O2j$>MnrF=2Ge{k&!)%j`8;EHcs1f~poNM7_4SQf88n8d=|_9-2keTu z57+qISvqAL)vWdos!mj7Lolp(T9pw>cp>|(g2dD}`<>_haccf2#zDcg+TaL-^78lb zu=jnKws7Mo1>U%N=x3xiCkPnH+_X(w!w-eFqT=PZOZluy{-~|0Fe?&zeixkUp9zh+-rp|Or~^+ zOM%yfa8kK!%8bl@*W=O9o!z_y#Hla-E6Ri1&6~^KT}1jq+27&VK=cE^dJ*xtIioVhTNrba_SSckQDBH>|Tc;vPgrO z1p`lXHgyn@mv69#>dW6M=&`>9H&P?6{**C@X6IR9{g4WaS2c%?Oc$gGGxx-hvDaZ0 zttmmO@f@PFs3XjD`NF%A()8EwPO1tg!zVBtrt>#HhOm&gp*BCiJrYduD~65Rf1~WW zJ7DsFXqm&)!YBKBeo_3x+mn`yg`*z=p6!{y#WJbQqFdm{)XoLl8xt#uK z35_}SsYcR4?I&dU0Dj1U2#ic_C++nOr^&3WjE0qKa9J#W8PHO#p7@3wSpf6G)g^O4YqG4ebGUXo6E+TOql&}x0-1@`4+w0O!doz+C zw1O?u$DZnZwc-&9tAAh_f*E zGeV^WS8hrS3)n@ylO5cEZQ4%pM%M$up^JuVnJtHVfHL%``~kX+_-i^wpXeOl=NE2u ztzz<85O`rKs7N_hv;`Vj{<6lTsu8I&hcj5OY?6kL$N7OjdVDGx+ z{N4B_j&Vo|=~I@n>0)(ImpcqrnII~=_?C>zL1T|+`^&WZxZwSlg$btaZrCGgQ(3^} z+WX4x?tD~y18m6swE-{_IK;Pz+5Y(rdwN>|*Q9WM1KA|{dV5=8J|Sx#z~1RTNvKnj zDcb@{8z#4oFmj^`U5?45$u)vTH5{Cxe_oeuh>ShbRu{g0`G17H2Ut^g8#aDGkqRm< z#HtLdEh+*kDhfhyqE(EFh_ZsrO5#RkDoU6Mh=346 zfRF?dlKh_ow(tA>zw&-u?Pc4mBlZ2YTyRec{xEhq+fAu8Se079Ry!eKCP#gcW-Q#?Df&S z+KSDKR1|g41F{P3N^B@Y{y;4b@KQb@@&cC6kAF#Za7mlhM@h$5FG)=}n5XYg{NQiy zr~XqGKna2EDlg|2PrHkX$q*5_$MkKjtV*O|!%zyTtu1i#Q4cw9g5`bWeZS(`&tLvu z7t3uHGWz_SmA_ORR5LA$6g(n}qoJ+lCrrH0G~_^soDs0ck(9*PX=O)z6{(TLc%lT< z`v*1}_GOQO_xgU(U6N;?J=Vuc01;&PW`5v~uYB^#I}unCEe* zsO_YBRnIOPw`1*#D`xFloA&ReaUEs2TjFdT6v*;GG;U{`tx%SG><#}lh1=4lDj1rs znyB!GU1H<`RiYUI31~n-a-w~MvxW`{SRfYb;e3gjIBjVY0rnOrFyoE~5}M7UrY#y| z`BcpO^}KMrrJ`wv(lwOYOOWyDq(@#i`RPY5g{08>aG>scLd|YtSHVJwWX?8!W%1u6 zcdnVWN$Iwjj$d@HbknB)x>yT!p{VFD;a+@owOHkIS8Iu#*V!W9R33VGM9E)gAb#9O z3=Dk}S@3AAq-&8ax)k9w`q$DqL$U!zkZ*w`oy54rF@61YiVE5U`mpLS68`gG$R7LI z&eB()3UdjU!weQF^S@}1_QV8TL7)!=)wBR2h#aQwRz=nc`&R=1$&=>Q_K0UzW`v$} zRMo;DT<_>$S98pyGB^$6O|Lydd;nBl%E`tOQ$s0G(TZ$V+_3TXAYuDEt$`}DQH1;5 zpK+j4lrPy72->e=Jru@#+|ff6^`W{P#FZgWs9JK5NMt6`t6{n19b*=jI7Ww@^98p!+oxaSo;QN6f}VccVq(d46$Su&UR z_%lPGx>)>DK23Qe@rtr_V)Xw#Dfv(D71H*^YphG92@dm%4z-%v6Ti~{vU)CJtn||%I%V*88*?~yt}j)Y5n-7({EI+ zuKG(z*rJG(_e>+;Jn~rbH^~AsiKxO?I^=RCOH#2(O!sU%K#BPKHo>)milqLU0=j8n zgGk>#D{#}s*S?G#x>J3sktL<}!dbTNYDk_5>=!Hp6p;`im$TFXpw->!PW`YzFAhq? zZ9O-bL!Gb4YJ@OZsD2OdZ4a+-xi|%8YMC;!Qm|_tgu-hd^1Hay3L}eAUUFB9@_q(( zRA4IQwYpt(%to`}(KP6Fx{}O?d(Ao;Bn^3XSdEcq5(;|wQ5F)sIk(GK-35FhjEXRM zU*??iR!?_c1Z@5u6)&+N2>`0Wh)I=?aBh~hohJ)b)2scs{Jlv!6KuEXq>^9MrB}-|d)Y3qva9inav;~zcI1FWFM$I6>34hf)AaCt6!x3vY;7f zcqWVZ@f=xQC6Or|TGvgfMBdI|7ap8{mVvove<)_h&_ z(=!~3H}q^4*?*;B0))2}`?xJvxXKHDYvfP#v8n};n=q~web!JYVL5N;1fmUzM1aPn z6L$OES>*ZB5Ket(MRKQWxrkWg`6U!+0+{}8(0p-Vmh1ywPRU`fr4K|HV3vL)m1dqP(y~2MyE(9YJ@p1aT?eJZYK?gLncbf+y-H#Y zcbV{DB6~*7Tic+FUbcTi4O_R+PcZFwNcYqnW{Fp}!K~X&4dIs~f6P`y$6h3_p?L(l3}z07)*bNZom ze{e!iX~zyPLfVsveBO4+`ha^SS-v5uS*1R%Ph=I{)#A|XgTbm*Pk8uwC^zo&ax%F= zMyOS!v5AAbo>+u)D9jP%S!gUWv4E>;K`?zJKEqPidJu%wxp^lU zK-scca`Nd0ysN82k0F80rIxA4ft4O0M{kIlLF1c4g9&>T)7i=e&<8*BvAdR7SZKoFH7)SBcv@3t%zDsURCh{GRt&|J@X_ys0Q?~4T6j!7Kiaji9};ky&q=l zd#@MiGqpa2ly)z%y=RJgmt`;kElbH_W<;8cxTaqXoCPx!L&?rM5Zz8XON-KJNU48Z z_qZl|K~MG25x$XEnoLGMDGV@xLN`qlTI=m*BzBN>E60%ysGtZHc?PPLx0}J%u+i@c zSNPaa?{&;u^ZIdnQP*G{lNQ zltU%Ak!VbDRPqDQvl!eFscET4`{-q*$>)6jlx?3AUhU**tB^%V{YrJN@-JT_I>R## z)>~W?Z|n5)z&JnEG}-XhMV!1$nP*5pw4)IA%#{ZWyP9qTqdee)QJus(n}Bl|&`|9QG-SA+RN} z`Lwc^sZ^AJ!mIQnofv-Y%@o-kK#{BbxC%S_8Q?uFY129xn~c+5CV)7qj6lHB20rft zJrdTXD!lNVtm5WAXlC3^lZF{-3z1#`iY~^B;z5+8rAE!*X*PBeZ?{VgI+n)(KL6Oe z+9u~_rVZmtiSMga5vVgyfJ=*ODuv^CoMg7uob;RotdFBJU2S+*bH~``@6xL;VQCr9gQR3n^^L$(^kgW(1;ZMz{Od zUDcLl0c4%aE>L!5xHA2s79fZ0b43(8bzX4Abi=BYp9=;tD1{PXC1*GAKnMhld-SpX z{wxXUTILkf%upwX`~!oc&p>p=Xrrtp@U_ukP_0(5r}0=bTsLCNLLSodc8|c?JdglB z0Pwl0f?B8)udC-YSnZj8=6KOR9!tlgnk8GfDEqx{=~cqZheH104A^-HV$ID2rS)-s zroCU7*Wud$)UZ8?byGxco+l^NAFQ4#x%5fWnsRwd&6@qS(Gb;^xblSFnh}~YYoVu9^ZX}qsmMv? z$-J4UO5^0u%E?Kge=51q_%*sGn)w(=GREXs&exw;0o`9s8Mmb}F4r&3sc7xMrQRgj z;}dpiuWrxiMH~DD&<2I;lnA-qVe=8FyME^|lXa8+L9jh2EFn(|o*(Sru9#o# zy0nl%Vqcjkq7+}8r+vy8%h4TN-3n9=zinsV~egOqwUFeW)+O3d!+VNJ}fv;Lpi712f&swl1g-Of*pfIfU!>G7n_j(z%E z?k>c_x92@b{fXIKDh5a=2T;$P^>tlZ%9x zJ|nL9#U%_hf5t|v<2v=LcFuz+cq2h$WbN_Sdbt~cMZhb@n(ENr#0`QhdR z6p?SH227MKN5o^L_7A-pWm*adQ5qb<&mLD;wkW+g!R!Lb_;=7vC@qvpS@^gnPlm&z zvGX>aVxAksp^b6^P~$8_SrRUuDv(@Z1YOgmtjMyQDq2F15#Fqcgm&a{kS8aCXyTCh z`{B3ARU#Y4r>e2wcXMf8a@naFrNr@O@c+d#-nQ@)j)I)Vz!`kdl?6^Fi#<$3c|bN0 zrSf;~3Ufb-iJdDhAw%EI(j0xhjmx2v&X;;no9cBZ!1FB0uLMaS4|^d>_@G%`uV5U2 z`A-0;v=strj8}8Y))3mMeLji`RlEURQ7=zhlOkAmZti3_1dUFlI#4d_7P(#CdEnMz zpBS~ugvu7rIFFXnA}`c|NY0{&H8XqaW+n0a3sl^;Q-*=?UsN=Wqv{XleGvyeUEUf( zc)DGBpX|sDHwHD~f3Ky4BjI%rEx$zgyoI4ax&Wo4B*P1d>sLVV7<FK>@gW>V~zlH80);i%P3@DtY@E!9S zEKLI+$U+uX^@-%K@Sx6WsEdvStxT$2peGO$vpH-CvGRz87w&E=`5+4u;z8LEgS0n> zMURgb4p$o8F&GudwA41ag`KHwV0)G9=1|>jC-*@|1`EYLp=lLyLs&WK0EpXJx7reY8FIWP*5aKngo44qP*?HshAdw-FK5PD4Xi^`E?%A@8{(_ zJ_I-YT9`)^}x)b#@abJ>cl3BXst8B?=IXKJIABuxtiAitH#wUTW~P*0$R)gy!fW4-$`49*1;W#Nw>K8<}f9oeP&?H5F+1#UFs zFp=SM&0P9)=3yeSBaC8S^j**v$Pqx%T4oaPqeeH5ip>1J;K|7_ERj%9%s5-mE*bi5 zjDA}v^Q0t9guj7~wtydhUKUDiz0Z^ge_hZxC}<*c5BEV$hH-ca5EF6qgLE?Ey(9s_ z=RNEcXV1MoWDI@NiJ!lVFq21lt}EDu@qQ7kma-M&d1g%%J85Yx^8JePCYop#RoR>) z2yO$-t@pE1py&;7qhBVD*CVKmB{G0`D`D+*lXgdn7ww;6A|1{p$U0|cfJa1|L{4(| zv!D6V!7jOB#-y}66ePSMZxc?`9TP(?lU1a)v zXC>7qqx)=~&RF*)VMvi&veypwmW@LAKZ73X-A*WK7cR@N)KCdp3v?GIsu9|Rjdn!A zv&sUx-O)zr>i=~Y8{wlAPNHXP?~70GZA^IJ@3&36Pr{^Ms^QU}jlGO2H5vQsZixI| zR*>>34AG)T9(%KXjDG(Y4@lQk>2VNJ@-TUY=5SN*d#YIl%0lxZVXFRb(8wvXxzFh} zS@O9+NKnp8ArDtXeO+B{^7)j?s9)CMxS5ptXzV5xcyOpoLg`@3)B zc+_fD%irBj3Ik?x=O`q+Q)9fPr*lVzWQSzI1U>ILI_8jVHj(>rCsF?40Ihc0*eHrj zpY~nA2;65qcp)a4r=7`++`lHXLGn>?|3pIL1sz~wclj9kq*#V|yjfD#T9j8DA+xgT z7LmtF&R*K8bYI0UN3)d2JefoxOn@HD^9)qS>=0+5TdDtX7uyUjD}{D>pC-^SZup zX-ZaczrAlO6Nt_V-?kWvTYj@*>{PbBrwNIx+)-nV18Au~73ncW5Q)42D5T;~l8{URua)4z6Wu znw+D9UN1L3!_j9Rnfox z61Ses?!$KuV1BlxG=!!$G|PBLGeNP;(Kfzx5XT>C*#F8?Lmz_55BVm0X79ClJv!wE ztkgoBAxxcyjxIs(^v-@iEmj$%m-9QHoFpsMo!=SR$0jwW9=#L=?2P%X0NnPT{TbCT zI3WL^XSJNT4XXu0*w*WI{T={P`T5UdkGZogE4~5QV$r%{(xo@0o;O6$I`^-3PxslaS|(Kt1$G}dR|lE zem2$no)guRyXFDFl_X__l81*?BUCrp9s<$DXh7G3TtYyJ+;ma;?ueOtlGkk~ZK!w! z+CY+T7ezz$Ioyl2iq%Atd9`+rQ~f2hSd^p+prS$#cam;&2wOAoJA3JpJLb3gvMaS1epU6s6_(Qbpvzy7$Ij`}?*$92@O*F-j0hqX3KXz=|gx z<-R(}WHd0yeW-t6CNyYSWX)!<|f-kw0dCQG$HAAWpUzN4D1{oRB;Z(?j=KyZ%-30g?8G(hU#dxQp}Y5SMXYB!(b zMh8~UP#~NmGWs`U#N+F9Ja|n1hc z*yf+mP|@ojK&)kH=Yv?4du=RDTCa|*^UGn0dIaw;$Tdwj5}A%YrD6JL<*Dt{F&*CQ zb>g-U=R~or%{gO|zpf?Dn6k$7D|Ck##)epLNLx@E=i;B&|3X#}1CBq}8Ztp*Mhd=Q;;g0D$p^p@SOY)?8 zipR@?haMHT2bq(82*l;*;aSlC!&{Pol-wa@^;+8V@RLPq*L)b-&oA@Ob;2g56SYknau`c1Zhn+8^MC>r8VGe^!sde^Qu^&P_{Ns^ zIlSOg9uF^jUp}w$ZW9T*B&NL2Vou!)nPxMi7R6?g3`Ynku$p0O#e184r;VaTILi0g zZpid^v4diFXOdalk=(J8Vn#esBJ^g|R!~0}I9?`eOxfLoi1a?tWfno%WU`*(D;sZ5 zJarklI@@=4kZ94W&~q1#OrsZqC|fTcv#H7EkRya8`1TUVbALj}?zqZT#sAdk4YVb1L1F`h?Ok7+~0{aOw!$sq1#kS zp`Sx{tG^(S87>hBm?F#pA`EcUCBUOOzexruRB5)>~0MzeY;cai z`jhY83htkvyr4!k)LOo6df|30(fofNPG#q&mMc2QWG*zcqVuZ(h`q9mT5ZBPn$N@D z%pHR}U_Q?qu9|tSD}*)nR1 z_25hrKMz^3y)J93i58dh6NE^3I?phkCH+5IW@N0+yHO~S|$$7SN<^C7Mx=vvA0|P25t78LLqE^!^tWV(2ylZji zqP|YWh3Q|2XJ%tK=HkTIb5$EcP`N^q*&ZZ=3KrAg+^wi zyGidX5NJPHM3t4E#XeJ*uV(O(W8kRbsEh(mmWH_=Y~*GNyeswXFzV`VvrQ~sXH4mw zCtCRj2*~q~I>_u+Ldp6xg%*JziITe~kx%A~b2XjAoC2#w!(IDkuVjj(?%DJn)q2P( zz5v=gy)NLH>d!!|G&tv`SIe==eCO@kK>Kjsz*66hB!B-OURvKUqD<)1WN_^_1ZX`G zQE=U3W5U1}u7EyA^JYlkNg4@nrHt|e669`qjulF_Ck^IOl$yPxdwvgVOxDH3pzhM z*w;1hkMKmbDUI3$x!4)Fm|J{Yppy@|!^}A07)vX0fNPmJU%`4+n#1<%be^%^0p!xp zT4_*umhb{FhQQC9zfD~|i4|?!%cgonWe=W`1TA}VW9c-AcGSmCnY+B@EJJBm74G&{AOSBu5e z|7H8{LW7BG2^sp>OytQGPwGst+=X{@bB`GS_nDC7hB}xPrZGW?`=5svpgky5adhISX}t+meo=o^?9%`tYC^ z8~c>HLci?=@Ed*N4PAm8230j`EWu$IziqR^1#!yEFueEmlA2o#Cvu=fU<~E4WaG*n zVKOH=y_9T!xe2I{Mk^N4K*-y!Jlm%>A+LcARB)t^8IBS9 zfXnh$hty9c4wkovv()$7f|jo*c&OyOWz5E|bAMkzuWIvywv10-Rj2Df=Qvy^Nm@Gq z^AMtf3)+DW5fb!&n@dD2Iuu*eD||JxA(9QH`R2s;bTa$!5G#o9`hF94$vwSTK)yCY z4@`g|WwC@CBO(%tvWS)XV*1Pl1)(eUd@m;ioV8_a{2u&4#+w710=tOAHul)!Lxhq~ zFhImTTTajJZt3qCV%rYQkmcbh3>fwDZ%g`?d`QnnMpJ=D2`xfPDq^gD`^mZYNVVuL*MaS&F)K*b!+gWR%CThi_vZI% zs(94yKFL)zH2iHN8u5&$l>ts=FpM{5HX_0qLE3K(}rY%Q+muKR~%Ob2zJoYiI8ouy7S$54hyvET5E>tgzsT!GXU$2B>42I>}R zL?#h;AeqIli+sCB_1*Z;{Ryr50w^^#-Trq}3-s7FqsgB(!xW-LDAo9UdsnQ=-P8s# zysD%*BBFcTLuB25`F!wLm)LJm_ilvh^u~gHe8Je#PbjC3MS<#quh9D;rROk2{SRvm zPt0eAW%NoEsp5B*zren&+$- za&NH=zoSSInK9>ck5J zibPUTnK=JiV%U@(Yiw0w-7_)-%Q)viqAxMb5eKi*F+BG95Qd)=dN>Gu?{^@q!hYo#@4^vRUDZW*WgvZ(SNd``&i+D|OelHkw zUc&xO+5|~6-xel7$#U7B`q1qa2f5f6OAI7JH?vvVp18mjE&)@9t$%tzB1;?7M6nMr zO5G!g688#ln_rtg8NW+2!Qet3(#pv%-SO$vKt#ONu?wgDg`u@A@q*6tOVg4_9xWrK zfnGE+8AW2WVV+4+p`qN!CLXhtN{qX|TMGn3kL7RoeBorbBF5nHl0Jce2UsEf<}qxmUzIP_C-HIwKFme;@`_a+uv0w9W%oSxg;*Ahy=# z=y#q}+{+`fA2Vmq_TgfZVwJV(LLKTj3{u<=fMMNmqeBJYN`a*@ymP+3nu5aQ`L-BS zMy5+0|FT6adTPWYK(;L4E8nmlWDptgo!L=^%ks{vs1GK99h9=89i-F?K`xmMuWVMl z9MBMt-%t;W&A686H08l9f#iZo;ozaCT)7?)0z3|zS8gAN_MQuTSH_FT*Of}xl% z2BCvOYID&SHnHH4b?_N4pBbN%6+TBTdT%^CXRzQaWbsOK$ujS9I9$A?MtgYdC(8!} zfDUTTOQNu7+_1kXnJe+A{Q@Pn_AR?IO0MKNNM|r2=s#X`9DaL;hs1XbVi!tT`T0Mx z@Hwk{B@3LiPvmwj+16ONEEomO`fla|YJ`euCH&c=cFs&~X?H2_>i;l7x5^;7cP8I8 zm?#HiBZ%owmOOdi<6`A3_tM;BZsxVz?ls4Uph2xRE+bVQ&5?U*gSE5W4H-rLaZdTd(8-yfx#&tJpo2a@{7cFMeaG2?pgkJ z8NOtA33BLM@H00@#{$W3SkFKKZr*zQl(GLsm{(upr}Gmk^8y?g8aWRMz4511dZ-@t z9Hyv1Vk#V7wC1%@b&Fxry6rstXot(}*PF|^C`u%a0S&I+PB7Z(GZ&_TNTTojDU#3vgyzg7ou&jE^_8=eDo;)8I2^VsHsaC7&c1 z_WJ=QelTec{Jt+Hv49o`ynp+MTrOO|S3 z=B<}b{eoa*iH7Jd?uGh!yEJQQ+|TWF*U0Wp?iE$_`^60jxr2^8FPn^7?A`laCf@0d zmjIWUYATR+R%F9{GW{6B*P1+uWY8CnJ+mB3?n3B@ zcr(_?SV^>W^FoRFc zL7PuBK3=pvgm!xW25hPQ(;XDtm$x=KE^4F3(uhv5F_ru*g%Gnq&xeW%-+0H)GTy70EO+bs!bz9c_&52d89DusVEgDQMBWA|CD0}6TW-bE&!Z41I~~9 zvz@Fh`2E7Sa^J{?mcb4d&sSrlIieD%x}T{2vav8Ox4E!ha*Wcz;ISP0b*FuhN;YYO zzR7S}ixmY|fA1)`3k4ZjmmdLMp(nTK7zG~BugD_~w4wtE##%EM!_+a`*#A*{wzY0` zgjGovVW^=$a55}fI=16TQM)JtE1zN^p#v9BA=76-A%mT-v9W4^6%qI zKaM;Y=$Xh*pajE^CsTt-=d_tf2!B^TuPu{7b+gV%XL{Yck*o8v1sm$9LG!9!0ycPjLPB%#<(XAIz@7_oVE!i}IkXU4;xmB9t?(%Nz;jK6to{L&F+ z#dCyhWmt+Xwqcxj?r}rq$6pPh%1t9RN<$bh;uTiZX4t@i7Ce>ZWBKV4V&`PNcsQ>_ zEUBP;k$s*d!~1&&(Kmcfa~I6)Ry_mF1Nc$|mfaUBwJ#`6rlpw`m>6 zoeSo6p|c4T3QX5CNsR3jd13zNO9)F)aO%3u-1Tbw*>|^&fRUEuxzk`q)LUuExzY?v zj^u3BIwi?IN?>(Gss9-QM*z}Q5nyE?F`KxF(R(1Pc9@22#Q6Is)qpe$r@tu#h?pNz z5~>CFQcP_thu-fy$*YB;1_&~-Vn5jAG2h1(76=3#14iTL?`GAL9ZM*NueVJ>hx8*s zny@-gfhFbM#oZC+qC)$)ko%-838>c4G)9Ke0@VT)_50c=VW+lP$alfJ+aa`zryr^= zE0351VHVDJqn|K+cqnhm<%0O;AHcNgE202QrFYXiN;q-NH)!K9)hV zi6w`sUKyRl%HT-_7fV7*8g};7{Pzx`F%#6VM_+FA1yw4{v(5SuvVa$i@#p9CYj;bl z#7}t16Ei&FK^T}Hl>uYi2Ujh5ZfFPy?yJaesJ79+X+*2m@nxO z0Mc^yy3@ag5H8w4Gn#x^sSM-hrDhA^q;?1~dGj#Jq<+^(AbxYz#Y2O@#smg2MYRLW z;nb#@$6nR!eft09Lna2-0Zg8#H@&`dGcyoJ%Ih^NI!t7jZ}o_f4ZoR@SHXTLw)N&j!-^E*u1%L=phPY;n;)aWlo$|U$b4cJ`7y;b>KH_LfUM}@runMF@+%bG4zHWa`_P=A=G_?(zI?tfm;$UMpFul&3QAR z(agad2Q)rHRJF?bdb22mJw7Iuhy^D}I<^h~38ZPkAW$*KK;M$$Bo=|FQ>a-;qIB&5 z#9?(W3$;sCmL~xPPR_a)vxkK()d3$F=CtgMO6#GqIF1)3vEyW(4Zaj7y8+kzy)%(? zRK**dEmSPp5F}4`fkVJZ$bP2MtE;^dt0%4ZextbQjTnP!>IsUxcu(c}peH3-`OG*D z!xSzE$oSyR`A44Tc9~`5HB*wwziVq0n8v>-F%IBNi5j#cedKyeG6cd>NSw z(FOPk@KZz&=0Otvl*f?>B{2(XFlMhJm1je8RzKkNW&z@TfdS{jGWrhmn)K>c=M- zEWvp9rT+vPkQ?Cu;2YUom@gR;m-}>mc45+J_An>DvAXCdJk6dFggpZc8*nwREsQFYTA;q);R4k+G)nSwpX^|p20vp7Ae$6*RSF21IQALyjW}c0 zsRoJ@ade43GktreiVH-zKaBpQxPp_eQ!9IfL6Z(aSDNJBaEe<>9^;fLsa6RdEnD}T zWiAxzz)(5d-H=U;xISCEunTA~a>k4h@_PZh(ztt}m}htGc-a451O&~AQG?tL{>vN- zMYP$U80IBrO*_8(b4J8wuU4CEG2dbHywAu8XXr2g4-^kv>9X=jh`kvVz;<~*pU;l$m&aVc)-`3jARGz*6Mk(5a&g=O3?%&POHw@> zMBGAWX+36a-u# znPtb)=TB6oBK3$O2{9e zJ)R+mJ)YPebQ#J(5Fu2Ak;fEaZn8lFLvPQN=1N3(k{|1#bt9D1NeIv25Go&0C;HB7 zE8|c!Mn3f@t2MAuIp^f0@_6F*1ALUKQy~6mnYr2zbIkfDL#Q@#g=K#ME0tX>l}%=M zWF|CAV$GS)GMnTACVY`FRPa6W^>@lLPV8?Z zjyw4~V#0!q-i8{zO>vF6?)yu}{Sxn*-Fx?z&h?qU`u6Ji^M1KAZ~pvw_g+UHy8hG5 z+d#YW?%J(u*XBmgou@m$W}olZT`9gb>w6M?%YP2_YVqwcr7!~mQhixW2_cnZB4Wyl z*<=yfm+YHLqWF^eq08>9Tn!R6`|d0RpJRa@%A^^{H!G5K<~|iLNQX8eIueP~0v9on z&m9`j&eLqVd|mtTjao^nwTsDb2Olp%Zjp6^r5)ujqi)Ye8tLIWZ~5cSGV#S#hFPa>|=S&L!m47 z-8t13Eo)UP685BdT&O#~DSxbx8@jfJv&b-pU+5a+W)|BLXqTcfU~(%kZ4Er~b1Y8x zcOt_rDUU(X3>zJ+v1g1r-wgD9jpOi~S0-mjy!YOL_xu09rj{!5&fZ|M??Ecsx4p)A@*1McvNQtW9D3BP#b z@q_3pYwGu8EgI)-L7e*=6LAdUnJ?U}@q7l`X(Vvv9ck`V4?P>%%giVr+dZ*e&Jwv7 z7n|yTj1%|5vQ(#2%<1%1+xEm7g87SkB@YEK)@%6vou1D1A+3Pp2jtnF(H$5<;5aXv zSEJ(aY%CYK2J3Q)xMo#!?HDdtcanqn%dkOq}ZA034m%(YHjN{@2uJq zRscQ3e{IF9ISU?Jd?IW?R~0=t7VrmpSkMDx5ewww&9%24pjX=lx~fCcPaQ*YB2l_m z!~1oQK2D27{Isu$$^!-m6ZWUBMzS}>Z{EFmzFm&LCdWJPJOrgH+ zkq+P^mm+oK=Q^}|7%83=N`~=xVSRq*Pr3rD2x0X&%Zau(Hj`?yq9?dHLb_eqN$Zhf5Rhi`Wk3b zy&>r9*7rw69k(Wq@eu@pHCa7j0%55MT42|-Cr`&CWu%~{VzsqPskz_2Ep|!mo3*7TM@2+2w#qT-uCTNcNmK3AxFSgau_u!-7pSdfD zw1=utYhQm8Bq4*(w-A>tTib%cQbgH3*^0VUT#8qY;vCLTL3C82+9dRoZQ?Ge$B|{R9wO5@@4I`=!IPqPMg`G>z5BLsEZ>?|FPeQGM@Jj{r8gQtUmp6kOX4w%FUzxn<^~F)yhi6Pz zmteCJlWpzc_Zb?uFQiRj2++@%JP&)eB05}Vkx-Awc`&FKdlOb*$xm}BUM0Vp%hhVg zAeUrUe9M4Z&fSBA|2UAS34(>Zu7Cvd^u(qr_6e3%azpdu0`dNvJvWV9w)UIU4TzTB zss8fs9%;hfPuy&aglWj9p*Nh~de>3wgEL7#_Z`%Et{M2+FBR|E2A*BT?9<13U~5c> z{mi|n4-WTKMlK{v*3%yk%1E9!&c~&SS=(yOHF=+9^>myiEV|E7yFK;FWTIQX zjUTTu5fp^qo&(`4QG+5{tno@J;dU?+ZU*RB9O&__ebYk}4~$BdN4_4hN{+9I41@kl zLSWgBlndjhsl>@EYPDb@{DBuE$x?IM{C|r#>K19I+6qedu8jq*NX{WVcHv`-XE{?| zkv~1V7uh0p+I{EYluzM@hDEWh z5Hq72_gNPXt+ej0k?Z$Zr+MV#AKNU#b!{s|COs*mbcX*C>uIorp`T>!U-!PCi9V7 z2Vamm%#}!u@f`>wh$J1@$^7mrCrzgf3YcJ?LQC@6+ z3H)z~3FxFIl5;6By~~y@MAmJ9JEnA~H=v%}zM6|I(tB`TG{(I=Z8(1C$IH+BV4hCd z;}j@9Xz8}(^#os99{j3D)0od9rC~MDbcEOMf9%?yfuUdiM=_%oy%~`;+kfRWo=`gs8MV546uVr#6lGoNun3h(9Jx_lPB8ah}Ed zrT=CgqgMa;AwlV`wY7Mj6|wf0_s^z&{72yM(?~xe$?%VANTUz&ly9wvFaE{1AU30Q z8HE&dzi=JH-m`HoPzN61=~MrJK#fQo@Q?o(IN++V*$x%4Vv!^$*5)Fw#o}sl6#`dOc(zD0?W6t4l zZOHFv_DDd@&JWiR0!(Om3>6p4R|&O`mpCteMQ}ec@(Q=*3r~AxJgD%w{>&O;FT@a3Y3h!FxN0wk_ojis%) z^`>v-L%FY#y~y@D7H1CdhPyh-uu%+#q+ryEk_g{B86Wt=5SA%#{!i)u*%#ov>gCN1 zW~h3fy4huZa>r=b{NC zck;ALS2{5b=caF3+fTwIB*-{|o`g%LFn zY1ub=RQUf9_U2JdUf=g{9FPhs_M;3cgH~I#Oi~n72tlnPRm9dR$P@(>R0NTEN>IcJ z1cg=Q^#B2Wooiii*}gb+doGCl8!w*9U3t|i~K`bTxO@I22w_uPH< z+56lb1YOuMnf+>?D5?qdr>Kd`_GdaMt?c=<$B>(dY(F;*klE%nu z=?4WC<)f{+88rXC)vQia%GK%>-yC00-}2SH`s_4(>EUxZsmlK*_fQ3zEfJV_x7{Fj zq^Wlc3v)fJ9Q+f=YRlhk*IJ)#7FiQ?w!-JvD1^$;WAN^K7WrqaVFZ?&{s+lc+H{w6 z{z&qpsU4PthRZ&Ya7Cz?a}XE1m$AR_fv;Xe@hgeG^5m>Wh44w~F)G7TrmGz!OYzG2 zI?n5XpDDZPyA#X!-g&e==4~(O%PivRG{ggzzZs2&P zSvV(^ab;ue@nnvr(HNt)+oN{bihr4iSoon!K1qShaZ&6 zUT++c=!Sc>rDAt%%HaIF?nlg5J{rXB=`I=8!*;O^IN}V&v!4by+(GTr(Nxr~J|L|d znmPK~*~BxP9CgMp-yh?iKaJr%ifwZQ-1CJ|h3o_X|4X3!lYT<}hk83P`tyIN|Bgiz zi%I5Jh*-h2rZ6*nNg4La0uQ;rLC}r4kS295qMz}{8jj_})B9K=!Q@MMF$3WvDOG@M zDzbQ?k2AlgVA`^ONU;aCS^(aWJWIxk6;B)t#j>R43V-W8AsTePJ2-vkJ)zAn5Zv#}(AGkxn(jcC zxSa4uG9u6W0zR+^|v^NvdKx+{3jK_nV~>3_@a?Lj|l1NL`LwrW&DDpBYb;{(@L|lwJYyv zYOTZ#UlvKQ*pxMRDoOn5K1WYB5g`&7Vxor{3IVqip{_a}!WKkHho%WRFFGaA} zRo#-edykc;Xi--=G|uV<9T}RtNWPCFhbYyi^*p_Tln^r9Z0#g)U_q^53WpRqInfb< zJjPuGkYVav+<%HCmKWtakT9b6VT?Lu3ez?0R04-?&qbcMFJIOhaPbu!Z45o!4r&-9 zRZoRnvXz9$omP}Hba}E^y>Glb+IqxAW3u?NcECEl<~8BSi;f%-u6jkIV46jtFo!Pg zjT-Wvx><|*khuQ1l|b8f@pmzzku z|H}eLfZ7e(IYrv)OO}1Wm#^VSdXJe79n1Z|d4TEtWVZLp!fQuS$?X*V%+2SQ5$4#G zhSRM;EQx&}LmE<)^_Fp}O?sYKPJQEFwWX)ppx_37G?cL}Gkk2it(jM+*2t8~_`?9L zy8}2i!E*DJ$3j9H-qh*sNISX{$UBKM0Lq)gF{pn@$)GMvWpN&Ku>EA%Ml-N;vFu` z5K(hW7Fw=`Y@pyC|D|63+d!Y=?j%raZ_}2imJi*1s#xsL+2;%dBd?He^*(h4@%T5~ zhV7=ch}^fE&~`ZSYN6X{C0ha+Qznd63#t7MWy8w2f)vHwQv8n)8M@!x$;3RR)wDv{ zwGb5&B!7w`l_!kyvt%CO)}oW8a?w$i#~hj0m<9BdS5DAZS)sd-?z=DG?f-jRu@O)Z zQ>Ly`j-O}8u3YEKGsr;yE**cgarQ{_x)G$@LXMxC$$NR?v4y(8#4WA7rZGff%lxY! z#t1AxIm=Y#xz-!NA*=XPhU(%2)J5GBnu;uE%kr=0{U*3qsO^9*Jx50OjNofd1Djfg z-_X+em44RepJJ&+mYM&9#UU-cgJ{P6#R@0k=GsJvUVi@ZmE3pxCZc>C4`}kdJ06M# z)S|WyA;W4E#LrBQn3yDS@%X>$0|bY6BOjV3#19|jbGWq_YfM=>Vdqx=>Xz!M&)B#} zb_F4^i+tG7{8=Q*rc{vD@IqrxW6)5bLzT2&y=zqc{iyniCSl~efiT9|oH(*%D2yg( z4l}7X9HTmzd&SWosPt4msh9ojgxAIG=*cmowz)7q$Z`m}9E6?XDZv8;8FzUi;F#i* z=gXnukbj}Sw~Eg=%p4}h=I|U)HfD-SKBH#RM0ag#@L<(B=2F<5tj_Z*&I>J9&39k} z?Y&ign5g_8r*4C?ffbmHW{c_Jvb6h&*d0%uhi6|LGp&7K#w#NX!+uFmVyldKRD|HcuSrA^3bPsbIo z|5Ww8<$99qOov+&57Cy_2$mLYSCjxJKYk-t1y)iEma=kRkzR!f-~NYd~BM&l>%GPltS(5OoL7DTooZ~kza3T2>4s2F_3<3Y}WO*^~3 zN{XxpVE1n=3;X9X?4QVjkVV`-ws3dGYdRX-a4H0xeJ@yXF>h{&WcWosKWyu%J*-RN zow(un918Q0LlgvAb55I9S(7#MdovF)wglT&&WMVXMt5g>ELcQc)+F6A@iZh(!WJBz z2>HC7vP%sr+N-Tiot2O;IcwaF*AocG+_%thvP!R+%sbJbx?j@w!O7$Y`=2m&AueC7 zdleaP{eL;#Z5c=hI`*l)cr(`}%hmX~aavVVLq?j7R6+Irin5W<VnQh43s6tip^lVbTHHg*O$#%10}qwf zBZiMAhp)Fg%!jze>pv6Vm;PbQU~>QzB-J<88C`H8XB};hz?}W9^vaFLkMGx7Xdf$k zWGVxJdxRp`{JP|kZA6*Sq}shnh^IZDnCUQhuSk?OsF>qH)rTdwYqC%=9k87Q!W@UB z;jxa}Lgd5a;qxovLqq%amM7xVO?5DlNBZypg&E}7r@X%gx$Y<%Z)k1yLX#CbonK0jkm{TYm;~%pOBy5myIQ<}7+nWuLB%&O3F$x8M+SfUS zOQR+scvb+H+~0QPjE7hkhT*5`TrWGpx9e<54DC;t5DlkIJD42Gv4G^w=XJ}{!8NsQ z`Nwmi(SW+W6?|JjQOtHhPGJoj9S|mA>pN=72Cr?hJvdMNEZYc8?j^@}qy9@{>xr+d zh_6n2^}Db75D6AUQvHqS?B6pMeh$z(naZUaJx~4QgiEYn^OQL|HgKfhXZ#b#Z~OQb z#q2DaBF|1%=+Psh1-+i0A~R|Ng66e_$uv`&f|8;(AU^5Q#QP?x?rG78Nb(R3@T;*Xn@ZS;yXe$2mpwGyeh((EW6@wHERS`f1bJB)31+>xBnTAs5@P ztf>F%VDX$fZ%bg;CU}`O-`ts^b+I=S@!dfElQ^AIVvMB4*FLujAAM$X573tEa-34j z5N)1Btg{StfI{%Y{a9UB^w_G$f&?(37qz38;5hM{2 zUHl+s+&Q|wIyT88GE&kXzr^urs{*q@(6t*uA)yAx18@>KnQJ}gm=4VhPL+Xyuj4r5 z=E)cs!Zqe^$Ykt+<1!n% zE?L{?tLzZ)=2w9HQ1SbJ6(I+7T<8bInGO%7jrv9U+Q$tHBe}CLlqSMi`Ji_Mo|$sF zNNLoxh9LDyxByvHX*YeNZ+LBwu08ms9-Fdk7RLR^6-c2||W{(qrAQ^>T!6 ze@u1TiNBD0d`Zz9lA5a6hyb5u9z(&?*-EI*t1lE0D)oD=%urH$jg4z}Xq#nEhO5k9 zC27^c3Qh#OuK)6jq3J7x`;9v&Q{oK$7aECi%Gz6hgVDMtgMc5Uu5({7$6GQIc${cl zrQ0O5ocl=Pm1UKsoBWeiGwumAyK!fas>mf9;ch1`9cSIl<9`pllQG9{L6l(Acuvph z=AhG%pbl|_#~Wv%$9JCy;0O4=pC<@AUuKv}4bD)eHL==6a@A&QrgCn5>G|%7v%w{? z3yMZ(A0I3l-Hduv9=o7R<});Rhz#UpwVaAG@44otd_3=26()f{K5CZU$60>@KhL_o zjYFXDCXN{sa!65Za8u4U%}m4pTFEZM$eF(jj5E`S!si z3<$Ulzkqb|ReIaL23st7IaaMWEaI@^yR^ zf}2ZrwCg0f4SkRBMI8S0VECy<2lGFS5^iv{L!7EP=^cy^hY;g)Lzh6GS};vE>$v}| zr>yV8B^H&F(K+!bAw+UsaUy^xbRp^*Y|lOhHPaVA)AB@eRSddD8a8UHI~2|LPE-0WC_+vVB7%|O^rRL` z1m?!+(e%4yhuq1fFp@VMxQpyUU8&GJcZ%sz6WM*G&Zu1;;}t#6JKJa~&@!ESWViuP^1#pu?O!p3Zo|E89z!L+AU$=#7fko+qgRX5P!SC1N91GTrw0;e?a|yxvoi1!EI_K zyG$gxP~If$??DbouD3&5+LE&tV=c$Y_;hLOn74PVR%WE}m_$hvRC3ZfkkWO}Mr}eP zhiO#kTWLL)gS0HQ?FRp8*j9R?@H{*kC-jHpy!fw@Sx`;xM%jpK4--TGNx^TgLM9kZ z_QRhbZ!9%dvN#R>7)~iu)Q*&`;g}#^jrWs4`gVx=v1LN44cUx@^Kicm{j0mvnk#NT zhmk>9O4|#i)SdbqtNf$clI353R|33smHUq$IZYrcr(EakMBn2G9Yd<#Vl1s2nJ{Zg zD)V$~n$-#ST05Cc)B7LlC2z#e98)~Ejsx6P#}ad^%3bbct`CrZI*acJEM^LFlYl*} zX6g85;X~ct#iVJ;F`NXxe_siSfjv-UJP#m#1h)fDg#14_;*6@Ko4=8*NBiq7{wY8V z_BQEX4W1PoW1VY$vRROJX<+7=R8f_AP@q>VHcaPfQU(hIy9*%D!Cl zpZ9cabx~8F5}rZX2tJPV`dJ4$yxa38L<)beNbRY-g7~8CX_iWo z8gQ)(%cynT? zY)Jx?d7Ze>&L5!Imo)^o=4&2IZ5BST3NHbLMF&q&f4qI8xs|Ct_TyX5C@Lm)#VxY6 z^rAOGnyD@&v;G#5pbe3PU5NSw{ZlsLiPOb}g$)L0oG`g(xYWBHw1Mm2hsVy5tG!sB z;>e$?S-rmZ@+I$biMsAb+HHw9xNOr7>GyPl`6BkZA}s&>r(lgxu)Wh8iTJl1B_gyV z+;?mr>n9KWFHj;euzm5K>;pYOTGwA(;ZX-R%)oZ9`?Y%EFlc^)%HLynsVmeR3k<8I zp5gfM*$YlX4pJ@k-8iIflo#arU>yAuE8hBU{Gxbq1mXeGc0}l#oy(pzF{yIariIVPH za^t%6D-<*mkW)$AB zTn~J3tI_bsmT)GJ=Mk15v!QwGJLpb{R}&;3KPfaW3sDutuL?qF+k3r0EH`OYJc-*Z zIIm{4l0{d|iO7Oj?4BnU(TW{-_MaWNagBn6{G-4@<#*ekQ1AbeTyIUKRZnAx?>~U{ zifw+LpU#;GZ#kfh`pCvqu@<;2`XO`h_n^6EVa0U4pQfD2XZEXKR5aq=Qk4*TMD{B( z1`xW0+nwDsBj-?85RX{$a^pX6OdfO=yal+3QARy&2|3<)?U0=5Pc#xoerwlbKTqW}3y6B%vwy0=WpHnR&#Ci$__AmaJiKc4 zzGiTIS@|OqcSfYY2(SyopNy7%)c2H$0dKP=?TB=VZp5=-tI^whCXr}I_8(ldppPAz ztMRd?mAU*H$1-;yqBMkk|K4#B7X@K{gtTI_N=2^TB@9()XhWt3oTlP6mYclvo|`dz z`#qbe_z2V8ttQsYq>gwly0pM~>))vw%~5@kStFYGz997Pq83xnGt@->3Czm6=+=x<2g%FK}{s~Zwn!}=+{dAWF^zXdU9v&l*0;p z8Y8R!vf?FzeZyIo>*wSvP(El5o;q(H#8_^6)dK0*3SPg15tk6c1T=)1)scJPz9cFRLp2Aais( zR<_`X-ED)=Ij$9KBsWFn+@-M?fw#czM3C@~{?I1hijfF3N_a*a`j+f}e#61q`|&|VUZzcl{1 zL6tN&=2?hIM^`&iyAS*{Uy@l432w2?=e&>rO^LWxmGhtGuFg5h5l+^nxaF<)ngr8D zi@IcO<4aJ!stY%}Joo6*cd5(f| zdU(L3tr~`O?!EmaUN`K~c<{F5yy|(7r_Ygp!!TwD;==LHy8=SPE^#X{ew1|SbZ7mw zUR~tVo05}R)nFu8i)-ILsLjRw8b(!mthDe5G_FsG;z?`){ zuZE5ayhDdZ=kqT^PbHPj$i5^5cgc zb~df*Oh4-{B<^(eM2a~jVX|J&cPa>h9^pPmVG6}_Dt2e)%OjWni?mOW^=TM`e#V)a z3+zzx$kj_qD;Uli4a-+#%bwi@g;@_#8)H30zIdwgN>ecF18>F7r&DoAjoYJHA&nBn zD0$v{=|u4lwH$*p!v5Q{ip`O5=AcA9kue~TcwYkKUetvEdOf9A4aBKVWcTeB#26PS z*JADhk2^%(nRYI)8j)X;)e(&nx%TNj2D07B4Hg1DOyEiS2=+YcmC&(SRD=gD)V%D> z@)iFE+14V!%)&PYVZTUrPx^bJb+r@NpKcl4QaAT<*e2~(ZPnPNX%u4sL$?fj-w);- zGk7l&z2okTw0{=)IIvGGul#6Evs6a5ZB_qJgFMV)f`CnNM!&{lW(quC-lQNwm=a;5 z(|POYQ2NN3Nr&1wCyl?m3ckEl28f23rWspYE#)FDf4WV)u+}2mleR!9#*19te}B4O zH8%re4M_1ip_*v1sPDi}*m(}M|2EFnHrO~ymf^Ce(9lrH?bRzYW;CdoIIb)W@LWca zwQ@|dS6Bd9ThI^uLIDEuuV%q)b5@+TsT8g$MvXtk6U6#1pknt2x2MAv!B?iuh*V)Ky6=_|@_lu^GM?dZ4`&&5l)ml(qAbPp?& zhd-iD?x^($F{Ih*ZgF&q;5NzJ;c%C#12_HX&_P=IVa<*rvM(F&e#wr$hvGyfIBQBW zXxjHeGvGpIRLpk^P-ijzPZLe(VXaD7w9xesj0{MG0SJSyxmhbF#VRZ#nx%)6kv8t8SOUjWCRIxOC0qV>oJbJaei>nRMaiq|l2gmDCOXE87G z!u##2Q8B|)$OlR0#Xa;ZiT8&#Ccakf7%w|50X5l7YrMulljNT9ZP`FBb32IoI8nbV z9ymi?nj=#$60Ir#o}JH^7_{nW5(ZZ{$llxyryW$p=w`*;WB4HPiR#-oCo0CXE?qtn z%Fto>&wR}0AACI~db{^Db(KqOt9-V;mz)4}p?Hm*;MP2O5BiD8xKe(2TtoxgwnQKS>tJO)(ZSzH+UHNMGNR5#WxK<- zlvLa58Hqo(IZe^rXtR5OlZ9?@$w1fWd%Gq>y!Jq-bKWsEYo`Let=m@1;eA-ABhbc! zx?OUhP|rY2vpA*Ihx@h^JLLDMSx?)4fNz$~g%>sd?Ij@TJ`o!0lYKr~6^_23sBjsohGcb%JzSnAZui}IZm|@g$zAw{BLge&ZGTTB5`{?#J4bZWHpC{6!0P$4-vmaovY=R*DcDd^y*h^{r1NfP}T z_~rsQ@UNQOpCn~rB-n74fdo_s4pm)cbr&lidHL4L;V3JpTszYta{Qs}M6A zeRCkEdQ$%Sws3N2m65*vkCKm!UiUK{+7tEZq=jX7m+S5jy)TN>H66f7-i@|&@PCx* z_4W+~MpVv;0SgX1wNrTut%98(F`qL(F*H~vuV!Xmq9A;hX9d03((U2{ck%%VFr#9) zba#j{m`Y9H6b5)!;#xnpRQp8JyTEbjFYb1#l^nV$1MmE4s{2`= zNE;d|5JGk?CI&bv!s) z_R_SBhsEGZ%6X*v&@X)rKOi4=Wl-!oOvjDaK2tN@W{tcvchZye!yq#c|gJ)5Qm4$9tK5p;gZ&U zpd)cB9ISpVdAXr11&aN+ku_WB8H7f;6m1eyOdgna^@p3wKewa6VR)S#V)I)k%gL0H zxa)=MFbC^)B6a=d#I}e!+=>XTYCdU%jBzQO#+Y3L`{LB%-n$>izpBCcoUwKA^&#%3 z7SO%AM;y!HsKf28LX6gG-C2PxdHd`Wl2U`cFRoE|44luaGRmVw=6)l;iiuqDK` zRnQv9Tp_d~y_g8DSGd<~(2GzJ)nFSaK#Dx}MIol1w=(sME%F>+X;@yE)CYy0At%S; zI2_BQ9nHcwI{^h{kAF>8^yQVn30y7=VHwdk@l?+A4Ss_y`E&U<&#I!U7Ni)uj8EG# zn?fp1?S&ZJQH%fBaQ5PBpPhYmn?bqNL)gY1JcBo(*PHL*dnl zyqNvNQ2WY%GTIiR?O~C?=bVpkRo^xgao(3fCH$Q~a&Rd4Zpka~4TeJbu%v;14^((8 z!s>p%BAfgSoq$qzzlGn5yL}v8e^o4ypg4z6`0MKWv!PXd|E zGqN`uPpcxuBc~@3hn@Q%eRa=|YZ8@EK@pJ~?21BlEX~C!2k)&mXp{F8?WmV zM?SCS%LnRSps6jKehNfWfR?sSn-{TX68_D!OIQe<&`M4ix}u-$lqLAfZ|~Eds^#u_XFb(KQxFoE4@28B!3TE z(fH12v^W2ki~EN7>%p@DKKVabKXTEKBjB;&<~V<`+53%xB)yufbKpwR({z7E-d*&3 zp0Wj;OD`9pKK*8MAlb{JJu$X3NlJ)pMboE~I&%9{+HL!NIGCK?sK_&$#V+{Z)9&Q( zr-l)=ra$4vlP@Wmtuw#M8w-w{6Xb%t{=|_Ux%7c{xB~`VHljx~(GUen*oD>{bfL>- zOv84Qmz#<2-9EdX&y-Ad16H4 zPu?v=Wjbq)SaPhGYc{19%%k`H9JQ|k5;xJkl*>!2k2!EyRnG(8u#$4&SxSLW+frS(hy{%-IMn z_u}+SD@y~cX&CFDSTt~jmc;xpR33D8mO2zxqTdu+egti_9_}9_u@0QwoxjjBgrVm4 zTfs|ipm2NXt8#eGa9YNiGIwR^lh2)ilbp4Z_L?6WSxHe9zQg!4lNOjjhw|8o`8!Tu zwpiNCCNL_8{+)CKXT#ldecT%-mseRoFV}^;($B(Xo#mZ@*4?L0D3aR-q5=hthiDtB zJk62rJ&vHJe2|oOoDkBvuPISTm(S_>`9$Ei7)?5W;2bhejo%+DQsrpbKoB`Iv?dwD zUI34ZsG8Lz1_9>K``7;$GyGj`CAK1V`Ox+ zNo5@blPs~@L65EfhIv9@S8l%?4HGS10I3r;BS@bJt_i8Lo(S#=B4=pKmiJ?G z7#o+nesGAK?HmckQ-dm7TE>OOC8N`5`%{Ev*c`tBx>ZxyID$RTzNI8W8oH8 z{4+l{X*Gns@`wY{pZ9VIi&izS+Q%Mnt>!dTteS=WWA2@ z^7WemogT)EYtNKh7;Wxj+?-2Q|Au4UJa+)|(Ds3vZ20QZVMpEP$3>WJt0lC+4sN4= zvhP<7RKON|hQ9F4uE7`!Or3e6kh8PK=knfJ6TOIMesSygzI>QDOk+&_zWZ!chn@bP zE`)nvy$KKp(R4mth{)W6deq0?Sd`u@C}-JdBj5`2kg)c}uMX!_jH-W1`u)8Pl+7XC z-Or(bi}2|#AeOiz)}Nkb$ujTz>xmxm?#hpx^2Y28J_nMxHa#MkdZ^qowg2mpe}TJ( z7Q};T=Hx)dIL0;9t#A(;Hm74!zT@zpsF(<#LM@HNNhcorRC8+19wi}D)o%XdaaV>f zu%K0#!LsA!6&LE%UOM~`Avy!!7)E&)BD<3f!WmksSXOl~ihN%c{FWb+FFAZeFmIPX z(-S-y+l!w|O?6z3x*_{eA6JOcHv54iT$$|qV*WVa1zmf+1IfObw%Xsynz9_uVae8s zjOyFZ57zAuvC@P_bbSLbb~m_iLrmqB2lnY%m|bU+S<7qG7vIr{0cxVg{n6W4zVNoK zCR(nF>g5J(uUXMmf{K~sK#J2Ztv2q}145;ey_pwx^n#tNQ12wBGAjHXDyA2yjmqXJ zB@YzN`-EF3`LUZ?eo&uo4wzYP`)6d)@FKOVp3UDJ=?zCL#KW{8xalfA^KSHS6ADdE zt@KDIf6EY_nNjGzVp*?sNZ(4-BcfH7P06tZC}4{Y#9l9w zd6Fv>z_Dmfmb_+E+?jhk&g6a`W1zoJO>n)?3esy?_q*Iy4Y@a^6W+#$OhP#)`&P~S z*l$B*2ZWaF9^2$i5}I8KoW?&ozh6mtR~g6(*%;ua+TbB~$Ay!XQH?^YvHRy7-VB7M zv6jhJZtAMtS_&gwx>&2cWYMiIit9(4EKF-bI!#lqp zqZBOK7_F1AF_+f@na(9%GZmfGlE9UcsGo#pM5HO+#x7Vw65}fd}tPA5GDEv$8MdN` zQ*tS8g6elmUUyl!C;#FTx81Ix{o%|%BY&C%csQZ&lIV+PR*bw+e*+?gYmw}4&mt+Z z)6OgVh;XvadiT4aV-LLkPR^Zc5-*C^;PkvEa5SqXx6yz;^2o&Ql}qYzx`_e?55DW$*)nDKvK#IEKe_{F$@w+;M zCwoOW*mef1tyy^&g@p@kBU@wylLZ(rQ5`E zX>jBfQ@i9Rr?i#Hyq_!U*-w%R&M&|YW^UH*=6{&z#7B%j_E6fCWZgHRPfVJW;&`T} zgBWL*Nl89duYo*wzl71EXf=ioKB1{j6v^KsR1Si~hE0k*`b;t(a)Sv=S*(V%7o z=KAbY$z{u07(rIat-0l=4-knr@_J*&_1Us;GX7kgSC zFgULgbrWBCVi+UTqDd4Xq@v-8%t^fOS^CK+IyC`SL$zC>c=CrS69}eDcB_Z=PQuYU z${T+&D#qY(6YuYhh5q4=_aKenFiOK2fgRH-AQc?ybvX3kJEzN=TIcbq0L-ZDPAS(- z-b7#g1V8;a-$A6a_M9W6YbwUd!oc;7*dn-ai2XF>md0<*Gjm<_!^VsfGW~fy(j)&H z9Na<>>3TTSMqdg}VBYs!jGE4oj825(iEhd>i%$wtpaQfsO4NtpO}%p2U0aWemK2s; z)~B8a%2hU?56Q%fI3z!gL8vPAxqLB-0}iw(Tb+03cUw$OiW?((tI+t#7my%_Ps40C z?4}lv`4i;SY>A7WUGk*&6Eyed%7xi5pSyre&sZN@g*kDl?urKwy!YefZ3N73vPXy2 z+Zv@n67HiB!Vvu6pUa7;n~}4-ce_Po?B1X(shbq7rGN&t$O%~=SwGjL8Cs3K6P-k2 zffQY=z}@n9&mW~}adMeWLebEzEEz#-YQ)idfiuo_!oFC3zN)q;HFnxP^5;oHpYj8? zr~)dFNtld~HOScpvkK>@XfBY63k{RKcu{p9$JKBWu18!y)@?O~2?AL^i)A@+xL{MU zPKrKdR>m@FQu(E}JgZyjVTN%~B8Ly8sF?ThlZVnz=X)BX!dqRewq(e7S7!wZ^QeTa z=Wpn!H5WR;fYp>xS#{uww^ zu&CHV1?grL4E9kAQ{-d)fC$Pn^%xf$KD%yCry9PG{l9ibuOE^!^yo0WmNebr=LHRB zd)X@5A1b0c_XQid{vrwB&y?DFIqWw+z8Q%<#*N@T)OByoesc7(Z9Y$Ov|PjJ&dmvt zR2I&(_rfe$bVoMQ>fMZ!-nG4@L#gHcOhS4+Z6y`y?rIDc1x&x8gnPy6+ z41`|O1m7DIyCybKt`C{JVfx)@XH4$v&}v~YPCYV7GA`r9o4_C}9XmnV{7I^s5d1{l zuIT1|%ygY{tNKMkq@UZO<(~!Jar+%*gjA2y$m%S`(ET5)~zx*;~kHS-5Ah!5yz-^T;5e$Y$gI0GzYh zx-Cte!av>Gr@o_+E9VI*7oo{;v;UaN7&h|f&MV2|Ia2up(}99T!4FKh(apXWAb-1F zZriIym-kXN&=~#5&K|x*#%#nX{67*Tn3bi+J$U`IG=Ku&UC0=^_i2)0vz#IyvrLp!TeeE?C+)t0_IJ2&H@G=L2|dGTN_b?$f% z;f=4OsAteTGUN~zqN7cdZ85Ot)!}yLI7KJu2z}uLt*K{E2Ht|A$qT=hlFlI-I}^ES_a8 z_q+jdWgfcHCKkAe*N1?MIDu>wFQBXubJ0`PCe3EJs4BTQ`e}Lo`IlPPNBjz%D6Rqfd?{4F7a=4V zQb`vaPW)!~BM)jYWdtQv zMNn&j;!`AfWs|_6n%sVDapA>r5%P9#r$e9jFFktpdY4j zsecs3nHCPoJ{79eZ2_IaJ-S$rQY@@3cRt0R88xllyFxKc<`Fm*I!iiNArp-= zpd35IPzbu3(K81QA%AR9siS|a$J3f#`&NryU(Z!{HgQ`^DW+*F<}}%W1Y?lW%t+et zoi#Jk;F_ZdkH`w$$tR2I5&2IpnG=G%mBo6p53$FDiwdz3l%<73lji#$E&M+|_DRrO zTiF4VLIfwE-7Lnn+rVKh47iypF!R;`T1NgRJ?Xi)ri)iFoI#ng%=fKxJw#cm|1pCI z+RN8JRB=jP#HE@Jq~v-^b`399FkgKjqRCi06m(R|aWMbgNVFV=5oCuB?1)2TCq#q- zW=7wN6KbB446B{@rpoUvH$lDkRx8q5-*R`}^sx*zy;wcjYt;p|Ez;b7OMM5_Z;3oa zMz2y{SHdz0pIB%x9Yk zz0RL7uTjBEETO37pA}>mx*`+VFC?*ARQ%8y$@A#!zb(TOH$~1TWZJeF_3HM~O?Fde z-zRpfSslrHd&*~XBF%(wqMVnTXM;A{k?Y<1%h>S(L+4&C`KQ8Ts>(bv{zAJR$T6q1&yp$lcW*a$Cl5+$(0nX&DyHf=EVmLqCRu!wtrA4-{eNDYb246&fgLIPs#I zCeJzSijqIA!gLn8VaogW!-ZOd(!|kOHf2Pj9d?rb=z0leC+Rrpj za{#<`>dSP4e_zJuf4`6LN}JW9_b~tMjW!zJw8}V569h-{QCbsAaCv7_q60JzwH<{F z&~`)Z*Eq{I|6xc70}dGEvakx4Eh}OM8`>095y?6I*~r_TYLPAWPD9p%VyMiWY@um9BP_65hlrX ztPaCR+a++i4uUmp59$?8(lk>6-22yu*bm8H+fZ zQ%DYPKUJuMk%yIzP+%Hp#7xh~E&0@*51h5Ysq#w7Q3stN=CRiyOHI6D4fi1!uL zPkIrXnhazShoa`JXy8q%aeWAZge> zeCm3WxRiD^2yY0oB*_Lrc_E3CaFZ>{PQMoVP$V;BY22_)wx19FM#JFVDTgloj=P)a z+7w@-NjVhAaVr8IMzg=I`EB!24(i(F%l8qi%Ya|4EqOHUd=_@cnM2jM;2wONwmX^m zcCTlJo~GfmsF0&kLrt0n(?7Htd=mp>8X-=VM4b*WpnzNJ;@_@PYw2QBd&d3{?L!kc z{JQr4@C0jgwzm|f$ylnO?(f>3?!c9AOuR8y;dTBolH#H&gXzP6&)k}5b;odjHY9{* ztYvlc^iOv`a3{hDEyL@Ye>4rvibgzhqa!@&vS0E{z?j%Wh|Y!~aV=Bxr37n*nVGZn zEmT=)>egUTaC^L0o9dW%V?;#Nb1mPK7$QrE5WDE_BUj0!Nu1!}H~{n@UUVKtU@ASN zDI-T8q3lnUO2r}yAwyn~6jKwqhOWKz^)aMJPy79osCYg}BmugC^}tNB9ku>m!&5uD zusvZ^ASefCNz$y8sv>WIMjR*L-7zQ&DA}}Vke~I>iY+DmPD5~S0(&+q{>7BHM-#Bm-XYxWcz>Cs!ZeP?IhxkFbz_t!o`!a7Q)@ZlGk3BEq6ygl2%sQ1(Fmj_;p zu%Uk%?3jCfJ@k3+3nha?gdy?Afh;9cO}D3SZ{!uQyg>2@ruV#3cS42u6Hw%LjSu*v zt-&akm`jenB#o}S5|%Ls6DBd)_6Nx{A8=i|t7UB6FoZNeDW15HA;(4@Y~wgE(9XO- ziV^~D9Nt{o`Fb=ZM*{uPfliKb&9~ak!|r;CG~QTKh$LnCJAnlQyQY86^6)d4^}2TE z^LipcKC#Q%;+MOd(tS%5x$pgkYhY~7lC?}NUh9i}dyLald&JnlH=e_*q%MpFg{qS*Dt;*GO_L*TnJZc#81e(>hEU? zAL?@Yhr$q;_re+a^gQPpr|;92oDw-Yl5rLxhmR!9&180aMod*1WOQ_9I!s7!(JUC+ z-E)r*cCjkq+Qjdz_ zvL&l0t&eZ8I59|KEdh%_2b_YGmivizDIW%zkg)3DW!YDR+3Q+iz`Q3KJWSKk-hU|x z_ep?jO>>(j7$a2~)Qg)2L!AwUcyf*N^lP)drkR*(C;XqASdZrsDJX_*=p^Z5Qec6! zuLD@hQc??$N@I(Q_4RxBEs1CG&xgQyH=9GQCOOr${ONelt%EJ*TZSYB48tFy|L4C< zNZM_Ym6CB3g;GK#D9i%WI+XJ0oH+f5D>>EU-(5y+^fY9G{DGT0!hyeQ6~5iuuRfrP zI{9rk>xy`ty~^>l?YW=iTgrHU9rPq`-Ld(|o&WQh9}UVA0VLelQGSA+JyLn)dNK8| z#8NwvAOc=HguHNCm%X@QHH^)vi0$^7|d zNkl88ytC1_7svfDZKKq*++420#-NX_yxz^{h>+BQjh<)@& zm(N)oVO-o>x##}l$0Aay&idZVlO(!eqG}CDJ}|(C>ZZu>(&+lDVKk8RiB{~|ESGm0 ze289W(TwB>V2Z@sBVw6{b)M6=AksF+d*HN#jYt9!=X2lJecjjczTWQ|g$R<69=_Tnn^xzvjb1x(u0gJt4_Hr04&`&0 zcwmReoW<|t#h#a=w5$`fu7(Is>ZQ0epy<6x$x^RY<}G`)ld;Ja zVf9CVukhrqr~zFYAqZF+zCtTiQa&o`_kY;fSnpprI)N#{?r8&^CrHT`9_N;{LR0lQ zK#Q~dI*XxQkdtDWyyoBq4c5~c+)C(HXgXF0L#*g>`q;-ui3wUjiXRr%bIrM|NvFK9 z!>>@#l_nM8acPySsBq+6+J(8p%GGx1`Jt{+CfvY+u&}^nq1WGwX zb%}#mM}k}MtAY|;LB!WFb#zS z$697K2Cux$d82x4Zj=JNP|J%|vF(R5j*DW7fu>ttcj%ef!B@Jyw-r2+U*Cx z$M;Ce%ZS5-X^wEQ^~$yUaVU29OB&7V8~-V%@nJ#kc%n8jkanr{K<@p#mW8znV8?OB zzqJcyNf)MW|DUg>=C}}=_0-nf+GVCyzF5w+-Ejq-`HmOBZj$2G+THk#V_%>H@Fk+! z2BK;nLo7D3Twh|kiwykH|MnhrfY~x!JKjhmxS_cQgf(I1jb8~4pF%fc_>X70FCRd9 zTpO=ZBMxv;i;aYlffKL(ER_KNhA%eGHvmVnZooR1Jr=xGua(l9tXz=e5U8T)bnx}q zaDyata@dc6W9I=DMjc=?|Kw%M=^Js^j}g_Lj=Rcc!xR-9?Z6UuOr~d~N-w5Oqcv%U zp6&f=z+v;h)@VZFG?6BH4WwS$;a3^FFEyYZrBm`ke{dU?OU^{UblH*9qqk|PC^d1A zz!M(g)++@L*vDzv|GI=h_q@(MhyP*5{*|Tdiyc_>cxq#9D#smaQ+1nLLz1{Q_yO}7 zim(S65K2VwHK6T!F2%I0V~Jeu>qwD+6QgO&zo*-#`xw`d=33j+AJgF67Ut?CG2j?K zY4T;bj_cT4`A1w8|1EC~SKL6$OY}aHxHx;yci-11&22vHmqfgy!m6=`;p$0h{UtZa zsI(_j<6xmr2DiMLjbA zNL_xNb~xj)+dk@?z(KGhSQYNLe6IW|<7kmwkPv2;8De|Lvs|&D%xZJG@IwODTmd#K}5M zWb(0XX*)BIRvfz>FPbSWfR}>#H2nT~zPDF6 za<@A-2~_H;0>@(>-|P26ZBkxTYU5)%Jnymu4EYBs>(_&0&VeS! z^`m*N11&=ZmOA!hgypRE#ASw(RW;(7BK*w=8!)w0sRgR?7k!l{`HUVJ)h^$iPLdZo zk13Ka!!FA^2eUSK@CRO=)lu?sda!Rjg%KAw4$y%>!V-?Kp-pix#;oL6^3v&1b0k`+ zIB_qVT()@V&0sP0R!jXm1#u+WNtM;T-#OtI z+&NQ~AS9{)WWH?sHruKeC+2%V)e^@4Hk@@)qm?j|yMbfbzhK1Mf2ynz+ZABl@H%p9 zY-;G&Z!m^e+F7QLMaeJGHbc!x@N=R}OCZqkScy-DbK< zkyBsbG!?-Q`@Fi?7n$W~pII>pY~REFgtY8E!ZqDNBiuaE$2%5|J*+c#V~&yx7|k-X>+OXsV&`EUfTQ=@DKrQK7)V9udx^I7qS%&^KJu9 z@Y={l*^lC2D4rD3{tBi$J6L58c{HrP`~e&mt$oeE*u9B8p~GS!1zb!yJz-t$R8agd3oqfCl5`E?wx)YQBU%aAwVj4|9i9@eI-4j{FQi9 zev-ZST4bFVMT5m>IoEo%Fk5Ddwf$EiB(j|!c7d&BQAAqVC#=EhY1Gbwsrf$>4EEsx zq4r5!K|2_Kx3k?@tL#OHkfTk4j<)p;n2MY)8MzyBVV;rq;m5bM!>{pr03;Ls$KBRj zvyc1`{ph=c)wNXXJsZtCDags`G#)~@pIa6xtY1?M@|^t08A8k_Kq|)IN zAeLm?bXNkEc=piAhnc{H-A2#}#BMpZGnz>rTxWfrbnMUhg6zYMSPQ!i&0qhTcWhYG zrCJa=>HBKA2DhH>5cDH&^G_Q>vwebCrI$nqM?AX^7!745ZeyU+#`7bK=5D{~o;y>M z3&{PZx-7~mhMQxPMVPm83GZ8U=;tOrCH%4d zhDOrk8Ojfc%cz%w>VvzorKb6HMlTS)!=N_tY$km+%1$b2DLMbfeCZ?eEc;&)(@}=wTml47~U0};}?me{VN73c}^^1nBH7+GX z=jXT@fi~Mfh_#mwB%tl|FrZRYuQ@(5G80kVvbw|{ejX*i%UIx`TmbWLP7+P(XfPeX z-&vw8=WQDwbNXYNWDWvtyD5Bph=`LSIPFQV`b5L){ zd-F!-4HQaa(}~;Gn^-V;41hj-0+&SRlogzMg&BJz%@7{AcPoNe+TR*-zCo9)V{h>$ z0g-?_%R!r|{Zd2fb)^3@l<8QQ9T}gpDL-l(P%TyPdB5kBm%I3tu*P9bYNjrT4#20| z&AMWkkW;-nfgp|_>{7-h>clXH|9;v(yp6bsOrDME!dc8ObFTpeHRyjN8*WZf1&INg zb4)kH3w~0%!1ura)R|Nr2&=Kq{&Kk!q?|N*ELpCyrD7PIMYH! zK{PrsQ2obLDZa-iWvS>zMzg&3ovYpTXf(^xokDx*@)SKAwa|EjDW_cc`k9o(wp)~_ zdYvY;s7+GsNj+cWvSWUMpGOXrD&wS6a-e%-P4_)^oI~UfuQ_l+s18Dy%X3oZFF0zX zYoD_^|GD-1`t~^JcFj~Ag;?R!6?eQwBjc+`V78+Q0T@|i0>oa@+n&ofk|m|k1~ak*kdBXbspR#XZrO}{Erbwg5r;hb(XVm%(dA*0)7GX1UBEL6#81-( z_O`2ysOtB2sJ=E~{n}!jI%dmEMBd<>?sxKcBB&A3WM5pC?cwYjpEZ>}7Yd=rFjmU0 z;q!nV{tE0@wd8Baumq~x)g^u&o-$%!sbPS!d9cZ`oeljuz0lkqYbNS$afGpaNp{g5 zSTT#c%LdmSd^G)92vL~1b+LGx1&Qlz8s9$2$)P+;$uQAh+RiGm2oPK1J8u4u+pjp~ zrM=u<0HHIsj&Taij=|ai&MH;@gR0-&Xqco066gbWemO5(;94(C(SF*S4nY9@D#6OJBqGeEk zA}y(&;OR?OTjiWQoX7q9LDno3gQDe+3`tMRlR%gT!^%HWOC*DOauT)u_!eXYE)56^ z0v$l*ynfkhK&eItH9gxpNbUilt#NKTJ#ieExdfum4}6VrO&wcfL7VE1{LmCDecaV< zCp22g`BW)qzbqpnMQ92dZs1NEMZgQlG{1{aHOteg(y~VBpF19%apLSN5PB195!c(j zHN)>Vmvzi#Txa=Bf5~&K4YHAiEzY4Yz@p*+m8Pd`#gBPn$>TfVf2_4Yvd{h##uX?1VG&6 zmvZl@B*{NZ4sy!tr)@Gl>6_yiAr>prtB{z{&+~sc znh@>-5q6{G=B(#d2YqXP*DII9ZPiNVmtj85X3+)w6t#AS3#K)DwGh zfE@dZq~=N*UF!;tZrgxcVbnaX_fLa1%u%_Se#}eNC(PbU?ljFxHW2FQ(VQOrI)FGY z{vYqEyz|kvbDzhs-Is?$8P(njW1g?(>ZQmkRF9VN zuZ~H)LV?eRwd9Wix%tmlpf+^$$P>8YbMLU6K7+CoXyzLY3~l#x{{7(^`>L|JTbU%z z=vk_C^$;0%+{@aHA~Rb9vuq|D4I+7wq>EfvTT^3IRVj6#vz&F~vwiL7V8bBqz*2MB z=FdDpRGkGW)5-bIt}Ldo-pW_(uFL>nJ$g;U~hJKSlMM`{cp! zEX~tzw9|86rbL1bYvMMwSSE*paP4vcW&T`Q8TdSa6Qy$kgLg-_g-)9E-QS8}(qOZ>wlii)-yv$$teeRl$j(BgKAf74@0jE0IA% zs#~)nmsUrsv9c8E6;Nig^3@wqyiU59_oCC z0f4c4Zr2Mj_>`H-hUtsG;a>&-VsCX2LMCNvpOUP@1|J?%M8#mt8nidZr|V=2J6RL@5N>9A&42of+N%U6!ySGp#-7-1PGi=ug(ft~Z&VjANfOs`FU% z+j)*VT7iiA;bq^GWUM>5wNZQVa5eOEx+HJaWv=YyN2Qn0AFjEJWXUVL}?aDF@V?ZeNU=Yhdxd?YjX{@F#v#_2zJ879mvx5J zNECS4A!Va!(8!lyQGZF4PUP51XZuW-t3bL}tn%$zZ$*d+3fxtqdBIK3o-v>1l&!Z} zB)kBUf*E`9>NEAO=Av$BY+Jnt1P(}W^5xp0Kb@i5=JQaN!Ij~eA%pqclP}w%GOWX1 z_pqEYDlUWFeY<;%fRT(S445chw=Ep!ZIwx5(X5Ru>y(w(7dx-UkY=Kv1gRHf(1c}X zs(kskKmYWQh1@A@a@e=D^UMLKRsYB^7s?_+0V+XCOMny-&_w`u!F~j6@nsDEd4Is- zZ*Ks!dL&x^*^3P}XsAYI)=|CJg{7`&uK|s29`^l{lni*rOu40@BI+Q&+8>TW!wF~X z6R#b+ftD5~hiIzGYa3rb0x7wNqKv`Nidi0Wmb*^C9M))jpvu8DK!h3~ik+@@Jpn*a zL1~SlB8$z{d}B9RN4XM|YIv^q1mXYV;h(NiH84PB(Pt*2r+dh*`y4#cv>WhdgLF3M zFd%ESE1sL7whwQ=5-g!Dql}W>ukh}# zE+>L*qQ^0WNthYE4=5i&N(RVI(UXzO!1i?0thq-Bf$m$a?X1{yy;Vnu4z^xm&siuk zf0@*u8cD}9s1k5JFn0_T4q+)lWr>;bIjMuDTk_MTRWl*au2c;;QbL!9ob%xfxoO{a zh$@s?r^;&E*v=r-j>+-il6?1xI>{o_wD5utX7I)usZ+u^} za3^x)K8zwzyN9gJwq|Z&!JIHRQDgsrKaoUH&qw zU1XMu=IEXeJ4AC(u7*BEk2)sF!a+rEiAa7nR5d>tuADycFWMI-IQz^!meXI&htf-C zL2bfO*(btgQcLPW)2(Hx<}hwHQvkYfE-HBSJeVFnZixc$WdIErf^o;!!~$$P%jMA$ zke_=`YkD44C&{envD7_+I)Kl*oF78_eX28k5BTYWI&Wp3yJ6{NraFGM>3p#wwI`7& zTDaqXJQlfeV|WOZAShK)^f>SIa}(QPAJfGYdX8H=4@kVRpR)Cgq_fM59Z*oKSE^*| z@9thy^Ehdl_*=)qTn=R1j&o8J>QYtO>k5#sZhyJ9S#sDy&l!X7oXOkDPfs_r`WnR& z6dVrnYOed1N-CsTPK(-79AWBJ`3bGtJ!d#WnlI|-IaDq@> zbYA)-6QHk{WIn1`Dz1&WB;V>S5917{SFvhyPkW_mUgfoYweq8=hA3tkB7Ed}=u z@+LQR03&Asmueln@BdKbehUu1HK)^o($%{V%#0Aj7@eoN3-|PEyu75RH&8_Kwuk2q z@CI7-&<0*>>{@=KbJSJyP2<1R6J_0n?WL?GQ@^SVDCTvTrJO&T=^@-_sf6l45EVx5 zMoI*J<}crOAZSZU>w*Wc=QUGjL`9V@=AW{(g0bkW3!VKiorIUbx!$Cm?!58%f%g*LVI1p||UU8kqh$rB)w655&H8Sp1boEmxxF|L&eOIYA;AVi$0 z;B>7&AFT=Hrh%<0lsDj}*frNJv!WOSC6>=mSL|pIA1;XQPlEXq!fqyRzMwqUHDuv@ z8{)KV`+ZwDj(+=z)SG2Y**_@!oa5#Yx^6!0I`-$nr}i6EF!-by`lJ;WkB!PMbj6q< zh^ddFO4ZC~Fpk^e7NDKUxvhDB54vX{x3*3IGY8lYriYUgrxSBT2zIVLNy5*NR)JO) z+Q`zbytEH{88&hzfAyQCxGo7UOUP1^lTE^crIr!MWbaqMgh)9-z4gw9RgVRcmkDQ= z*K*$Lr>nkXo!7jK|1#tsfyip0kSwArd{r1-5>fbd{G^vA$8a-n@eb}d3x)cb%m?Ii zUt8ieDADtDi$G*na+vjbEWG7dfOa1sMaX&*94Fe38^LZ<6f=*ng}TjjDRgRC14aWY zZO}E zfpFIUaE?ZIy)WxPT@DzXfHC>vHS?rr@;1N#2;)$Wsmgbk9cs!uX!@8F;klbUN@2Cv zaf0d3j^=dqzRy`1|4?oE1?Z58O60sx<^v6EPQZZS&=}(=Tw`M}E!h{R(JDJrNG>gm z_m9Zl|7tZ*?l3F1gRJIJ+4V3q_xh>rjzgW9r@L`m92-r3l^krsG zCE)?{POHG4@oQH8Wy1eE4Zz49j%Z?4w&xIPZ0PpKJJTn!=KQdx1P@(TE*_cGd# zEwXB3azjM);^mD&y?6D{w5-zx_ zLQR_PeLF^iv#p=ubMIFms2XF4D3>0X4321>9kn$TSeo=wO{#l%hl@Q*#K#L@yoQAR zkf^#&u&Y+d`zrxPU=e^mtq6ukyU4Xyq$0d)ZpGzGMe*}s5!|1G=S1N z*?WhqMl0vrlB=u0Wk~P}DvKYGwinEi1ll)oKPu8Wgu8+;fV>9GL^cg_+DhI?%3q+@ zAQw82Ly}si*D=BKO-|XSPekjt_3}=$@kfaTyU-^dsA)Z zQBOG1JWG;l3{RA2Ru!0g>S!MK;{qUW80WJ5oc7I}0s~qP_jPL+zqLVb#fo+ICl*r} z5RXuJ7cPV@Yok$KX=^7Txg0k~6du>ZjbEVGVIOyR&8}~Sr|mc>%GEaVEC0BgqWOl; zljy7qGj00{B0T&=sSbI19Jqby8BFfQr5;Nd{f-e+fpI18!|GV7nQF>PPRW@P@j=8} z8*iIfg$r_Q7+0=kofE9B_`Sx^_(2QLbn1}9*nAp|_ZGV`zW~N4!wQ9iBxZU}ndros z`4WDC5mghzC(RIgE2f_XSKCRkNLe8w5RDIIefSLBk}=W9U7pOQC&UJzYU>CW*Iel% zPgb|L@q*wqrn9g}!0S>7h#_v2SE^>pk#9E!G<3DI#b^|zy!F0Ma+00)nqsG9H_rs-f54|%m|@b zPKDARhac03#@z|#TljIH?Z6)WGx3&*>KPN=GWM1oP(8)Yu(-dV3NKvMsCh4|n`w7q zaXCnuNZF=?>o^h=G5($etD1yHcLZ#IrHyGmOp_ob)9rSBFlu_sJ>L;#p1cguPR=kM z0;)sd=yUg7q@Wc1Q+}@P>Ii7%OYfnPI*Cq6rrm=#5GbwZ80Wwp%uA*x5zZ8i)0u-> zh6ILiz4OY23uQ9ZYC>5Psz|!>)~4QL?ZqaO63~YQe)O_M}+I#hR&MNQpDJ zDku%cjGD`)k#mpz39*SK7DP;rM~~Z9-PM0C|5Dj^S0U^CY*^3&nFyrpzkN%1sHh2x zKajF%ZGIx87b$Vs&Z_Oq$?<;PaY*xb{In3cVmWFW^3~q8rBqYfDeR1+>^@}L$K)=_ zVMi@3vFfb;@imK9*K}=Y=aejj&8q`ZP*cs*>}>i?!1w0ISIVh&jrU!bXJ?0jZ?FBS z_y6z&b)IAp3;)Kl+IMK&p71i5*VL5yvd|BvZQw?5lDNIh3c65Bt-C%hNXJ{|Pu^C~ zD$r<+qSzw4cpsvSeqK)TXk3kPR#x=FCNCK=K355;?+t1(0regE^CSwG+!E!~hr<`A=Nv+9m%urup-rA9 ztPfQQZF|{rJ+;e*9X?vb{Kd{LqJBSIu|H4uH?2mgDS>JMKyGt85KKs`@5qfm-z~Fo zzc9I)xWkyJu-R)4Fx2X(*OSd{KUO3V`DUC{0Rsq5`y0i8-IJHZIxre4a@pdnvc zF6cTn3q{8o#}??OIzg#Eu;de(owy6#+nW?sPq)zt>Xa8HiUdL8z0<&c9w?L(-R7NI z{amS?_Uxz!)lAHIx4H3<~&N4Q(#k~U)oC2 zQ)i)w$xFB_7+Nr?0eB*37Q`utzc&%r*5#-wDIXx} zf*r;E{JB6^12wP{%FaP5R~cVGut6K;()bt>ui#@P;-(Y!1@|xaDMSoBOXC_$7!kGkihu{cNBUnOeV6K(cXx7Uv;>+*X>O&>%&0=sY_)E02YAcdwUEJLJ|Y~ z8*2M!9(0-cn>QWdhi}TK0NBh}*QjFhcgz;dPfzj$u<0u4!cuRFjas5<74gwkIWBSi z+BV$slet*4G8sv3fAQF7KQ528KaEVH6u!iP(darVz$Ebm6x`|5(0zgR1Ms*?T*;YW zX1ZpIMhir*yMAs~wNQQKU4%4f>xM;;yyabt@-%oeJZjKoRj~72@ltUlbVWr8aNBy7 zFI=#j-0NojNM!##Y~NrA@W>apxYDF^)qw#m$8sD^hj&3AjCtXqSKv0u2Yc;HDgz3%}=536roJ+k2OTAnbkMbrLdCsBqkwi zhd)ROcX8%Hfno-m0w?B!zG>i$plQ;xZ2plqv^us@$Z<~8#5A+QdwDIVs%(}L}dW?5Zu4^8IqLk=`sUhCfm$$aMGC793>(NfI;YRI1g1*eaGQNy9WVCn#VecVVoQGhWQcLw%_pj$ zPn5*W@Q&Ge-P7QZ${1#>m?7rY6?HXW^JB4r4O#SvvEWWZ?p<)`cF zeeoz1q}~|6cHhktx{#){Em0sis8Hy@-Rzfsx=q50g^H3Yknxg3xPAY?SP> zT@sI`XQaytdXuWDNi@j{wvrRes!#q5?`s-Yf5HrE=e3@%=d#vf{LE+%9CVRL`F=18 zRa3mp+ab7mxd#<(PfZ#uZS=i3g-d{V2Kij*oKK+@rjIfFFO~=w(O@;)&P(cID;s>q znU+?t+QTV+`%Es*hdAWydp$iuGvuPG3=yDZ=*%YW(o*CX9Yk#hMvKwn-)o8|CNZt! zmaSZ>;-J}SH?sfGD|R+;!nIN#lZCQB17D3otE*TACf9c{#)^b3TfMuWfvKruItG_!zh(NY$pc7Sg8ozrtrDx0xFJdnjd^$^t4$89^o4$59~D5+!69Bp}xHRW)TQ zg$AE=cE3_YE|nU~wMA#1AfI$M2Biv1w8PhvA_6FPTF9MC1YX(>M;Cet@ zdzq8F6w9|12E)A-GMVzP18VP}o$YJ}=Osw|4+Qu|OhQgc*R_w!gp-R4g0$f-76cD5UI+d28|*Xt?4 z677Pjp-Y!!?2v+J3-n$BMK+erSEH(|nCp6t6NkQVK`3N`p^1&X<(u79SmgS?XpLXu01(CvA~W zieu5ta6Rw!r4HTDh)h?5V_l|D<|<;-)zDZFUxSK|7GByEaVR3V5raY!@{AR^)e2Jyixd zYX4G!hp-bRwHm3diQ;KgqFwM}Mv^QyieVmf_8Us~TTsYEmFlV{! zm)*Gr<+2H!Qi9;GkE0Xj6G3>9XJE<}z9rOMPoW&guA~=7hygvMl6`6Fdyy}n@@n5& zvr~0f4`A~hhl`bZNp9iuWlqLpE(Nm6x#FV*bL7)-dO_Yrnzq@FN(hn{**79*RzB!=;Mp!F!BRI!pCa3ebdT`CREAr*6H;VR5WU`fnk1INK%bly z3Bl(^lv+ycEA2B$`G4YD#cF&dAghsYY(>n2Gjs8iCpV~Hc%C@tYXjTvN4;NTz zRoE15yn^c&cP`xcgtDX%K(<&QiWLkz?xU2BD>4H#FeGbeVRw^Q_8~O#UQz&hltrOn z8A7e+QdHpD8i-rCRgGh43T|WroABL*|K~a%McycROP0f{(1|Y-9OIk3)5RVpG7`!Z zac;+?@YS=vf&sny5Gd(q0>yG@1aW|;i}&ip&7WU2PL0%gy3AMr&<>#8crZlxc5Yxv z!H8jH|HWUK%AwAx>tIMlgNBR5uU9q6Y)A#2N{NWqDK_ma@7^+@pnv>UN?e0;2v@J3 z2?c|_Qh=m&#t;cFOX_#yJByBMN|HATb%g z3*0Kw(v?Krr_g11e{eooP~{yF_mbSE?PjP$E_Ij%N>=dP1}yU2^pMW?OZ1_5HSYd- ztFvLxty9dDyFp#8gA));iGIXe5Eo9F?GF|VXK9o>2TnlaChgO}<(`jH5A$;yo5Xa& z5Nn(;{miKTFVb%1^B2gc;2Ko7_1tEw%S#VZJ`%7x7SAj%>YKAOdfX*RK90aFfe|cHQuNm zH{bgtKypc~kI4`b{_GWY!`&5La`Xv6&{U$aZ=W4KDy!!@7V&r~JIKGy8~ti4%epGu zrXbtl>}w&lhUJ3?bj`A|*d2IxW{2lK2O3B^pJFB{ZK)b&O>!Gq#c<&DKA8XXkPsm# z>=~>9Yz#QW8y>aqmbq5>hP0AE7c)e3?Ph+XD1)>I_XV=u@saoiZ&DpVsbtg|%U6?n zs!`LhsSIf{zZK$_SIQ;}>zByD4*Uor|HJb(Lc+f-)qU(K@#=y$==`Vl)6A8$^whT_p1t5VSKfh0JR% zWi`MDzAB|Nr-Qiv;&~>JY+)R7vMSBpZ+!VU)olLU>H!S@T<=o0kN>-u^jowzrT*8F zzR2(|m3q!wyuA$Qt`oG(YuIUEmUk`X zR;2-({arqjl)y{hL;HMr{jfNIBY;A<_E<@cp`f2p}R2{IrH&UW(cerlu;rHtfz z!p-Tftjny6VzAueZo`=zp6m>0@L6HB#UwlK)=Avfh}q436YZK5rb2{kPyF+A3CZPx z(j92Etx+8Qf>8cKzOcVG)#rG1$fwD1EEAdb9xyz?FF8IDmjCnb{ROpV?keP;1}_)I zkjHm5?Tl6wikf{P^e+ZjsN{ zXC2}8WrkO9b;o2b!cHz9`x8E{ZKC9jiQveBZ3dSdONUD0>e9lCMo;oh5Rk8T}$cGdLi zvZuRWE>>UtNY8cGuIq|(_C)JdE582iHL3MW8D3SepLypPGx_ee_<`}{$>E~acUxOA zZNd&uD#xgkmkpe3+wRqgl|cmuP7nNnun)PwAlaDusdzFUrBN&T%LUZW*1L&7?q@6A zra*_Iw#QgZAl9d<-uB>!lN_A4nsiZobWe_ot_#K^<;DbN`1QClgAIS;*V9@GRL*W6 zxMY>}u7n;J%6N{bZPQYsL|&-0_jgP}kyC<7-ztn%dmBN?A;jaHuujf- zDa+2;x!3~a3gq7pa_0UswuNWOz|AuKb7VCV?c8QZOkCxSoHOWEsk$047AC05HO8GP zEnP%eyW z8;W?W?zJiMkRK7&)VeN$JP!GJvKIuMj5RP;)DZ4x@9^&~hdFO010UNgLCml`IpKDT~dzE2zJcfKRdQGwP&@gFZ*h9SKZ=szTQ{_IJL zO|#Ai;x@wFZA8jr+TubF<-C%_D7kftK8$-r%95Bd9!k!Vq@Ya`*f%V3m&tJ9+QVN{ ztRbmgC>6IC-y^g?>`EW&XGO6M4CE+cR;TB9$TG}F(frv+)dBv%p@6@oP;7SRzO zcr=AhADFs|vu-Y_M+{}k_>oVOLd<0?q}|g$2Wwy^ng#tysmAdGnUS8UcY_wG*PAsH z;{tdOi1ry;;9plJSdD1o`u@5B3~AzfuezILOnvq_0u4QF^HxonIpT zrhKjB6V7<>l{6#7le)}G4I{()^(VHX*fZ<=06BLL8KMWX_?(61XG15kq6ybI%jL8! znY%sOpPt=W>SNG(i?c)vCTQ#J|1f`-3bm(Ji`s=faK_HCsf)#5OG}0C+eE#uFZUa6 z#o&)_GV0U)$%48Zkw&c$g&}v166?$U;|eNouLcNG!@i~{ysQmn&SP(>H*(sbU0;dK zdDb9U+r=5@E)d6S)H)YHg|CWgd%Qk6qLDG@%`XyM@#<91>iNf@J$Cz&VJqSJ&y4iR z5zw1vsl#1beA+VelC_iVdenq)V>nSsJR`_dL_)?WP4EzlvG_2X7V9NTOtk5B)k8=`KA!pu2t z>2w1KbSaKu*RiYJR-BLHg$T+60f5_JD)ci&J z7isRo<5d$Amy=$1b%ipevPccw7gp^B?7d96MCVl4M&O*~CMvMmbR`VwfLU=ixF?oM zqdf3q=2SSenPoYwy}t*aN&3G>aLtsd9()Rh$^m|;bxJJmnF4tgP^A=v#5bM~FVQ~z z2`4Of4@`Cr=f;L#_zPG3E~XYJ*?s|2U*FhbAPV5jQd6%-e{`vSf7hdP3{+~o7TtGzOkBd$t$&~l^ zda6ATpV6dvqyr~uQ7|dW=`+>OZs+r5p#S!tx52cJKC%wA;Uh~8LozJyeyjLWQSq(O zoyDxLQVLa}?X<*tvo=_`~0~7m4E?S^^@~rbuukVH6S!^AFgOnTj>XqxP^JuhobJO5p z!?uw0OqeSQ^#S*IloNK``I*{TO@o6d^IV0isN zq9y8gI3~6Wbc;0jXOgar4C*pMhwBU|ye?+600aEX>+Xp{NdGr9_+bnXDG&^{)hhwT zF2`k0=5w^uGAfr8Va60THp!R!I^_sF+cwSF4hEodQZi)#tfH_3S4BN=7#6&L!!6@| zxrqhdE+oSFKjFvpGonAD&d*wm*U&BBTCX%Bcf5*WVUl9^}2v_8~!;xnK4 zmY;3)07qHib&WTgk`dQzxha-=Gd*_Qmcota9^*X0*EDnKrS&i~y}a282P4p>!i=_v zzl)d&D&gQR&7fj5_3NiYwtu;W!!Q1dA$>#?ICaA%U9cO@5DX2=KEBPx;CpZvJ;Dj- za5ZPeZfD{GSj!ZcB)7fN$^u@y{Khs`Z=~u(w`L+tpW+J@#kP zIl*RSymAQ9Oh24rgdZFJyoa6`jLt4MtT*E)+wfVxLqK>ldkHjMO>xYM7IYS%@^Rw~ zkDR#Bacpw{TugQ1@T32I71u2XcTOr^8EBKNIeE%FXI2a`{P*VmuCAN))^;961|8s! z!wGR&J_8ZUS6ruvYOeJ!*$}aM4Tdy7SLpvh9q%3zXp)iuL#U;~ckY?a&gGlKI+2;O zpRM9T6tX&%-D7Bqyvm2G+$c*&YpWOcGha#Cl+KX-_os8rz;lbazFo9NH~KDc*#iOd z@fx+~s-s&}7tUYWZf%;gDqFG=7hcAC4Z-D(|89Lx{81H}tMMAoy)rK`CKv)$LvqXc z>U5TCgt*eJErM~{7GkIJQ15Vpmh~2XxmSlGQQ+v=Y{Y?iuM}FwiZU#69}RrH&MNgW zEG~M{5w~*F*!MsXjD0$m{~li-F-Ey;xTs<4;iiIRKk&ugfW31lE$o`;I+e=`D>=YC zJ!}dS;>fpg*4yG&Iyb|n`4u?L*{D%duPA(6Ufv>SGI=&9qUV##fUw@QBvS<5!zitl zkRkhT5!3gCW&5MqsD91^pLWR0@|0<0p0%B(ptGP)b5pgU_;S(;6S))3fpQkjsflbd zF1*vDc10L^i+42lmf*d?)qSw2H~ADe2lPaawZHRS_+7=Dk$_2fF61Z6c?4p4PWVHj zCFFIRnqM(3t_KX|8hk-^@LJPzx6X)~fk3%iFDFVLrLMgJLL456Jz?mTpkp%*`KQO4 ztK0GG>4SqU)>wAF>m^Cj6<5MUxm5QZ9bq8eotNDx?xmXlyT|<={NBfd$CY$82@T;E z*yAQ@Cl0|!j#tGcZY~xpY)&bN_FvhQ*&o6v?f!I$!P0T=Y7uTQR^~7xb)N-^0aapj zK-l>*7S4XTTZxi&f1Ew=VOr}u$aQh_k;=rW_E4BgcYuyFH6?Z}aX-zZ_1|=33O6skGt0 zddzhzP(u>pUi<-oDG%?K-t^hnwdb7;jS^T8wt<}a>h_SO^l4MSu9e(irxYR_MnMtvkLiPYOrldIq%CJvLx8#q>Bgj z+Ajw&_+Ow3nBLh&a1I~pc&YoYgb*#F1tnHveTaAY{ot(ZIm}N#amd$D+ey>MEQWjj z==19f#FAj!OeQtu@6-#E6U+tdP;u!ct>MBr$Hm0wMCw#bR_CM(E`0uJq6Ex6ZAZ~i zosR`A142z0OZ*q$#FQKPmUtn4pX2$E2z8S_LGn4*Pp*vW(n~9HQtOivO~_t(tpOz_ zvHjNt3`fr`6QYcR+morKE_SxF=HfL94En$ez};yrK~vt8_ca8(x#(9wUrEiSn(~?O zby}!Trpo`#@DKykzrd@X7P+b;X2eRuM$LCImqu1e=XiZ7EboB} z!@unT0Y_Y>XZFfLVUG6_GKI#C=rA@ znfuXU4{i1i;s)bbFLOOTiI?KxX+M1w;xEX8flqTG1m_Znv9qEdJSd%`l(SOx+<`Lg zEh}4}GM~I*EHs9}Mwhu~vdv*}YGI19y*hVQKQt=|?RxS6-3=s9uAnB~8QP}45z zd;JECog^7-+YFWQFR@Nq{(y zQ=TK%aZU|#QE%?XjRj|N-HO|I*Q|Ns;v^r=H-)4A=Fp@`ON99lR=OJ@Z+L659KZqK`6W1t&H4z zFKv#}u(4-q(K)&7hjdBJwPCDRM@!57cj>Ip!=M_=DUH#n30xO$27s2s8P(V!O*sXn zNt{=N1IL6B9ZI`^BwVe8C|RgWO_z$9oq`n!M&xAj{ZNwt~4ykynE9) z>9nZLv{;hMyw%uli@6I{Q|7c-(^OU}rInfGGKvd|SWa1*+A^&wv{=@-5SeK%pqZL2 zl3L&j8Wt)j8UiW;|MOs0w*4G--_Bb*ataH91l57LxV=K<()i@NGh!KpDU9P<9{EA)v;wbcSourd3Ceu zK7J{yKh|{Nz=^n?zO|-@*n($dqxAt z?Mrj~fdKhq9904$inN1c|Jz3*&x5M?eQx>O@la7SW;#Yi_oWb_RhAJfqj$rA z{bIWx`0w;utlYx}~q!D-b2r}#v z3Y(9FQ~v6|uEh&?KbV8$QWH&84F;;PcTFBEfW&J(i}t|X=l`y8Wtcb}iY`M&Gn_zw zKrsg}kl{yrGf5k;cA}!yV>KV~uzx$IVK?37^lwhnQt|rvm2o0Z#Q>5RjF>h|h6z0E zSte{YI4@#wr^~NDFA0^M^;bxjQcmDA(w+`%IFtTPQYU2AebaobQO%k&&ZMB%QEcY0 zo`c@q<_@g)04-6(U2ms+=7k1v#SS=jx&PZs{SUPmJ0>QqWekS>&+)uqjXdnk%m%*U zM0eah0-i(Ma|pFddQf2PSS^8SY9uQ8_>v9%k31-~tInj~q-8RsFBYkaR@-*j1hZ{) zy;wr+tL2zylX zc8(Th5fqHqXgV7br!YwSLurTOj2hWFowa)}Y)!1xz03bKW0`hlt0Lt|?7|p!HomtM z`H20L@pJZrMDrhiSBWso!${IvRv>@u%%q2V+cJCGfuV-C@THi1^T}6In>3C>Y8qd8 z`BkHdxw5q-i2IXG^#JY}t!Hl@)5er5O9Tr`ZskH4T~{-3afMZT9@Nx(Ei*|1>OD#x zFaDbRajqNj<)-%j0tP(pvNq-0ei3qB1-#>3>-f%ii630`9HmOgNZqk65B9VP;nw8)o55~^4uRd+GTC~i_~zT2v)EZf z_+liCL2P&Ej}Rdiu~9J6o40{5Fi{B8oKsNFSvOrNk>~70-U&w5SUTl-NgR<;aY1yU zG790!gb`54Es5jh3Ep)Xou%m}V!6%OA&wCY<|{UHz~`q5IR+L6=*Qs$270d{4i9%a zGS5b2!}=isl~+2w!GOP5cLCGl*1K(d35J-v{L;+rH|q`~6`m}Y=Wdh@i(VBxC&PG& z@Qpk>h~xl?;Kr96#&8PuoHpGI^#_oS9(fNT5muq>(^XlXIRoLjoY1x2uzI%A!(7)w zs=(weq;qE^qz5YjTiD>0u+aP;8mXiGgn)Lzt=`4H>&d*Qb)wU1D*RLXJTvTlHtV4P zl3jLVICcNeach;c7U@A=8_FTcX^{1=uzz(H%O=5#Wy!3~Hld4dtVJs@JloeIQwx9( z2vXka-Ho*h_7Tnyi_jjbY#&!!W@5Zld1ht?^*bII=CM9a3xp?){oy_7Qy)7sFd~#g zdYVPkq@XZfM80pKHt>I=itGOd*Qm)L0Wk|_0&w8tKumT;nE9rROJ3u zCH^#Oo`iKe(*o&(O$Lf)B#AqOLXA<~^P^OCGA=T-*^%eByJ}RtGZkk^bWyQz`NHa) z&i$M~x0;UPbM@lb24CM^`AJ#(+r%2d6S6L(+hdxWpdCJSP*-+&n*0{U?$3j&+yh%| zl`2DSo5T&_Q0pib9}_>EE!fa-;zv40;1*?;=NHVAR>T3ZM#$qv)QMyE9TGLS!UgUE z9D`01iL3DK{+f&6IYvd$vY+lv-ONxPzt)o5ttIPx4b+N`!_kD^07(1uKE~}~L^IqB zJIGh*Kn0jdwXxOC)f z$TtUrlSD3oo9Ise6^Q5|E(3cfoSRv9$?5o{g^-~{UBnhU*`#r(gNP^EiL=-@AiSKZ zqip{6_iHokm&0BUg0k*5%?G>8c|NMUE6Y83J!6O7?ETEb04V0z{Qp`#iZaV`{%`jBm z-&~!?@MvJ`Ep$F*>en5+1u6Y(5U2nptRVB697wxztf650whI%C;0#%EE0`JjoF4rU zS{}32K&3tEoBJJm)j1lcWy6NTl#;C%Z5>i1;k zValwDUC?SSUL3BH?=(Q|XPO+06EJP={K6l{Pnwt@YVUE}3lF&{mDC9qB2;OvPQJI3 z@Va5>OsG0oh5NdOyliyB!S27l_d1b6*;;5dp2VwWWqA}9$T&dC+jJe51lHf%N_^-a zrfCvPB>1Ub$BH#|!dC!8a`q~DtLVDpnP(vALs)YFt)XD^%zR)UNE?#&V*!x?BPRcL zYHic+hZ~@`yQ&87nYFor{n6%CTXW}TT_v+>#l0q5F|WFd{wM&U-n_;_CIfC6GWh{T zY|vpB0|#-LMRC3W*Hwuk7Efa*;(|j6^uT1;A29clLAu^I<0XP-T7%*w{dVG5ZKbba zyf||7xQ>jhRfjs8N$;qpk7bHO`eQwrKKN#^LR)L!U!lbC@P6r?7`<_%ZUGO;} z$Wo}t6dRWg0MMm~rtW|3TaT zqClV5=&ewfN6YaQQ~9$IF|7acP+COTu`bSu8R;Dg5uTQ_Q49#ewy< zUD^)yzK~f%lRZ-u&{XYQB=w|XuRTz_2D}2pDi1iYz!A9i0_Sh~#gG@i?rmR%tys*e z^5s+sn@I$_I<$Ef|8(ejzD+y+t^A)Si9UZM_)76$5s!qCz`493F7bDA62@YJR#hq7 zg<_xF-6;at+ZYcU?uMy?;UxFIQ3bktlLY8D3IfW?2{1ues%g#2h!r1ENWD9+I0`Ct zU)#QY?i(+TU*@fk-WVF_YTKooa68xywu9MZE8#64C{u`T!h~bTVmkFmy}MkZ6-`l> zwabv*nV(dfY9<~^WEXDf6^;aGJ4ND(hqqO#k&pqd$65X7vNo{Ir#GfyFZT*%0 z3Q1f9t|xEGg8zae0FPbLxCqAL)hQ9ko|&5WQ3lI8rA^>@-+T-L9H#hDFRjwDb}wYK z-y{f#S?1^|$N5&uzK}w1w)qsZ+T6u-DlFL{%is`?WpIqn&b*}Jk6TLCDb3iq&1{k$ zQ~Y}S!?Exb;Qs2r4Z?uh32Mx+7<_90oNP%6jl;aSxVqo|I)7Yy!Iiohy?{h|_ie|lCwpfdCq z1tR?s4?b2?GlqDLcTAg>*|qrUmfc70VRFh=>S{+H)0ap5`Jy>J>$0{!Vj$9VXxhJB zeDtN^PTWCCuGj2LF}=%g`Didj1FuNjH%$>Ln8tWUz%IbdNm}83*DSFBUc>08*uwth z0l?Drm*Q}zL=)$3%QTAw#yKU!6#&IE-o-0|<1^eT_d+d2n8k(+_f;-@gN7y{l;0J} zo4%}Fhv41p38-#Ix0#N=kqYLE>>WCHmG`zwSp5a}gZ$ottep}C z^s)LSKy-zdVGeZGUz0z|H4LwItP?=PVrzwviTjqxtE1zwle}o%R)er?I1_+Rkze`n#D6*DnhT91JGQQ_8j8bxo|H&&|{laXeA~ zzE{M2S_phF@drPkH0Q&O+5K!%f;Gc zvjN4U&|+ND&q2ZRRwu|d2VW6DMEkRcU7ku=ATNRH?ULuQd}#>otC<^S(vZ^a?;lYI zusyXcNZas$A1#3H7o8_D|Gp@YZ@m4_wPp?Czv@*oi${ z1)Yb?Cm}Ul`j=!k|8bJ6vH4n8>exe-d zJ^KCC-zU^A)wH>P@C06x5Wj$+ad1b1AlYHcGICDO;d6ZhB>&Y(s*|1fNgzpkNRazM zdFo7ho!5zVJr_)J&ZkNA{2HbLQ9rF-mv;z}*d1jrX2e$WNJI%?ZAlKQrtLJbC zJya}ATXQDD5P6qR?ear`dK8*?u*?L`@xjbzs)~3Td7<;7>O9ODiO;&{-aGg_d4G#W zT!c~20AQ;y@=By*kcpe=7*uA73Gv|&cONqD%CbliRIoz7B!fTFGyp(WXc)qJEa6#$ zn#l6osWXP?lHHba5TLRGmN{fdlE=Y1n~| zhu7pKxg2?X@XLIkb!su%$ZGV%5&njBTmcYQb}>kU5$)9l8iqZ6)P*M{p|2lZvv_n9 zZBBf%hcKV~x(h8Gu!N8l2GB>y+ zHi6sMiDQkAMwQin^RBdJTFv@6;dFGbh+VGOU7m{*g7t@YC)U?ZbM( zf00~8Kjg3@nu*D;HL>xjogf(ODYppoI2crDdSE(*j^WCBULCb_GE$e<<53}4@VK4P z9KSsQyK_Yg%LknedwBvZJ#&=KwRr7XB;W}Cg4WzoYFk({rtMa<@Y!i{GRf1 zSylwmLt}1YG*3XmpGW@-h0OHv(8HQo7U7dHhPJSY;7x;hO+R5drso7pC;;V;m4R0` z4C@Y4+(Qk)p^$|*bZbzCoiCxLY8AF+F^kXSyy!shiG8rs*B03X2N36m6KTbpOuP5* zv`39lcc-s}nb|NqB%ta^&a)w3c;rLQC!-!^2}Ii}>aogpufD z?yhpEw9V?(9m_Qm3r^ETYupWL| zQP4BaDR9?wLv4NsoNZd$6^C?YPGhyu#ABI7A0=toJaSGI8*4e0q*RDxNd2~Cy}XXV zo&hW#lh)M2b#aD671SZM1~6rV1xKMb;-KI7&ETc!Q&bT_%9sY~-M{&ZSjBd~Jrb!T z_3o7JzO-euO6KKrt}=A?GL3mayY)lmldjfuZ0b5K&GI4%)GQ1?VK7Qnk&Cej*e69M zl(sApH5Y!%6AqeySW(t7kpa1B35%h}oNL|uv!I&^ZOMxAI<#5hxS!S~>r?qv_&B;U zq%oiQpW@M4)xtGrI+x|^K0gNLHlNF&8xNI?M`_f2d6zRkFF&z~i@;Tz>Sp@4p4|G= zD2NoRJnS01_aW>dn=<%lji7(c{ohdCth3^y;~+(d7z{2$3venzy6D=gBMWw*^uM># zqg1=U+M;L9>HY0HVOgSd&251Osa?4wnp<$a_6m@@>8Yj{xAvCR3j19b!#ts6@Io4z zsOXV!bBqnaF_%%J0RP0_6G2(5P`(PKIS~#l644hScq`rW>~G7^$3Pk7`FXYf!Qn4M zC>szVVm1;z2fufrdE3td5r|*xx;odx`lCdHq?6)UL=`8&K3HsM5q5tR(t1hH!2)0? zaGKrK6;Etx3f3F<@CK@gR$hj0T42dPOZkMjk8f3MR=&a?V!z49A{$Q zYS4QeKk#szhn-P_>%r#MOXB0#%KD3(wzY;eU2y9NkAx(reFgG4QX}GDU0a?zd7eA= zzKFgm$`9%qO(c+fqn8XFc|vlX>>PNGzJPys?{i``@8q;qj0kVd**Mbg;YI?sh541c zUb8E)ZUJ}T&EN-bS?X#MC-_g*Q+iEa+?{f^8owPP3lf<>#O9H`-6z6EVO+h=;5*7(ko_qrqGwI4`Lw)&eO6KhQy5ajnU2w@uO~Mq&Q;~}218f=D zpM;NT{-ZshfKHIfNdk~0Z$wi@1bd}(H>bWeh@5ZTjT7wLa2&5v_>P#uMaV03$SXn8aZzRL*J!T>oMW#nLRF1UGS zMnkBU%G)<3yySFGINIDyN}%YU#FCWJ;|HM@_o}Bt1D@X0)MCRq9c<(bZTs9i`+ti6 zT2pkGP_OM`>{Pc+Bl+v&@#4(mSK z1a@i#NJ{qbo4og>uU)yabcLUjcA2E^tkXjMK!`YIwH?Jo1mCJ(5R^ud9~k^wd%$wZ zLTxlsrPWK6@1A-T&L23D;7Ms}%S$dCwZ!+QD^jK?-?yNPLOm#y0M6m6R_XNz!zGjd z)GgQ4fXRV(P{-igK!udAN^8=>bVth0j(o#v^m2IeFvLFpBdVJ1L{0lt1!tj>zILbd zK^bgF8tjRSsNS>Vf}p9$>I}?^T)Un!RbD_J+*%XkysM*1m34LTixRaCAcD{F^ zIMTgq*-|%If+4)Dj!u~@tfv&&XpvkH|EDh(n9)$fu!GRyp0qVAyr{_JYr%CGOx6FQ ze%jq9W!C*y#fj*_zP7z}_~4l}1FoXME9CaGXFcq&Z!d;Z#kY%D|7bxne7lBi0}jIQ zaNo(wc3(v!HgAsV>B}KEwkZ=3g|n2OKU8}S#qyEZZN~&yVFX**=3dfl_edskkrpM4 z;_?!#_NCwnDd>%2E05LbA{m$4CWxb|s-7Yy3PAn7mXV7YYFoZh_*=p}2qI>#{2^QX z8n^i3cj%`PPxe|uTZq93UXz}H#a#++o?#d)$e@uE+7ARar*QgtYi^2d0CMuNH%CS~HdPAMJSYkwgH+ujq? zeKtaPt*aNu^Wwd`CK^#07<9cCRiWs?8%5++v8QqQp1z=L?CKKs!=pN1Lf`Z6a(}6? z*2yj}vlip$w}{N|->eA#2e5!V_5y7G>P zwI+uQEAy!__)b$$%vCIQJ%SKe(ObUr;60ugX{s98E!^*cDzYC7&1|@B#^R=15a`Jw z247uvPL(y7inQ;>W%3(vToK)dD;Vr}=qyWhVxs3FW>`_xa#*WO*+!ScOZ|yzmg%Mi z7oLYh92zUJABt=5NlkmGZb0&{Jt{KANeLIX?v+nbw3hpo#uP-E)S(T;P0sQsRy}!I zn)(JC$0XRXV9@67*|EB(AzoK??_44cfSot;EW6)YwI7^@uIqQ4;TS*~1IYpCVxdpkNMS`k+?{2#$cnd(kD|aF`%w2SE7rj&wl0bHi-?h;a=6 zu<=W}Sc#hYNZ<3*V40#W=7(eRALCJdkA67=y|Mf@<2C82HK`VPI;nWO4Ec;Y&`B}_ zx*o*QGyCWfefCLCww?t}SCFnQ(#NaRLcw+X4K)>u$&89niXpiI zkf4j+JyjG$flj`LY5JX@wHS4Zp6L|vo8!A;twj0E$J?{2^Xd(8_ks&5sZFdlL5w7# z<)JVX8Y7)%`Ba(XCB#_RTTIr^&Ev)rYX>AfwjO!^z%>I8tr`6RYF2tAWcd)T#-sKy zkmA%VKCEkwd7r8+&)EsLB)^J!!8O`piD7VGOTQb}L%=K8B^92o90vjGMjbw#qkzcg}7ZYS#oP9$QHf zvqZ*gY!~+DmDJ?zVD?Jx@{MLp6G$5$ls^2?l*>fTh0z+sS?a7Hz(^evqhmYMd>-7W zdVwCQQt;n-$YRtk#z~bf>I9$uxPHnMN)(?#$7||W!%bi^6ovGfHoMU+Hv!h1L2f)4+6dVj(GWO z1ploj$f2ri@Jh#?{jHSVdG!rQOx>)?^ERlp!rzF!fBt~-`RO-D{huybFJm>?h~}IB z^e#D{7b@j|xh2|h|MN_j?PQL>ZwT|B^vn=D07cyUyi4MrATBM+7vVX}Vbq**A(P}r z@EV&lc^thdXs1x_X6b4VlYV=@{jvU?it^+A;#eJ*22i}w{_z98IU(v`p_oA^vyQ0S z+ao!4Y&F5I2T#v8qgReg^OWhl`k@p{Lo!4U?|HnP%jNVwYRdE2(VrfxOqY&CCt!6D*MCQfo6q z2G%i#M`#=Dr&08+QqC`v!np4wLESyCIzc*o!1u7@Yah_yCz#ASfv`A*;dOM-Xmr~H zSqZ{8@w%kiHuic!xQE-{j^TwS<|lgzujPFeB|QYUB@HI98`I`$@n$IN*0a}oVDV2E zz*|<-GLi`gxc6s}9)ps(YS)f!-#yyyF)wC1l0)1Z_g^L%&oq=#*>4qj?PV;_U;(9( z&`2U(r>8+A@1;K>P{SCwQ4B6m1fprGGd zEARbTP`zc_nB5mmNXe`?975j7BGs{Qk;CT7#z2EpQt&o~75BTv!R~w$FVB z{TxQw)18cA{ylJ-#d*V!T^Cgof8~XC6=YQ{{}wBtCF=1bWEUzL&ee8dZ(lHsd|lDYqsIdX1(}PCy^*#%H)pBPnY= z)HTg*@i-{EVfu%4os{<<+#K@sdWT9 z?PMp-`fwu6=jquN=OcRWhEw?;WN})$d_6!NHhcf5Qn(7au(e%qlWGmu^dQrELkQz* z&lnF(q9ZbaiveC+((MacGUK}u#B`=yq!J!Je45=^FOgq~s&00K{sF@c%~X|zD&4^3 zE*D}>v9Rj09%ji|SK+lD6g5=eSTT0EE*dJ(Mtq{%(0!C`5luw)6)7;jeU6eu zjrMIxdNBD^wzQ!A*-|mI1PA>H$n`~c-2CE!I7l*^Bi-Gvr7AHof22G>Aqp=*Qb*{~ z&(n&!scJm|<+lIu@Ou5q(6nh(XRTX)h7Fv1x0lV>-?hx*9H1S0~($3cZ}0D zi1>ff2UDn_~3SF`7 zg3}=M`&JBLYeCfmewosH|1Ia*PIB1mJVAiT4FOe6-Ux0C1%{Df0eP*B2VjSR_7eE7 zm~%G2UR{kB#AqLP33j!N7+j;FWJW}F)>0*J15etW zr<^9g9&NNxKPZ+T_9lsbsC+4VI{@q>UW&B>Z|fnY^2l-mk+WR+2RY3&+Tq`UEl8#5 zaQ#;5r!Z}de@R$7>aeHJn)Umb!K;@j2YJxoRD?9ny6_K?7#Cr1X6DY_h0C=de@-7v zkhDEp>OnDEv~j*riVH3i+ri!wK@TFKsbT8XFwtL&^6Fr>&9BmrIpT?%RQpNg$ehuALP^l8UY<&j%0x>|B zUdr==!>IA7@PnhqYw+pI>!oZS~#gmaab`TL# zCQK7_i46b6_%F#|)Zue!qt39WPZzv9i$RS^MI zL{}FRqHH@dTlZyfA4=De@tUZ+Or&|0Ug+P0P>{z{mMfg2NupEt3_UY~F*F5wiQa-I z7FYfTBvL>mN)VPhXzonV^B4G%9E4{LjUMMyW6QDkY^Bjzo(+()T}{6%kUl=G@x||F z0#^#sbdF2Jsq^0H#5@wi%%8Jwc@TT2FIo&@6HS(bp_fpArTt1*?%Z%IhXZ2DGRYXk zD=MurvC>Vdki8s*%aY7Aw{Y6Vxx-oVQ)d{8mM@@RBwekIa88Yj2%Xu_wPOmzy}~@Q zYqS8V{RDk{EJY-UXu0Wrbrjg5N01RD!hV=&6AIpm_^=V#Dy zi2o3(ackN^{elF%Y%_Z@dQyLTj5A3WW0_I19WDPo;TO4PYhQZ9*gYf6)8u$)(u+!W0k8 zfF7qK+wn{P`coaAcSZk%>iZq(y2nZ0#mtL|_;XL={(;kLJGAZhvH6`go*QhLvM%^w zhw6Sw$bTIp)P|Dw{B7|VMD52ml3#mjYMMuhRWus}rwDF=-G8Or8#2$@!@&E?>YV06 z&tPo4fIBcRgVL|H+C8~Yr3@Jq)`e4=g6BK551LEV}+>##|2h*mhcj^meH;aMyhSedF z@b|vEFoX@?TZlcRP3}ZUd3S=ENc{Fv&DG|*<wJfvn{fnF3k`F|i4k9>b^D z*6o5vjL(YtRU&1>S?(5Qku9uPH(+fB%%bQ%vNjL9PXyWM6SjlHSUS=KABm=hAgcWd zSV?4gdS+8|eFIpE!$Rc!1Oio~5p&6*9fj1*zPn~A<+(~{D#LFxy}5|(vlJOz{vAmm zDtM|9%2NEy{nwlYJKgOdpGMH_fz+rwjQ>`YtQ`fI3TgUvgg*M&KWe}7@ad37Qqv_@ zQkH{wdKy^JF|yfdSv1r z@_{=mp{dZkJIEOHY;&D$B2|~8Vzo~m)Q^$CW^DoS&%X=BXYMetN;wxbuAB1su=j-lL#7T{*#e$ux^v*Jnb51-;hA+4Z_yNTIl`!m zqlW-T%EnNYf)*i@d9sN}0h$qjwA_-#|855DAIRQ_F2WMS2+Pa_Oz;_a;MWS!_x`Ol z7L}sHAT3DOp!S9!;G(r_2J{4N>DxoKRs)7uzmm2P7qq<)Rg`6O--c`=GWm<{PgYA% z7Im7|oYsWr&abiTdXT#R@dBy82_>me`NwyUb0+H4E0bfVLHkOc=wauQdj}LR7t%Zo zxm;PxBLE%ciGRx^(Y;UfcGjQTGEnX=+Ewuk*2M+8rqbId2 zFazdC*?@cGHm_}W9n6W;fYzlxB1NpsOqFfI4Z2ssp{8+ij58C1@Y7&@%#d?KajOdo zPvl#w4R*+oigYHUfVa$xZy$@J@hZqOgX1ajlWVAYfaqp8P<%_74+IArQzWGVP*Lnx>SA{iVJs9;&8qJ<0e zQO6}A?^=bSPKDx>dh|w;AC69y(MPwJZGmGn%hxr5DLD^Pb{H<*0SviHvC~%R3$k7W zAS3bXLj?PzKN@K;7j??e^AvDOfi@lW*{iTtOOh;U9PNY#tjMb6pS}SBJE0fxA3zq}XTXIsd z#n)GOJ+okmh@N4N@@v9t0`EEGWW(fbiaJ&g#}zG9W83d%S`!TCTigGVKrzp#a{414 z-*@Z!>#`b3=Kh2BZ&K&E8>kc|NnAi#p{~Wo5T)07Q$0cbCS<%5H9Ryjja9rt$FGZm zuIq4`8>Y0zqC!CJ^Io`mM*}9)MZn{2G4nyW-cN^KQy#v>ZE4o-!vu@kvYvK7sccJ>933U1MMH9c!75I;9Mko<(Y3G9sx#Ile2>$YLhi ziEi8ZKInVBnz3Q9zckjv)u`spv7v2T<594Kl0)3tNk33=CeRfq!Vs#fYQ`_jojds_2q z69nmrk9T!J+dOZP2<2$oMGkXsBDQ1d#EG3$hQstt^Ub=S#ob0`j{;M;o?3P;+kORZ zS9qNhN=RSp>;bQE|p=tJL?PN*?U|p zk}XWb)Kfu2k{06;THGO#EPaEkBBTjV@ zpoi5{03Ys3k9KvXxhY}7N9W9=JYvJ4p75HRdzm{AL}`Sr`$;997l$DgWHQ5V^4m+) zYxiJ-PwEV9L@RsDe~_tI6?KS)4HHzrUY?Hw_g|;YZ9wi3#)IDYD@h-Zx0-2UF=ZSo zTo}_krlLZqoz;VfENFgfiRT8XZH&4$pdz(_Zqh{gbwq5R`no4=Te+l4Zv)c}xeW1- z;aoS86G9qcwPOJIF<{qj+Mdq12v|2FGIng7YHc^O9%)3ow9GTZ+NbpN{V8NikqkU^(GL=?p0 z-_@}7$q$>uzjF24A1@gq89g2y1L5Fqkiur5Ew^~7%EYmZNB0jaM6d8>CcwxKv}5-^ zeT}CF8d=PRZtR)#^T?(*79TvpDXnQ6vD-!Tp{g5+X@^`RCG6<~ZWG_GFtgr4;%ENs8&t}#o-Nj&m{q>}1hNMsK7 zi4%0qq+`x;-F^{B({vt_jZVXBweDXg_2QKSb8-wFbF{uXqLY%jPdN*m<5|05TtMw$mS&{1s4koX_NteTH?5DMY&#S7qb6s)0>s*^7pIu zw_&;(+X4R>QjW|WVR6$0ofk8OdC5ML;&|gMmJJm2^a(PT!gM**`9$Pl`fO7f7c1SI z2;*8chC2)e_37J@akRD?82f^k@dyDt5f}dA?p&i_D-DTVL;SpWuR z8$blb%G^sV*vs~1Dfiw$cB8HY*&_uOkfXNEk=LST(J~i0-%*HT!hoVz5Mi z(1+s~!A`)$-@NMVWU}sYrnn`IU&e;PHyF7F;g=wkedz~n=qRW~oQ}M_H@M_&2T4#= zrF*LIsRH>hYyDLmbXx<}t~n*@3cQoPpt;DNQ+&p()@Z}UQ+A@`_#ovVvgIVp0TF3F zHS5%>!7R@3$c%+;Ji!8;Ljqc8?tYXpng2#UW@tkw^5Z|i8CaZ>Fsm5E@+~fG*vXhqFToJvD>|1iIPwbgI>lq}M8X;yUgs8eP9wdCF6%DHo zyS%Wml7sEl&djpFPiu{@za2zivH5d$*rj>cNCHn1AX3nJa}z`ee^VEo@;pDY8B5hX8@Zi1#3ls2`e zf=RF`v*`wn+{yAzHgT+1%lJR%Fy6!0IT|PlCm2FB@3cdic2YuysrjyVuwA36$@;F5 z#gSuj5w}hJh{C-)izV<^VEU0I2S7A$Q8dD z7x$u!6|%sRKL|z$ZpGpL3M`t*sx1|u6wHwE1lwnn zKx#c*yRGmb_a3rkA?ABH06rESVM_OOYX652&`uY}J6YcjGU)1z;}gS;xka#IAa~Ox zNF{r+2Q%i-NU-tZn*469Q=xqR|C1q~pzK+_AmQCU3)FmG3Z@YX27v>d(sN9?ROuk^ zTI}o9FH$uf2;{y1*sRu77@T()E>K$XjN=R~(o0b%dgK6`SvSHsYaC5oRT}~4<8n6Ro4a|=W z@>j7&2fUT05%QIwhn_*%hD#29F|$$+_Smv`UNzO$)5~E}1`HjedKKD^w^GN5AQBMc z)5->x`nwCSg9hb+af2u3tY$Y-n0);JXQLL4MS>D6RY=b)H_)><02^LJR~&7XG4l>E zEtJBSA#`oD{vW)DIweY$N$1@-7jh(fRENvb*_!&7!hdmlvzVR2bQ z0*K5MYz7hI%ElLxA+(8gx`%WVUyZYeVWovVLi6wjJX{N2$G}rUMTI@#L}E*lRS$#e zW>?MQmAyE8*g40^YE}l4iMufe>GOwOfz&t+ z^_b3VKQ;;8Twr8?ersfTLi~?v@JX&RgHfF)KfU&y9n(Uzh7Wq~^SgIw2|A%90cr34Sb^H^A3pv<*NH_Ung+vaBYvDXzYgNo!k)uG z34;nCJzDkmdd~8*me`Q}p`CFzO~@BTJx|X|4%v{cREWY)dl2LvUcwR#kyr&x(cpTE z&@UL9;d}&q`liXKHBeVWeRC!1;h=_z|4RNgy)uHW*PnwC6=%u}Wvyk-6sGFbsCCHC zdZoXyG22ACYUN7MgY|@mi8_h1-g5}{pH=s$(Wup{K>Xa-%SX~c0N-48;w%imR!-C> zk#m3U1*X!~u;$HbgyGWq9pOG}qg{htg$eJpQ0_)Syg0Dgb=#!Y0Bg2UAf#hne zF89%9@QmF^9okXP2CDVdHdt~q*j5}u*4vOEkCUN;Fr5I^GDd=TGZxB}EkoWT}A_<(LeA-fXgGSpV7-TS%CFgq- z!aCUS1g@Ty zjy>{%1d7$trk{{lbyJZ(Bv|T`KaJH!NDV|BcFy%`j9tTn3Gq!dJhN_?R5JI5@jAoTbQ$cV0DCPQLVo4{>jMofvkDH+ThY1owOwUaDM-%Gu+{A#Sq;VT*HlrESf((g;GAF8U8T zb<7*+4M?Tb;%AH5*gJ7{>}U1FqoIoe%Mw71HQ_^iW943n|k_Gc}rPYb2g9v zpqCjLFVsQmI*`o7LZ9D(udK5~_SvBRNKXanhlL;Jenbiuc51Ad7tV9#A1W zEa5T(>3ZD-$XW{NCOupdYbhMf(A?N(2pu_^zu>-0q^AxdcJ09Zvqi>#Bx$AZWVi8n zOdP?hw#H+^arpJDFr;@m@#!YEkwIcGV+$IU%O{7>?S4ZR0Srgek;zqkDs!QCgFZOE z47PggPmcn-M%zy_td!**KHQh*YgH_NziX@nmNQHCm&U-povT-2<5A`v&~SGOhQt*k zy$gvS$W<7i9)Z47*;6CT3m4Qb@$p|HVFT7nJnY8d110}=Mvf_PG{hi$DW)w>3{6QB z679+NKH$a^a2LDr3^-?J6H|t*Pr-caOs!13bR><2t=RAf$14FjG zWuX~$+pN^Z_VXFqC%=|=5gWH3jqpoal;eodn-(vVlnxZ`am?3L@s3q4*!jAk8Ao0A z69`Wb^bjE^e;NbiRo+{z$`gEa0}|!8R-M-D{91jjKHNzlF14@(V7ba8S@~2}u6-f# zSUrqy-Jj2TQz)w>!vs>@25nf(YQx_hy$oSCFXc;91a}amf%F`7;=lE~i)JHhqm__D z&SYB*K!$*y?5%;q;r{gz!jByud5`AZzqr?LunGF2~~$T0l7+`F+SA zbQ3-#4@iJNqUNdvoH1qAbxj6>UQ#%%FiHh%9h=w^D8eF{lnf0Dkw7Ow@#2_vsdV$o zm9)&~7h4F{A2Qz8{?VUdst7LZ=pd9$^SYDbIw}(8PP+c&lfVdsIY=OSdQY0igVktl zn7Nsrbl>GJ!JQp<>EGgahfTK{HmR%Ep;hPgak3hg^-)er8_kZtdJgO+}@k~d`n*M?c8ipi27No5#*G_^-D0Wi@ z8=Ot}$Yc>>$JrW@lzh13V{Rr6I;TR3$0rfuLyY*)?1~&a8Z{Kwk^=ukKAG0GO6z&T zjwj?`Fa;gtze}FF?j)CaX(D^o1yj>08|5(9Qm$kDSibf{2kk5W>>s01)o{BE?Cpp< zCw`j^3kS)hr|0_!yz*2r3J&*$L=$o%OfXkV$`eQh@N-!(GxNVN1#*eXFq{1$XsS~e za>Q4TfX~H^Lvs9_&F*$Ex7axr^(eGRi>WOi_y?rIdoMPD!m4gVjpT(h$t`UE_&av@ z3Y_gbL0D-^wQ2k`N(_gzkKM(&KcgOV9wQ;suJ^?qNtDXJWZ%10VX0_K)HVTt4gRT@lXmJMGpM3G!!s7zqh^R zZ41yOuuI<{tYHo-;7p3&ZHQ+>e<-z2zrUsch`30wk3pLmj!QBqav^MRRMn3e|TQxQ`lnT zfJNxvu(tPX4}M``AhLdvnWT&O2bAZG&>1#R^5o>(z@=%=N59;fc@OsyY=1b^VK9uc zp9SO`BlYkjv)Pa!&cXT+!5_Jjsrm0G9VvI6dl2N{rqK7J*lu-+7n60O1zFVIF_(o7!4hQaknyDy_-K_i$+34#OmO>kv+c7YI3`zr*>c~D1n>`PU000#~q!b zHiC0?=vwuyEa^L5x!89?AGtp-uK*OB!xYMwr>nk#O128F83?cJ%Z(FXNZSe6L&kwS z03`C68xcb|g)FFpUH0;;EiLZy)GcZ5c8RuiFxhaAI`KVq_Z53+2Z;de48bfHz{2$g zOAFnc-%yLpCJE#wm=?GVDP;l*#N9Uj?&DM7wyC#291y=PwKl)`lmP!M z_G3R=Yy~j~Kprk5XIYfW%kPa|ntLHP+av=>+506(n&h1FF@|w9<*6Mzf*0n^mM&i< zbJDe)pk9Fwoy6}PNg$MBdEm`t*wh?%7E8FZWmKedxt=Mqo%QJ*j<&E)0ZRD{vrG&6 zt{uWudSS|g$a??sX??>zV*Afhs2Wq;fC%KX2g=T|tV|LVcRoqs2ktBz6-uvC6FI z?(V1;FfO?+Lj+h`wi%dm$urTyLq0|lPF9UEA_Exa$iH+BV98ag++GPX#5za@Lmygd ztX#O`B@`64TqDMVw71r(kr$f zCjGy(=gB&#Jrqz*bXb!j8W+LB`z-j9-Lqg3qshh7ke<|P2j0MISgsn;u`@Qdivl74 z#)YwGheZuvQUJ)wHCQR{3$jwOY`377^5La%vGmtxp zjb#J`yXZ9qToW{X&n%$rSSbJ@%O7O}bx=Wft+&WFM|H<2viLAybboWyZ8&M5Y0Aqn z9hEk*orz@qlf*i#+ojCdJkI(r)AXktJ_r_eL)?VLqP*LwWqA#Qa7UhK8~qoiyr5#m zICYb18?u)M5?332j^?YanI{n@)`kDuH{jJ!p;i>+vkvU-4;E(vq0;KPj*_i&ce?*S zGRSsnq>aqhD_*(=Pj0Y)>)ZtFE!!T@|DRvlS+Edt=>AUa6Kt0n*i)EZ6RTG)F5Gk9 zDFtq&ySg0Wdss0DYeBoUfpR|ss}9f* zD*HM`Q{fgH_EMyCHsl!VV3ju)`MJQM3C@y&Z+}V=j4We@o{21xDeM8#19W@2?=qKy zH6)v8hEf3Tb`CZ_u^8Qm5GLav{7jg};LMdFy4LHfk^rc(qRPxd3;A`a8dh=yMEnAboDGOlpT& zwqe}n<(+yOd$F#kgBg<& z8gdtBI??}*N2uyl)R$R9Ef1~jIiNK%gAjXj%8*RjK zK{Z28B1Y6y)uH{sdylr4DTHxcq{IyZnb8`yk?PImYx0{RgC^LY1>1sygSuf)+554Z zuSd2kUD^}s(4pg5Q10_V$Y`J_Cc>N{3=;2ff+s}RjXGj>%1h-0|F@m6$Hl?+-DBqj z!yRPxH!z#T{uM|1=l^vXzUC2O9DrqAqZD?-QBJx-?zprr22hWeQ7#V;{=Mw2lF6Fg9_ zgRIwYF%|E;a}ZLu^BxBSv;IL-*}7qb*M!$$OrM1prLe~(G%x?t!SyeDS{qSUU~(s~ z2PSCe>X+AprvF~SuFLQvp}uU>P zIj=HlTF&lF93}Y5ELM||={Q-^#lm7(Jh1fuLS&JF;Xg8Z)k-g@Kz7Dz!^KWW9W(Uz z1?|oJ1@-uH;o_kj@-`!9ioyO9k^zZBiUjEMpaXz|wv%}SC4=&mkjArU-asp@T>m?0 z1^8(FpHO>9-J-I25SZh5SKpLs?m#vp21*aYcfUJ+bT};9%E_^SMW^r+d;0c1y{mB? zDniF^WqZv*_&0Sx_FMS=<|MR{Q8=Q)g>7|Qr;B%D)gkJTZFSs$=4OaT7ms)XgNSUJ zshAPJ2!-5IKGY@tSltcBP#|eNVeE~PFw+rcIvXSUTg%*|7Eo)sYyLz2(fZJ-zaym# z!)0RHi?=NWa0Y`+!^NKvr(YNnvW5~iueLL7)Ma_DysJQCf&cZ^w=LawN~+@kq~BkO zY;}FNZrgaHow)g@KoS7?qx0$)Dyh#w&m>gHd6a!28(M@CP|x~=xD;55?AO{V;TXin z$z-855H$1F$#V!A2JjS)6V6CZZW;Q~35F-}-hMY}c9Q8i9&I^7kOLe6d5!M0Ibp~xsoZK5e>!)Wc+7Gp|VIyiOM zbVnwKn4E@Wrcx*|gc(c>4aS5S3^U*BZJHc9-JjndzrXgL`+?o%eR#dD*L6Lw=XDbQ zRGb+TnR^lnnr-bpA=2zBMq{BC{V$=L_NE64AxzD8Uo;{^^w0O>5yB0y6=y41RsMrL zAPkWV4K6TUmr^{?-p(#{4~1{47By)NkQq?l?H8MSa1X;OQi%V&wnrry9`ju8I<%eo zP+?3nq%N6MP2;sPJ;HkWGH>_Z0^hdq<2Fd4M7bNBWV2B+e0a`bFxV%_~q2LcQ$fs}|iiIUL!l1!rZ&Jsu8fSHzcvr5xMtV;Zs zqS~l!)!qbgdKQ|@pu(`&yQ}-c^1?}a-I~TA9yeo7gDaCdSaM~$qVp7Ud-qP@SnMgR zfYg&8tMbPx74(wvz=vY*qZ4~Qj^)((qRtww~L-&>e&% zz`#=7xf{cRD%3pAa{UWdi?@F5Y2ngfXe)X|Drd0jcK7}>3+ZJnMbUgxA;{FD^t@Yx zH{my6c(?bXL17s0FBqov5Xo0Au~Kw}GyI`i20h6`PzCfk$_Jtc@DR+mxnMW+(C((~ z={FR01*Tfrk07JeoxA9#x!V?4Wt2h&kmp%`*dyr5IatvvkVP-QEC<^_6oNq3A&QEv zEiq1noCHW=<*x0tMDu<%=KccLWal2FOPawFKtJ``*<|UpNvQt$@#dGWiuMu;EQD16 zJKq2-)!rOlGLYYT?5lfA;bH$lbxiw-wsIOP;5bxGr|b2{iOYL7Gq1p3q_gTDex5Wz zrR(j-X_Xv9H4U%tX#S@~WvFDd8>Nb&b&-Q7k(gw7q;f{h6f<*Grk2Gq6!r`Qw9yc4 z=yajol?;!gUV4X$z~ohvs>G z;GVZs z598a#-jKfid1N|tuqL2#J5=bAJMiWxSdm2AqW(8EM?%0rL4QsdEw~*Jjc`5GHTAqQ zTa*?1t+zerQH$DZbKhTIo{Z|WJK`hjVT0L}yAD9oHDH~D>n*61mf*$7E--{NtD_}g z)t7)Ss`|=)2d?atCJOj3CwG>u55wfZObrIHVnG6Y+fEZX>Ae$qv!k!x)zF#n)p;h=*ISP z9i%r^fA1318qjZ_m0o3jsQ3~!uh%U>R@E{B^vhwt3__#QzZ%kDSw=%u$fsSL<6G*t zBxRPy?BvrOBXz>;J>$T(=+pa;zkj;&$0glub7vknPoXsGR!T*L4&6UZh0mNtHw+^?9tiOS(pn9gzay%jgjt*tZB^eY|PgR z*R5agFS1yuy>L1VcxgfT?SHV^pl0X+h5;bR z1SFoKS9yh^_n$238D4ml)74z3pGS)Dr|S$h%+=HKj_>>_pvVPRk2DIO-iRXrMbdjC zH_h-_q|Oya8>t)hB`Q%W<4=Z`miWrn2_g$N%`o}2^_Bf)qnJdwCLd7}GPK@Zt@QCk z3fSPQl?Bw7?ZB}Fzdw*vP7L_f6lWI&BOI%r1tk>hg0Z*b5Fo?63$A(UW=NqgJ5x>C zz^U$mlpvX-EvpClj4Mj?o>t$#4IU3BB>vXs(EMU)7XM68 zIaKNJuNb@#1JZ+e@?XMw9}bTaHd4o*LwbS9*O_8og_<9F8)@JXjLxlm2#p-{U?xSC z1cp$UO5!LP(1#v9b@I<>@Qe~hzz-Ox?18qOH-P6mZ4tOWi86iBLC^aTI+=q3U&~=% z(o%|9dQ09Sp$$x;3Bs42fjrs~DoDP6a56t|_UZFb&K}Cm6FKXYi%4gun3mOQKcBkE z)iWFzk-vI`-Y~8ph1)v6GRkwgZU(y=yfZBe30^Vob1ND-Bx*wjcs&3Se_3WO;W6f{ z-QHbZowUjeHo}M@FfwyfF7`EK<#Z&f9MbhOfB`?{Y|qiGvRoF1^Rthl!lnZ%?&sUy z`X1YI+EQPYV=bLD*@vDRgJxYI`$6S%a^&W{ldr_;#m6xiQwnZ*snkF z;(2KN8(M~RhbT7EGiENm3Pk~sT~6`^+jAlW@C`laMZwC;7m2j#9xyZG^`r!cgpq{F zr`&ScDO7(BDf#S@WyTQR!>U7<+`1OfK2yv4UAF=4`?E_>UrF5tkqJIma5HL7=SYs^ z;|U&)2VfzN&V)2NC`zB&88qoCbaw4|WA7{NyxfL?z-w~~i_`!+wlY}@hF`ZiXzsOh zr*%C(0~zW@9}*0D2?{29yGC;Z0z@wb$e4q=7Nhl#=Zr@D}^906_T<-#<97 z<1oiGZ15S7adrI1-t;iN2rh&=!KL{Uau`xP@YqA?5JoTurA7Of_C@=l$E$FoaimU{ zJ^vK6s1KXX#6Urta4A5%Dswju-9Eu7gHmAqb?Nl5h-UU=A=-)nh(;hc#Ids@M?zDbk|ivo#OksFeH6@l>chbd+L-7i;$JV1vb zT2CHGa!})yFBOhVctLOQ$>j}{kd0aUP6Mk9T^Sn6wt>d+7(f zIg7)2!Ew3QAC^_`vO7RA8NGv_-$O6OQ$s##g_(*uRmP*44c3xaThP^MXM&DrJep>3`J5`c{FxfGoa7w1rg|Dj4 z_{Se?_G3^U#*hMgnFz{AS+h!(_dQGfaNI&T{m-?AYG&R-DSwCO{(Np%oSMqW=-g+{ zBXrAY70Ko@i2MXez!IVL6+%zlB;U~GR;h0eijKAtZ44hVP1+KzB1u!g1_p^c901o< z{zJmL)ET#ED}F;UwZPG2bwRX#0uWJw{AMNB;P=Pa87@(KH%AVzZ)0=P#Q7W7yH{gj z{!|hQ>aid&Es}+mKsl~~FxxQv{)`l=K*@NV{^j*(NLZKVyayQFxMbCx+EyN=Z6xLf zvioK*I_w;Y(cxcDh_AvE=LWQzD?tqN%QOeXSob5&x3Df~7#NDWG-HE&Uaq@B6|_sl z<)m;OD+&K(cw7IDZh$yjBj4%+JTew&;g)4l&M=7W1`3eY{h^Pb%(wzTK@a9fBDzd~ z9;Vt{J&&Ipa;R1D&!=Pe$5?dcpZ9pXz$(Hc%~01(bo7N1@@ik)*2saai)?g(npK&? z$a(-XrO%8+rDHuu)J@ZvjNHV4SH9bli zdo-ZMR9s#jZ3;AxP0=L;ZBLqZ?Q~bikwyV7tLXFiZdlTN;*pRKXLKQ4dNvgCE}l*f zbPq~O2>j&KcJj!<6YJ7|m#NMh9pMJM(ew&&4Tng)ZQrRorn06>N6f9Hu1u9n^rsl{7GdK=jC6hf-<4T!_l)P}bxQDpC~q!mahY*lVzRQU0{k=*R3 zr!HSr2|4TGiVp0vj?=8sj;pSHm;Z~qUtl%W%LSbAs|J&vP4+>wYy9fmS3o{u5nDg6 z>AsP4z{@+4;?j70H{$$m=eH2d;_XPjHlW(2cC!YvAPdeZxBj@yu!tA=)i3H@$^-nL1!cA$2j#Z;mEHKh@N-rHap7R-C%*$YB3|MSWi7 zpB(ykOU}8vUCVQNW^mj0XP^dxqEsgOnOR3xtO#@@cRkV4#ByVx2TYImFOJEXh9x$q zH4c6rK@X#*1rw25*lBPW(^52p?^G0AF`_}!w`fmatx6^-4^rf=Dh8{a+~9ctn0&$4aLvL4@kd`YV5$5`ykZaaLjz%$M3k^F9&n#t1*`4Q;oMA8OqNUst@BR-h^2Q1xb@&LR?1Xwm)y zf)a{O^&CZP`&=sjHDc+b4wg4{x+1c7FJ7~+w$>JxxjHYnk4|!;o%@Qd3t0f%HP#b$ zJ1%Ti(W$~pYmjrxDaFtlMoF5+o^O5SS1?5-TWow8{w-4? zR+fF$T){f=*7|k*{dYPPLcCnoKvS3q z^*Q94uvs&q#=7rV-|^7suR(CkaOKwJ$k}(071_Y z?%8hatc~37x_ET8ugMQjS7oy$kbF>>kj)v;cR980t6=fIB1|ara0H$4J>4Hq53f2z z^*Ndtx*Gqm+(zwJ?Wfn*Xsp<*+&uyD$$dp)LTI$FG1)I#LMK5|JiafxV^#iFmj>&# zMIFd7XCTLLYPxM~+^c~q{~?X>kNpd!PV}-l){CC5lCX}^2F0R)1H4Kjeom{Z;#ZgC z{`O3GY*0Iw4lLiZvrX@i#LGL{j%{?W0vyVx!o^4#>taw)HT?vo21Jv@XsYofZ)!bi zb}!H4%)02NVvNUVz=%RyxxNNpO+yt~vEnCC40!We7eDu3#Lw)YJ|da=L*0r^k?v&w zQ03}VjqagT#4^xM*b|Uz4YgcB4NDme&U=bMMt{IR0`KD2|5Y;l@@cYC2vM1cRNdbY znZD1rGO6makhdrd^V-pzXo%`POXZhcN`np>&{g};(E~U)W>+!KCsKV`8l%oH<~T!R z5IaEYsWf7T&u#M7{xW!6f|MyJAVXql?hRwSSEtNN$uu-bA1rcvMM~0ny8pJ~xK^Gz zq_FI*F1=putZa2$JJ`nP=$>c`(1il&eOfuGUu5G*3Lp^U%eQVTaCLVG>+9#rnlh@oHA>*q2{n#<<6a?12(2E~*d%OU9`$||?sZN8p0&|7(sgAyi8~Hyvae>wd2ANt z{H{|Y?$;>^gls!bN8yy2fibUYu-vFjYeOhZ`6BT99`V|SXxI4xh98VxIp5%x*@OR9 z;VK8{q#=nts%~ZtS9`!pmmK^uC67MMX|=-9kF=8fE#JuG*HD zN^8Ep`QIbnbj=)Ky?zMV!HKT zjA~rc@_yq5B}+GH9ku-WmgJ*A(0jEBo9_Sq@$@iEcq(=EhOSqZs%R0mYY zS$f}^lCyykR6=ly!ZrS~8dR^oY5Li)d6vd&cpuTv$|^Z|i=Ntoa%BwePHWumU4DE2 z$yB$@$Nuege1pqh-xO!qlta*QZg8Nk&}Dr?M(ln?15vF@IunixHS)$q&nJH0`WjTlB~^Hy6(uq?1}hAZg%B#tl7=A9iHTiG%Ko-M#ahue`tq z$LKRoxkV~z&NciY0efZw@(yxaFEM+7RjViZ1P7MS12xOZdGF;Ly-D)6E;jDV76{cU z>fl8=!|d;ho*rd2?0x^<>&aZENA`Kwx)*^lz&Diw{9AcV=i$;#5#fv%rMT^@5!KK& zzP0;Qzq;LbP$2lU|4qeAE@SP9vzRvnj8FsP3vWx5`{9X!@4dtn=~SyRNN6es_d-X9 z5mDXyZ|;I`ZEY%VtKlBd+ZKzqe(#`_{v9)^TDGnA*$@E*n^YR7(^r${7kI9%pNG<> zc%gXdWaqDH)|tRmNek;xL-{Tn+DRB6n$E3ARI6$ECDlU_^TG+bS3~)_yMK&Lq{#_( z$_5#IB6%bJ-s^d?-eWg?bfm0JD_ z&c+pcAN8j9?5-9?9d#6C#ktmz7)8XaHJS@Dd(!)}babWU%-PT+0Y&WcPrkYOXxlLJ zdt`Nu5enn#&=X_fWefG^bW(}}p4sGZY1(^VwRUQ(hK*nXfB-e5T7pn!;B z%-Jxd^F6W?B6x%3A^38a|He~VW!c+yNrI^jpS|y<{!?qMZJTjg=)O$ec*>dw`Yi9FA6=_?=R>Cm38zNiK+aGO<x=eDG2Md;Ht2@=C zCH})1NVt4-wzXlUM0oQCx^m9<+QctB;)17GrrteBKC!Yl)qQs&#bWMySLR+d?wO#C zSnBAFLJt9I!{K)D1(Xw%fNU`Q0Uci@?X0SzQ@xKQh8p6{%{ncy(N;e1EPu=pWKcqZ z7axZxrli*FOH-H{nMCJ{Sooc$9hBYW?|5XYqtMv(&FWGJaE;U)azaz)w=O}pT}Lcg z^tk}gI2{G|<4m`8>v^7{#8T01I(;ustcJ*r$dImYgnF(o?12h-M_K>5H`l(ybU$hjnN%QQ=ohHsS}~_Z2yLf?4+; zJhG)xaI9(th4Xn)(9w`3`$MtVImwiPJeByNXt1A63N8N%rZESg=}0)y^cdagO$2QMg?&i8@Ysw5dX4 zD<43xu_~OO8OR+lx}NJn0eM5oq1_DZ%6=I^{#0!IJdB=@{%f zS|pjq)zb>=YQ-jazoENCHfc=UtSpoX`c+Dsk4NWa*WKZaf0~MiOrum<=Q@@lkgG}g zW6LhSs}P#j7bzV#?|W)Q=~!8-Cz;xC4v68yZQW&%Iy zo2RjcqvK>Bcl1M9L%fngNDc;aohzTV<;=l8_sD%v+&0sA0*St3obzMAvv+?HuW zk-I}d|70#I4cx4ffoJ84JN8rb0s=XB$(FFOv64^jaY`X1&qI3%68d|+Nw0DicC9H= z@+vVdzVpw4-7<^Ul#4t6)_D$@!H=FvUXL}*=k-m9VzpV1`wl*yIF?2Es40f-2ExA&$wx6tQc;+L#`80n!?ZWEx#jaCTGBBL z9p&Kl#0>nJx)t*J5in6Du^QwW+8g_}o}%g4MpOO6kz+$NpT-MN2f&uZWII*73$c#g zM9KP3jXl%-=JKcSu9=rw8z##Fvy=D23^wANoeQgV)4FV<-Duf470j6=ik@!n&ij9S z;~W5ID=jpuTLIWv<9P`=WnJf_NqaQP&J+jrm-}OXwX$Vb&umsWgMwO!kTWrcM?QK*`R;2M2rYb>#DI8|8gL$9`BjRpkD4NYdw=j5#yi#icq| zG)ufCCdzSt`YQl@uejCzp>-dG;5+2)(btQf?x!qrTJ;}Ix4i6}D&83u%g=PreQk|f zqrsjf9N7=%U49fXiil*~YO6@MI1TK02d&pb=)7bXqRNA-WV1f00XMTTMvamW@T6r;u9NAMitM<@6{V zb%jPeH0qQ+k^JiznN~;cqs&@j4`S*5Q?`g@#LhcTNW*04m@vFJhqGSplHDZ$=9~rp z7zw;dqd;V~2>OJS{=OfIAN}853+!h#rz4`|Nq63teQPr ztd)zpltePcbr*a!<8$j%Jvz)*X>PJjUN#Hy^V#AUT=2WsF~E2uQw7Ez8CArufIbH> zkgNM-pm>Uud@n6q`Rn1`F|<_7qkAeHvU9l;(i>SgjPZrqzL17&>&3$Ud6Ui@t)()B z74F+0k~*R$YlKPq_zK$9A!YCAXr{euwBaVw*)9C^IFA2X1Eg=#oiJ@otF5}j&4 z&AquCKeMS^$wo&yJeh}`fktEY{0{*IYgEwwZR)0ad^h|$b2 zrj`RS@$%0}<(NA<#cr%2zaa$Ro23(UbdNsdjhu1q31^%E=O3E1^7>jHDw&V=W5=3S z0P|Sn3HBH&QAzztmD1nc+${qK1V;Rl=xQd0s-w*Ix|slX7`jU$h?L}r>eVF3M@OS? znwua?xa;MXjiZa9Q0WU?M9=z(R$Vvb@AU&_v4YPA6Vz#%n(&paJGxv?xx-Tp;fYz zbO}M8-k=Xk8p9d|*Lw=2)LLRPnL)DKx}xO^u=Zm$LC9@jV+$vv0LNf_Ea5n~akPnu zz3q3lX$l0HDoCsYMxoaL>o>2uwZp_fQ>}wWtK$6$N-D=l@Yo$;KrlU0BE9%wF=b1N znko4I$on7+lFsf;Si}6F&R>9!dl$Wq_`x3wNrgBgNurbJQp>g&Z1rz zSLqR$c{moOjU+06Me>#I!b{j1P6jV$0f*2RxjkiN+a-tb$g;!%MM*3Dfc!4kRgl$K z)p^za^g;2O3yqS&`p_b$MF4Dj2=(E~+$c6=!z}rjVDst8gBzKn54sY-Lusb^EbKV& zn2pP(M`gEXF$xW-Kg$Pv>92}$6pm$?0{HK3~3`^l^x9mPa#bgADr8s;TL_y z=q03ue%76mW5axNXmWKGrt6(JXzz8O>tG0tvaM!iR%@f9rqPe(ZXh3M*gFeNyb;fL zuZ=8{ckcjT%RC|JtIj8V>s>-nOC_xKRj;5S`QFSqwF_(9GG1Zg~<8=+Ii-#(Zo3!l<=2){kbhsJm(;cN!x>g2D4h+a@xb^xL+2CX)nz@;WVR12rNZ8 zL}(c2+h(v=tSJeD5w(*L_qw^{!nl|Vm^Zy>A54Dhin}^e#sr_$s>hJ}0y`<^1Zpva24wFR+(U zrxN|#8IsdwVSy2Ui4XHar42i-HA)5=($XL?A_pzUkgI(3P-u^`sbJC-hnhO(<(;ri z47CslXoO`YndP_piurFR8Ac9U%eDbYtfA%lqxc65jAHfM`kHrL z(v5L-)1uOXCa#{%rzDZ2Ex@Br|G}tkVSgPiWANEPc`+9B@M>n=h>Z} zEK(06`P(%sMFIAz{LC$#ESo)Wk7A?Iu4 zZ;S;5zaq~09#RxWT9z(yx1VIr@j*AAWm9s2md;Z=N+} z&YzU4s-g^K&Ba231uzWln@3k9j_p}^3(1G$Y_qt)5l+2KGhP^H*+2IY1D(Lx@%75&4speAdPmMmXI!F>_7&7{0`l(GK4cD%9 z52&=~S7(aSPHX+gpqE{P712bo(dH#k7`bTl=8rrOu=RgIB);Z_fftz7AgP~ERRE$r zKx1P6n|^Bl8tl%khL+73>hS6Qdnt0xJVG3#Tus=vykk>b%#OA`!YqW^dYc-@&!j1A z8?$_$F5qq?-%`QqRsJ>*Gp)3B5?kd{c>(v%|C~5k@m^~@RSqvIuApFTk5~TLq(Ue# z&eQVVS?ej`2>^rE1T;#5=ySdfKq1O8Zwj#2e$Xx8;?dgP9-2knyZmkLKZ(V>{;Yjh z+!It~9{>!-A{ z>!p?V@KTeW*VfqCP?!)iyyTxABTFkqBuHa5Om#a;@2{=Bq4-n7f~eW|(v^C_?$P)bB22o*1a+800zDM4gb*#bO`XQ0Wn}Q}N)0BS99(|7NGUCjvc$l?`+C}*y7=b-Z`@T^dv?kgM#~`y zbSB3*>eg-cJQiJnZ+=eIa_21pXG>gMpd6?^vii*G|Ixwn-}{bKljTRT?=Z*wu3Ajl!BkZiqJDXPr+;NF$8C z6BDzttGeDN7!>v7?7PeP_A6l!uXh`lK=BTr0f{D|*9;yQADhAD_?Em22yU-B#t67F zI8cts8oAesaI7qF{eC}Qs;1WQ*Z$x^TWXu$Z)&RFq1Dyg<9#3G?V~wEw-`PnnU)#I zVj#K(wYppD=YmUioPWM_FzV>)Y%aulH$lh;`_#$!b_?Cfr!oJ{B*WiEs)E1gA@zL| zO&HLv)q_^*ak$6d&#^=82uE_Fvj7DpBY$^Tamc0R&M)X~ntR4)(k1`U*R5T8BOX2EI#5DnU)L+)HLaId;!Oq%>Ndm?pM}=(-PnG?CZYyrl2?-Xl zpM#F9@Ns*}p+kuYi*#v+ zwx<>R_$fRbdn9)*M9SW6T!zxnTNvGZy$j|k1zi`9U(MWSrr}juV>HrnD0>RaKv|R< zbH4pVZznY-PxSUiDTVVMInlCm4G$ zX~D1f3ZIIFOeo|IJ}^}J2-H&yns(-QS}@hH_RtW+;If8~eZtXSlCQR&+B@n!Le!jC z^~N=aYm?8ON(XkTru9#?elxh_@RP`X8tH$a_WtVR=YZfAxrA07PEZ>x{wL*Rdq&Nk zx+l+t-~$e~C_<(72{HN?N>p1|;oM3b;dVYZ6;<;gVV47*ZznLG?`?#pG(G*&;+yyv9g*@x*{bwyj+)H zR4RFKK&f?4O7T_PUSkxd5-{?=-b-A{bkqoF%r!PV3^`>3W8QjqC9{PrCJ8Q5w0UtZ~ z?g5@v=ax?5n`j+-fu)W%D6_M`Gd1l}^0L3jbrYP(tN;B*DUtIY8UtsFqqNEnD-xgv zZHIh8<=@9Htl~7JGb-LHlEC~frJ?f-W`lIxZ|+`@dXg1~E61Gn59JKMDEd zbK4Rx;Z1_t-}bI$XWk{229~bfWPeg;Nz(jp2rX)NpJrT(v2eNhhQ@a2*1JwWRdjJF zCqPs~s~}ax{3Z-K*nCub^qVgBgc{RKoNa+9mqIM{m9|z=gL2&+S@{q;^4>N|!qMvw z8QG8fnIAtM8F1VjSyBumB(PKB2&pa3I~_|+BJT3=qi@qP064#I_XM2DS`Rg7&LcF< zOjzWhMO;InkcnVdMzju)t>)OZMD>u$dt53Ra|9Z3^Yv~@xc!j5_)M_N!lPBGqPy?3 z+I=nY%lTFo>Ywn$f$T{EIa`vL$Ae$?(nWWiMGeh-D7WWejf?2>5 zVqjLv?nT+LI6Z>-FnRHLE$F-%O=U8GKbXKVHF6jCKUEx@q~Oj{=Q5vOF!8q3)i8aI z)fufG?%)t@Y6r6%b33pIS3EJouED$QVs)S z<0J(u8#D_szkj-!pQ>KeL*Bh7t!rPj-RUW0%-J~F4O*xzelV{0t+R#n$&NAVC7uR6 z6K^xwC5=13tw!5kU37jvrzM!U;U)Jb-i(c#nwglpDL`TaR@9%ymK!Ab_p!@cwjE6g zah7EXcjYU(gx1U_cN>mZ#cJBD{ij-~;6|z8dnJt6xJ-A9VlC@HEOCk(+|%)8Eq4?9 zMFVNsCLT64-#

seQz-9}&xtK{qjl6MW2s8!d#cRkVELz>HDqDFm_H1+k>QLT4gd zi8hxQcOqW_AFbsFoKR`6KLNiFr;Ijj9RsPxDk=M?NC>G9PzpNtki!+B@75d;&^XZF zydG6yBR_YiA)A$_zv{ZrR%;K)Uy2`*Wb6d}Ki?)C2vdSrr5ik&F z-IwU>^u*QYDyZ8#wP4(^s%11yI>^e+80oIUGAM-H1v-TjWlnid(0{Hpg<}-d+a@tD z4d+M-^uturQN=R$IY;{*+fb9XCx%Vr##iN2?W<;@$jY1@Q|Wtzg3 zthtP)naXs*0O+c~V0bwr35UVOKo!ew<^SPcSF5NeJN7Pmypi6h5JFeY&+%`?(T@tF zj*tCYV^Gn)=64eDj!war>K9?ufjK#xlXGyZBm3_qK^mLE8$a8OdGd8s9gjLd41i8nI7#|T8=T(26N!WfVNVmrbY~Gg4#>j@es*>?u@p=6vr%URZ8XHT z%paAZ{8@-sV2QdXM_f1?AL-$$V^uAir8%-+9R3=A7mm5dF0R3j>wUZk5*fzY)m;z}E%p7?WVvdE z(XmulD`K1)9q*X>cx*W+`gbyDBeVag?^VzJIns4Hwlwj=B8Jk#P0R;N$Ez{}1;C(; z{_L89+~Quh?laraA9$s=pKNB3SDcU?WfU)FRF>Ydze-IAA4&KRyJfixcByZOte` zG>@Ot3e14PjUThUAZh3;%85M~lnz4)cSFSzb)~Sg(1pXH)TocM&suHHPh2QBl=AO8 zLD-#$EX$wPDk79?({My7+zy}pHj*kaJB9r+0W<^@KNx*zX1xW`KGEOpa~f$3AilRG z4E1&ysiV-JPd#cVdigFc-Qn7nU{7Hn$kx0f0dogk=TBCO>ZEU9Qq@Ovq#aIEpBvA$-;Xend@gDhiVZcg1G-$@%}0mDwTmg^^-az42Oy3;y;if4v*jg-`XA^naLD4ug5?mAyh|<{EVa! zKAd2?^jGrjw33`o7V1k}()#YE~lVPuFxERB9XttkMa>4o; zcJ`-oKU%ea+@-cV(AGq_lJN)4zNSOfk`wYKGm0)=WIY-ugJ3|wR3PZ+vP{@zm2YP?rXaQs$#D6_jX{K`J(%U zsVNp??*)awt0j4Fi4Pz--&~rY+s5Mu0&Xgl>W%CKBtwWYd^oJ&hh7VK#a5+K3sVC^ z%XRl-w7PX6o&Vk10L#anV__a%I*bgR>v8Z3@!^nBFo?mu~3oz3GCn5M$xN=h62PS@X`wt6oB|A z#86@vkCI@Rm9ttQ1Ol!&+?!;siJ%X%%?3l|ex$t1b{8~=LdYx>L^$Od z8MvxAPK?J}b}&Q?t{E?>H)~VGSb3Zca!VMvyiy>1z|1i8N)HYquqhTsp4&c2`9x2m zOmRT+nJktO0t*ET3~fz-4aQC=oDw}XN^;s$#cN{x%88v6-#?^XzvrxzC-fj6Bqzic zMr!fFq}TYes#yinP0S*uw0V7((qdDKPj%wx^Y&49j6()N2hENmlP!2je$v}p6*a&n zT(7pQv#6WPXy9{H_TIG$@_i_punn##jk<>h8t#FE{Z2h(W;~i(` zBbFKaPVmn+{Jo^%?k>SghfEb)Rc)3;FevEROW2+xE!sQ!>Aj~Q&to;1w8J~HV~LNs z*`B)yIM3)x=E?uiHhoK(jab}Jw5y>yU*9;7U8oW!qBy8|RIe&q7eZf=4}}ku6OsWx zafsq04F{*uXW%X*4Zm~}^hw(O?q$BXR%6mjbKgymc_VxyIIHxdS znKmY7<{f#v8uCFGg(A=jr?E&NF|-cji^jfw3^X4n6D$7cd{@*StT~k_ey~8$6EUZp zsbGMD;?WN)+t(o#I7H~n90l~CZF_{|PcnqA+5`^|$Bs=)l}#p=8I}3gc?-M;GjDQu zgrbw9mmLxZ{dnDeVmETSq5A6@EKU@?)?aZd3Tel>AM#TKVh6XD$qlNU|mDae8zSQI(FeQDZD;bYz9(8XzxQh5eEei|m zz!oh&>TZmc$WO@+RDnRT+@IhDGlS|+3WOWf7!0$4vTYL-8pZuDgawbn^v+WF=}?Qs z82!46YRF$AzKKDyTSskguTLC5Ewj{AU)-O@jzV8=tX=-1rrM)~_-KyzdvVK8{CWrH zxHOoL-kbMipdTX$(sNSJ^9mo<#qg75wj$zrc`j2FnytLB`-1S&odOBqMICU$iAm*f;54Cp>|(g z({Ap`;P#P~IlS04OZhoVht>{NfFnPntc~oMWJ2cyMb>>vO;K8^dH6k!x|7CrcTe7> zsvW^db7*W2-ffX%FhS++JhaeeFDno%-cq zv;T{1fz{LkhtGcpp>_-7v7PwMQ{Zy;YI;hUob@xuADXOanx)Hf%GAy4AjhcTM8RSP zjXY;0*S&2Jv9z;Or}@UHdQ$e9tl-w&t64uzZLd0x(b?dyp!t6}T+jv(c!K`Hj+Lgh zM9A7+!+gvPlnyqOO;DIym%1RY#GBX13lKl|lm5L#AW3lhuh%8xaq1+O1)bXse!_Y*4O z-#{M<2nw{&v$5?BRC_D<2tmO?0jRF8sIFQ&cx@qqbC|}r=zHrYzI7orjxs{B^2;V5 z)<*Np`+0_wyZctKB#(YSNQTJ8x3$ZV%LF+-R5X|Z6grz-`;fFReino}Mw zWaV`}>diCvvQ6WU%!`Q!*qoQl+6#}egr^H85shBqunU`jZK z=%E{SIMHacB}BITL*L=eq@18?=b+xSP0wbH-&}|Ydf3OeR@u6FGxD*hcYHgRLXp!>rz|pwz&ovOs&_S-A9^Gg&J0D@#n+mrpo?2faX z_kynBw|}RK7&ZLSCLkUwT+ODg%p(gp<>Ih!i?&SZ%B0XT4s`mdN_t#z%S*v_7;7R1 z6PnDAA{U9{s>-F zBbKDLmO4N*oy~`_(QSJ3qs&xQJy`1I50>P0K+2LpYJoe$>4g2`Q?ATlG_1MMACN68 zS3@0&Lz|HL1Dr?eRn8Qf4Qw0W>0eXk!pQ9)LJTA8gE|GBa0}G)w}nFx{h`)%Xl4(5-2@HJDzH!5+AYM-) z#LmW@;5aB43>6!(>ojz6ntY3v`0n5zKC2;y05rN%AM!7TK(b7BjDc=2yu8BQ-pJD_ zN5rRu@p5}At*0ou9%OG)k2;ck1~%&P^InlCdUhszSWUhIqg84W6yR7IXg!&j6>wiG zvk){Iqm}HIz*vtSpV2VlYq%cD_aTwFbC6`go}~Mi$jN87V`=1qUEe9TnX29=_~!(% z`~`e&OjNFhMU=1lMZ>@3LH)A-Dunon72O^Wq10Uet};_ii!5DpX^~oyNN^+fRTq%) zT*jB5Wh^=Z3x+0Jtb0c<6}crm4zvjH$O!`7&9AG2$GJrpiJmw22CFSUE5eyu=tp!7 z^x+3o%;c~b;Zexqm)keV zIh4unNWG$)E7=17P;7hArCz#2?Ubj0E^DQ={eTvM}%$`#7WePJ$+KT=OB zpQ~lD>U4+T0lr=ed8S>KX*FnC$dGq8(gdPE%k=y$^gn*&KV)cgc03rimjPU+=-n9s zD^%qf+_q^c{vpm{4xgRAq^%=)%i?%^i17TT#=$9Of6tXlIAV@pX$+R(OB>{{H$^-T zC)ey7sCBAE9d9s{l}P@Hn=W`MsfP3RsetcW`_fM;ZE|Vy%XyQ&#F4tfv?bowQzUz+ zFNyW1q6AI(HY*}}>i0GBf{L2JD)Q^xyc|8=zwKpu>XAfJFYkkdfj1AlzZ>87W>Mzp z>A??H>POf#Lv?R2#c__NuOq>6mTT2M0-^bj@9+Z*k}RL-kR4LLYkI2KfuKS3a|ch8 zGuZpztxdDLi9TCqEj&Z%df!*g@uo65^H?lY-T&_p9fg>do1h#@_Gi%8jUD0DDg^-iqO?+IMl5G;KV&^#3B8o#MlZn^y4=vtw;2D21)Tc*XTRC4d zN?3#PJI*VB9`LKKn3>6iN=y--T1W4R3H0cFeY+$p&b)h@&~G-I8$PGie?9y%XtQsf z*^yucZRb0%uD(|^pB!E+eQ`j*D#e|j!^frS&djfUdN_{1Lke?S` z!wa+y7jv-*e@=s12H6=ePxK$AcPg0?xPYqM1`s z4c}so=lym6+bSC*eTT9`Lz@v20U7W?#OmL2XgNU#3AJ&tGo)FCy&?;f1rQSaQDNM8 z+Mrq!HgxW5=xvjl3KIomvZyEI-dAha215qBd6=4Ee{!vlQPhlR6Wd z3#Y7MMerXk>hNXno<)YChY6ya-KG~rRFwa%?}HJsvWt)W`oRz>u7hWhsR6k`LZAG5 z=ukFgBKIDhQ6P$&ixX9ZagOiaRo!;U)9a$wmaWXt{l`#8sM$h4Wh=onlj!%HYywOhy`O6enlRwn zQCX!WXNb7_+K%aqb6~2tS96quL9!I*F(s}_^)_)OD}JzE<-K(O(X==R!ax)yyoN88 zc-4BG!W3ucHkp0s3-Nyg35e`aMsr^F8Xw}H$LES8NJKVK+6mAZ&uM&BM2h2q8iw9D zaUxh8MiV#$T$)tUOGvak4M&t#)p3)ziW9)3a7##>zprRyf`ws-JF+4B<>5ntK+i&( z&%HD_z&Y+hcg@89Zwn^#4n}`%MK#Fiew9uXCw;P39vAqk=uV|4VLBK6Z)_6_*Z%Sdkj9X zVxLiy|C)D*Bz)jlKUtoCmB+uz<6q_Ruk!fUZTS~U$|Fmk7zr3O_pgim|C0@UzgB8d YOZ{WIiuBTA1pa5W!TP7g($(=PNHq@^pg2m6VjAFa#8VfKVYIUjA<0SU-rHm-z1(bO>HJ zPoldwk>m#6!-#btUG!EJqjLIF1XuT8Xx+SiQxjETP(Q3Y6fOtb6X|zAW8;4h>gxIn z+ROWx50%Pq{QgVCUKalD1n5bE7wMuWj&RI};N~serPA=CN(KMLr@J%Bo8;w8`V%Gmn*JwMcoQA}gt@($e*z`=5&r~q zZ{`=MJ4V}+fb}MMT98OCzuS)K@4SJvwfAgA5iDgzbiz!CB&2o8;OfG8Giv2!lz2^ch7k>^aAYjxF6ux);ZPDq! znE%JLr5lmTH9`!$XIq#bjG9x!9F-v|tsi5iL_dOywGNT0aIYUspnlN#$K2`vKDQV3 zT-~Yrq)+ss+Nb|-amk$E@!OpX5&Xm1F<9JB5pa8!Ou&o%Hcb2%_VM?2;wM^PX987O z|Hiz3f_ae~y?wEs1WhNZhX2fi6#n2r&_Cnf3+wamxksU}C_DlMhoJE=Gz1B!+9MW^ z#zT-;c{B>^pa{dEQNK(7|BCzHl#6r5x;YW3X$va$e=ZM9NgfGDJ5U`Jj#PkP348wK z=!k&e5d;Jpfq)_5D98Uro*(gp8f@Sw3`zk5NB@59Lddx;Q0p& zbH{pOso9s{>7^>>=t*(~|MFX~Hwlb&cXuJ;e)t^J#|{5mhWq8uf37z?!ISt0OZX#| zUo3$CgY^E=?i{fQEF9;6fS}=U2Z*CQQXYauA><)SXgCUsmB->xD8>Il`}CLcpdG2v z2caYnK@j8#5G)P}hbSo_@DK+)9Pc2Hh9lu{Y7G2uQQ&vGLr@DQMGPGAKgsU?!qoPx z@t0}-C+zM&L+>y539kT?S5#C)LGW-TJOqJ7q96`v6bynyI->V7FahQ8=XUr1f1mzR zp1)U}{42Zr7xmJAG~Pk?3iO|;75d+^?$2kPpFv4?FU}(zy4j%qE^iqYPIzj z^%oq8b8wJHAR#Du1sp^ki$p+_kPc`FT%JI{!tvDN3H>8K>|rDQ-_~DyY3x^U{#6`m zQVYzz^26)5q^*T@`jx)b{&m&(ceqyhp>P)>71xiupJ<`~p8gNWKXg^UFQ&F?d$+%O zMC!w@E|cI!&C#CJ9+E!AK_37P1{vsRTKM(N+6Gxz_9R!cL|?fgYWDE3*#mY|7v@6= za?ErFmgFHkW8J{nfJw@Tdwx3Z`H9qVhjJSpHcR|+R0$7&6{*>E@^lq z_>es(D4`OV|4z~L9#pLkB27HeF;g21a%mM!4H(+SOnlu|4wx@)Q|qw(e#F4&HbUf5 zl2DkmIRlVIeE?vDrX&zq+B}ODpgs}+`=%smTEINZ=m3y{AT$9r-h~*Wt!u)})5hLi z&ZZ_NrUhK-YPf@eyB|H$_a6?66P-5-n$KujeyF=Tr`&MOixRTtJ~5;he=6Tgt)NS9 zJ!tJ)z`RovFswzh-hV4I#?t_LGpljj;$YlW?+(B6qzV18&kIvr#7vtUaY>W%uDJT| z{DcmH@{+GL9u1zv%QjzyGDkeiZDUpy2cyRl(+7$@24=y+Lot#V(8NnI4?ADFfoj?b zjN!A9*i7)g)}%kkw9;<}~~H(~*m%^h*?a#nQv=9$dC%JVT^+ zjJPu6SH92llkVMWwhH(*D75H7$>3cb`V_m^vZLdaW3h!Yk;KsU*a=0f_NaZ~qK)r(&5h%$zV8>CrzqtwT1&WxY;T9o zEZq6F<#f*s31uMH=0s1ntL{vuB#vk-$o2|w#rAe3(7!f?Oh=0am)X>9f4CLRbut>X zWf{4@L>|HnWs211FpVp+o6eN*`nNy_^v)<2$y|8Tw)eB0ISg=)Dxp zr9D`(&R_nSA*0I05ZfovV*qV>gimmsK15f7gXp>qe4^0bls2!i%D$Coa8jz}##L#i z>b5)ez_(1%HC(yyKn$1Fffx~yD_m*1!)>?hF9$t+)mvU4w)JsV4merO6r1<)^Ob_y zb6JYawkw+vV9c5h)8ncni%o2Ya5)d-Qh&hPOdMOf38zo1@W-S#mL02~9}Hb)h&vrQ zq^cqsI5Z%Vc|d|zVCA4wZLl!#@q%S2Usi|b6mSOLrx+z9a zrJ;1CH@q?~1QmfCiOV2^ecRm!wL9;;b)i{Wj$(lZGzfYwBrp5j1;}L+H0wk6GL&>T zvTV+OE9&3qg%Im5Bd zSpNA^UFrqp$jJMO?^P}5l+Q|YMhX9o_c@SZ(kfU#JFk*uAa)Cdlw$!DiVP zF1w(9Zc_9@AwszZXorT4Xq*YHxw{Ax3r?EzVLf7WH$~smp%eg?phX(&hlif8>xV%2 z6FJD>?7s49H>(G=563uKXVI#2KJV-87t2@oQ<(^@`UUC)TtuTcJlGHx27P?>wjH=s@%&i63pOdU%k3e6;-o1$yh5g;Bv& znf=B)cj4L1jZ-~e%1#$&RwrB~#w^K~r+sf%;k-bhad>~+Oj*kU5@Y{(`@)E<{*WVX7?RGdAqKJrLzb33g1&V0vF zi)S|`FN10x34Comh4Qie=v>howD`$QBtjtjWTS_KK<%?I`pR3g>*D2GG2A!2b8iGo z-I_KP-u=)vPO)N@2-pW(@O4QHmb+z6@75{mX3oXM68J{66S1<)qmdXrb~Pb>+om?1 z(fN7CHSS~Hn^?=!ukd_dkC;7~s2W}vk|qykIUe61d{BkC2`CA2D2o=&7zAe6_yK@4j+VV7yWQ{(Jsy?#; z`i(Dy?-#kj;3;@YoGNGJBBNtCeWo2z{14Rf3` zY7+3Gqp=iZsC`M{RRh^dk1w1xd{WUj|5l0zIKPq}tMk;oN@-uu+5JQj|HtP&?O%U4 z_1cbE?PoWOtG1}@0lCADN%7uxNc9o)7`($?E1##q^xU6!pe!_BT=Th|A9C7HZ7%z| z%Oa+-K?hxV@zA5u2R6YUw5=1dxtW_ybL%_T&Tl7u3W?5r$m5D$C_Ov*a#^>%lzVGX z_eodZ;SAO42WjLox$qB(PkhED0u|>wpADA~{p^sB^!p8OhpzCAtd?ELSf7foTdAfr zxT4@?c>*g4~`EGedKz5}r+QB9ZQQ2;Bg~k44pda77sz}VH$v8Iv0e$<- zO|I0QX&GA95`NvE`2Ak2Kw6uW*rm(P$gBc(<2TFFN$XM(x}!;S55B9Kj<2E~H>6rk z`UgMW#c~g`Hr4uG=Ppi>XZom>R?MnrH4^9opQOBX?%AF&osY$r80M>!vpzCvEKFTk z+x~KXDJm41-YS8TymiBi>u~=el^)^H34t6bye}y2#fEiBl$!8XhF$FD@?hb1e`|S_ z^p_Q09^hN=aac55ASW#&S^$f>mR^^ZcrmA!WU#+bPpf9>Dmc2uw-)x?(Z)(drV4y( z+8uUY3I4g^iT&#)d}a3eBjc#X+MxOS9web^MLL=btlFE;Z8emY$^06^Y??b)=qwdd zZ={}h#N+l<|KWMd;{CD)78%kJiC^}c7%2B}nYPs|o}Zm8n1-eK0;PU#i!{Ot??>+$ zj=b1e@>H33&V1Qie;oukMW)F!dbc#&KfbKNgulm2{$?ge_rixqAcx5KBrWMw-*s*A zW*e1;+LT6JLzxi%Yq^J;44jz{8;7;}mf3&qN|f2f#s!r5`m6YFMw#`^9cA*H@nrgv zC(l_q6X0$u3Hn@b*^Xp+D*g6?aNp`{-4b6%o_n`+fdq}L52PbSiOHav=R!8l;5aVR zt!|%k1prw>9$XmSaRTgfT2Fev(S+sryi@?X-tU02o`2e<7Ngz%ga8GQMs6xCAn68= z@Yt0HVB214VWMGJ_9qYrM=>PUm1B%|@~%~Z4uS&i;M zt(4|#eS5;Qb{*UAMQWZII1>vZPwoG>5z==epxHR9YFx`>@OnNAtJrb{Q4j&D;q1@9 zeDEdTb$`Fn&CyQyg6IXt7TItHcbU|V6jE5$;?#+YzBsxw5yKTvi<<5Qy@Rp>Zpe;! z(E>M9F^fwe>ZW`&PEe@zIE2h?otG2}lac{t$b7Nzi&Wj!w@loJ_k-#w}me_>` zk50FXR(OvPLmB682AdupdgDg#HuP9xHcS)_ya*lc7l*fzGC!^#gNA*-_=wZ*f()G` zvAnrk8|Y@f@_znnR?3!*PE*i9CJkkk`HVKM)p?Y5d)vvHxVp==CyaU90U0Tc$IbDj z#zS=)H9)#%?dnqI*VnIWN=+{=3q6X79G1Q6W)oj~C_P!a-4yeTE3^m3I;8xp?Ud^1 z`Vj^0!lTEI2InPb9eWAT4Me)8UJ4 zsuP|=P=rX(NpiwaA#?93l#r3%ROhPx zt^|L$0^QCxmDsiFRJ#2&m4Y-Eky{D(Wi2KW-As$sgKy27q$ zJrSIHZo{fvz)@^y`z$IvOH-NxWE`42Y&!k?t^TqPCTu;9YS4nLr86#PcJuT1M-9(3 z)i%0za|Fe`*jY_&G^HLeX;2l1~X8SF9U_+DnvH(jBpSB^W={SPwrg+Z`m5`2hUqXW`n->>ZqxblO)RWPLRp)@nKNZ~Dm-`iWH4q1n! zeaQ)v+WHPvoYlM1$Bj?O3~n0S+)&l3QSaYc1{}}OcaD!G z%Jonl1g#v@Qy!ABn29hpn?Q&nfEQuYc1*giFVpYwi?3Tr({U~aRPN4GTRt~urV31~ z_pCAil*v(h$CVcP*{`~#eSMCC@D|{D74P)&t87lv<-;DSVr;8+?!7*IhikiAfC}Xz zfKuwT$G!~!2$vQM5ZkPj;%y-P@Vtxp4XUH*qh)&9kGj`~H$F7PF>18dambDsI-dh- z-E5;KLP`hyKdToV&}iqHUYI>P?In39Yo9hzG?K1lS5ACUoVKP0eciMdcZy5^ZZZp4&x@-%Dk*+=woauM>1GYJFeN!PoWhsuarl z5M=HxO?U`p^esj93}bCi_t^Rsjtnzf$JjC1x4@Mwi(4d;+5OI>ma@D)B|0T9*+og( z8n81kxc}|Cu7T{3nQwS~V^;+Y&B}?X@B^6AI~}-Arh!web{gAbv^BotH$2$UUgkV> zRjM)1_CF1a6TVE}V9!#b^D;1CU*}^9n%TU|OhZKvMQ`}P><|EJ7DqaF*r}qr-ZySB zVL7&gV_6x<0R^_O036p`aS1N*?bmauG(4~|w$$p3U;8I90VeJ;!)+wKB*|~dtrv1!!tYr6gY8aiw z`LP1WiCjDnypnITH`bU7yuxbaH|h0yd%46!bJa$XR=qc4E-Bo*w2}vg@(OF+vu#%i%(fuu$b0-y@1I#H)chRXORKvrFa}* zzcC!i9md~pl(S-(5~7~)HCI}3XFvRFM1|fWBrsu2Whjr7%_jGuqcT{+I9w8B@8;iG z>Bq*bD`Rw3p;1VSaJB;tkZ0Fg? z6|de0)$kgHnmv4rwq?0iqcc_I)cUIQ{dn)HE{obyxfXdS2dJ6MIkc9?b-aelzm7Ox zTOj2-y!<%eRtt^PIXk@oj>zGSeA%QJXZR?cnqt^m=pt{@{b6Mm7^_?%T5@c&Pp0sQ zovln?&*-)J{xz>J+6+LCGYl^Fh#s8zfrtK#zI5fAYqZ+Ftyx`G9wrQmQTHP3k1W3k zAx~JAD}Hs%IPkHhM7M?=&_5H$wd~DGX+9S@6Rf~Op}mlcX*&^P%#bS*QDdj1HA{%l zT^Qk=;w_(iYBrxw^F^6T$VCxrnCev&{V1^`khIAGX!V^xx&f!N@10fl-JDgvoSxkx zp6c&p((i)9=RKOG^pACQ*>P&fuY*5~`3Kxwif0&Cx?=RH;_^<1+tDFEp^!fJfP{Eg|AvG@lX z)mNe-+g~m2umWd*Fi3UMVDeQ+d`B?!RpX`WE5+&}47J52iNMPGd6lVb&+->srBwvU z2w~a9UEZ8TW2Ozcx}FApp3jMiMfFN8WrG@5?|pe?<>A46FNDIrocHO(OCWK|K{i|B z3BADks|(WYM|i^W3mPuAltc~hgM#yGK`CMf!H^r&^rk@z45MhmLJHH6AkWgNaQOVW z@&n@7aWqqOGPIgTMk?EtW17;Y*p?ai ztEoCTjgW~Jm_*lsywAVR?f95k?e+HksL|EcxzU}veTO)wcmxBS^QR>O!2^0Z&*%M| zF4<4_4EaKh+d$W#KEbUoJkF!>-|q(8%s3bI5d4kZ-jwbfpvgEJ-Y#O$?-!s*`#35) zhsb1{QJ%UU1JdYclhs`dD#;(vy&CP}+ie-D1#`=PSh)`8OpgnE7E>iP+O{tYD-N12 z3GXui&+;=w`N*Z?nieh?d)(Wpd>KxYtmXW)FtT73TX~S9whXVaU(xza;A>#`92-Pn zd)o2%QSK*kekt>-b@L%$=*}xrI78rm?@^uZ)2lTJ+mr+~PNd}5q9%jHPCtDuHlUH>sT?iLyi8Jwo_qT zC9VwgEXmlu+)JwD%r_i8{ckPWEs3qZVfu~C0_&ox^4!#SvI=yO>GOuvo;_F)GAJEJ zo+Ns;wEAH}n9hY%IS5Jsrsti#TAk}~AyJKfOLjf>{X))qqWkIjZp$-YKb!!m9xfUZ zrznglr{5e;;Z@{(y;Vc4Zk4riAyU&}2I=>&G``3w+{_O@{4ICMkox{MK&XEs@)dl>64!M{WL> zKW-HMDATlbnC@tNP!D71F;W4Tbm@LxT%AjO=xz5`y*EdLvdh$$)Zp7r5B$PqJ*qmr z0~h;seE3d}V)7b<*E^||lnjG72mn-0oEf7N%22}1-WT3r7>BzgH8oOcL7aEr2JHkV zyq#>cK6BI}Y|Li9fP-~<@x*`X*wNl1J?KbYfs=pvLz?<_Lg)oD$a zyxnzxu#w->#tZl=@huk@KjbO=JVs{;9 z{O7YWzo8`HqSUuRvyuE^?HXr&PID9QZejW)eZ>g}&t$D%V(A<&yg~1;6v*Z=_>Pf^ z@8!r{+=Q=|Mk@ohqQI3wY)7qg%hNiAQ{)s)iRoMj136=0_!YB{1IMG!XL1hD@Pv)7 zKe!{oli-$OxvjgeNpIG}&=RPy?IhP%)MpaiI z8^mGLL?o=Ztq;)jpO&Tr24r4&+s$BFdd$~g3)5Vtc=UsNo!Rm~CFT>ahKtI0G_Vl9 z@AKb=*3l^zo>^Sh*?NWO>RI*yJ2U|>CYkTKr=#yGL}2kMk7=taVxF-Gq3le|;$NRq zRBEyPMyT`;T_=O=ofTluCfqXa`t@0M+Zk*fLW~Lz=2Nv7N_uL6K0NZHDRukwemwq| zYI1)9WGyVT!?(bbgUxBf`*>Ji+y-x^C$;Y^oQ68J)yF9mKe{#U>8;ee<UNqju&;9Lx7TaztgD(?*ZdSTjl7eGmMXO!zT&F_fe%O0e z-5oei>ROoyU{!s4^FE0DKi@bRYIZ`sDs=NM6#-_bS{WF0_u^x2a(TUS|9f}f_UqEI+egeq z#gA>wI%SJekB8o07t2x)0X-&iI~ykTcbW7qa(J)>f10QE?eoRkGgb!biC1?{Q&azE z8=v^8cO}N(R#JVmmrah21n+hHak1uEV7|c$x){~mn7L=wsz!nrxOIa!FU|QS_XG*HSV{$hxF_%&FjcTbJ8v`CUYY+B7Ddx=)Kaj(Wj@9%Jy%+2ON+>RY4kqYe(So`G8}N%R;d66^63C?XEzRYzx9H7hUXU- z-KwYug_o*oqv~VVL(Ef3$<6crg6mb+AASoL`BbnsCn6q#76#gts3rTj^@n~xR`Kd8 z{obs!&17j>jRL)n?E6_CcX@I*3*y~p=a+XGfb@r)Zw>aPmQ&+0pkffdZ7NqTpShcK zbx??GT3X+Iss$SorrfXbaytpd`YE1DV#CcT&7edECIHeJc&n&Z$wQ-XeyJvIEioIc zR$IcSw6*joscIE9r$9a9+`h@ab?pL=Xd#F~qs$!7Wnafot)1gmm?g(`qEt+OCHWYBQaF9TYino9xPDb&XNqs-j-b(j)vedzu zy`tIL)%wC4FSQdjUWTP&?%7C|b6e0l{pa`h0SK3q2<}jZ;P}l5X!N{Kq#fy9!#p4D+>8-JRSi#Wad4aThcjMG*VHaZU#Ls+;`Q%Rd;f$sICerOU&}u1zW@_^vLXNg literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MotionController_right_black_scaled.png.meta b/StandardAssets/Textures/MotionController_right_black_scaled.png.meta new file mode 100644 index 000000000..10115df7e --- /dev/null +++ b/StandardAssets/Textures/MotionController_right_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 40013ded2eea4b7a875cc86ce996b5c2 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: c3d4e40d5840fbe47947796071dc8883 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/MotionController_right_white.png b/StandardAssets/Textures/MotionController_right_white.png new file mode 100644 index 0000000000000000000000000000000000000000..e91b341801ca6ced9d7cc0dd1c8c0336b4db8b53 GIT binary patch literal 313883 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\z*^tiPai3rkwqS~Vdi`R@lnu$&o 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

i@GJ4q@4;c@j86Yw0AjA-Q1(Cgj5oimHkB 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MotionController_right_white.png.meta b/StandardAssets/Textures/MotionController_right_white.png.meta new file mode 100644 index 000000000..a3f4d77ae --- /dev/null +++ b/StandardAssets/Textures/MotionController_right_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 450cb990de34483ea9fe961ef1eb0c80 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: b2fdb95de79e126488760a2ccc454961 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/MotionController_right_white_scaled.png b/StandardAssets/Textures/MotionController_right_white_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..a56373d956d06620f3416ac808208bbfd8e6420d GIT binary patch literal 11499 zcmd6N2UJt(x@hQ4dKCl$D54V5L+`y;I|?BQ5Gesd?_E#?5tJfL5D*lsh;)=@r3g|4 z2?z=b7!)w{+>Oq7=G=GY%)Ix`d+TPc?7j2tn443a69fWro0=Hd0r%*g zFCQy#&8Til0&W~WCdbJj5SQT2mjRTUCk6uXq!AsC`5&{iP{WbDl(2Y`3qdK^%Ljl4 zfi$#(eXuwWfTp0>ehQg5$7+ej8QA4VNfBVP+-2CvaYIX)jzwrWoY0A3$ z`}?Rtp+P}GN9|ANvbf1p-rnATSPaxEe}D4TbtAU=p6_8uE8QEiKhdy~+Mq zZydqYKvNbFN{L9stHDrMEYcOB0>R^4RUlX-$_1hdM_?c>XaWI)#UTlBJpPAV0KNeU z7qD|KJNQ3?2~WZSG=7<04F^|o#ks%{06G>1At-k5jJ5u2RiUbS-hIdg$LQn)0cISeFxZr@eQGpRuQAivduA&N;1>f`Mu3;u^R`Xo=1pCt(o*c|!CbyIzP8$XgO(G%Dp+ZpSDO%3%ia8(Qj zf=~j;?s$e8ARVA7b|)4!Wq)5hwi5!L0Y4X&5isBbh3{N{LpuH!`~TQJ>`eruM#zG9 zd`sVtAcp_Q=+RR{(JbA=EvJNme) z5Fl6=RTK)1z@gzN?4Rm`02(G$H6;3flHdJ>tL=E>FW3A}_}zbo-(Q{+0;dc^A(VGo z1cVC&PC&UrfGP@PJ}king@R)V$|^w3`ES|!_x$kx|D66(pTF0g{40I_MZfeP&3Dk9 z2K{Ggh5q-d`}4QK&!l9uljeRj$!h2l=<6t%r5{Rlc?U zb=UZJq}KRha8DvY>&Meive19e{|DqBrmEkOfl+Pe@z;z9{P;Cx61;&L?FY<|Ue7DG zK_DqcQv+Rx;I|8>qAU&%T^T%BdhXm{WzECGbI6o5-xM4Lb^*IbpB-M-BQ`a)8^`vF6<$Fj1rO)OtNY=4Y(`!YgN zGrnym{Gm%TD}W~L)Ll128=o8XsA~HD)_(8TtB8d3bl-0>QS3%W@*tzXzI1YQWSwRV z73|LD$kURXU6Ji|8=UGX)MQhk5+=s#s%JO&4t5=)g}j}~Lw2ofik|k_iu!0VG?lsa zJR*~Rc}YsEFrA|nvY19S(e!(E<5K+xzh<#fVYLctr2v*ox=Iv+>5)2=u?bJzgYM4n zX*HK@mEPG7f1xOjd~l&axStX3*xE%7D>3p^wfe@z3^$9KtMG0}^84GVR3{u+s)!5RoYL9C*o7B*E{agS}gW&ZD^|qr(1UMj9=5nYkN+vzCRG4)nsE$W7!GtKGpo+s-UTbjA3Q)41Da-{aA^eqA5<`)OodEN{M zMnd^?c_V^kHH>o(-Br2K?0I!o%S)w4M6dml(Tw`+dVv49*&esIu`}K;+kHFoAFa;a zZa8z=0yLFYtT(l312@Dve_MB4X76;Yd}?>b=G~bz+3nh~*0sT)8#34Jm=^6N@>*jI z94YhMG5wZp5hn)C7X0cgxEI3NQa4hVwUN@RwoKI$H~Wvo<kUfRv&_HIr?UMtN-UWwke0xzEc@4H}aBxmfvZT+?*o_-xe&bI>s1nMW3 zxODv=3d$6H7q?p|e_~MaP5S=EL3v3JP)Ur{W&7cKomF-=seZN(c|t-SdrHb-dE0ze=hodtOMGU^g$d(YzDb8V zP2Dp_Oge30q6hOr8gBM~h?y#i6=ph24d!2QmQft;iR0{3inJv6K-r7%=LZzCrU&2+ z*7=UzwQ=sKA{k;LD4z9VJ#TC{NlL6Sls;vdz$t0LXwK`YZC>o4l=VU~*W;01f|rF( zTqTdI>}$P`igtC4Ekwl2hZbLPZ^3a zYZCRjmdGRD&d|EOXG^5i)F$FnAyIoLOtUSRZelA3=kbhUUW!-DuPIwFoRs?BvU$%9 z(-^jKfG<&eJX-s`fdBpDu&&)6)8C@D?Jhg+k}i^~Jmf$ZEs>?qC9L0Ntter#0O4Y+ z%7k}m+~L%G|7KU3htHFN9O0fHk36^H41tr^gj@I3x5oz?Je>0Iix`+?ByZ6>=)$L_39vxs1;Hi2uc zqFa2Ih!jHxl^Vi&XWQ1DM46Ky(d{tYRlxD(K*P*-g5*O!h z@;3%6u$h&L0vpJurj@&{7Cg{;@D91_Abpf$bT%}Z?_!GBuC4<1j%~r~ArU6&zNDsv z8Oui|8$k@0_r#ki=_@~9%aYBqhRT3UqB!JRlVS3pAmhnhFOTm!+;6l0^3#103mM%F zN1<5<=qyi6%Em%Qgowu;WgqQ5&~Gv*^PGu{1A zs`AW4u!q1aIbK^!9v2XLsPIwCf>5BkCBLuJ{>P7nt~ub(d8s+KM|!X__gsHjHfA=n zP&Q>^vvAq^Z1>z$IOj7AwLQWD-*)no`k}hbTjj9*ZNnxrZ?u*-!v<(=R6fH&+jAI+ zkWt9;Sg72cT5&qf?qJRM+G>Hey;W<&Q1k-6@{Q=@vr8>f#qXU>fU+wkrasufNo@ zH|;&?vsopxhoY;>+%T>aH)p{-K9Z6+a3ywOZo~PU1H?GZW$Zd8_*#WS=9BBIp9Q{z z$uQ0oLiaMh1-(D8mvJrgjXc0cF*QrVcJFm58A*A*JUlBupH{^vbuyY7+PH_B zpA$>9n`JAm_{NYPPGi_^xzD|V1#`QDk6S(~opy|W7RWh-K0BqBD9<@^O235f?yA%} z>;dmqXx?pF;sWL5mrrHcGo!h&pk_)etIMt@^Gf(a%d&cX8LGicc#O-IFdHcx2r#gHj|jbZ@*bc8j7{IE(FLwnfl=JnlGB`pedx5&Lf;J28vO97|T~Jq8EMA ztw=Y(DE+x9v6P!-;J%Hws#}`@=7imv%bYE)-a4djCwkLLiMnxucI9Q^w7y`#7wmPrJ>+(3OQ`C>AswAlfP_|0itGG zr7-`d1xOrbnWtH_TBD}15usim6IAZIg=BzLmIyI@9rjjxKSCWfsuQzRf3%$g5_{uI zQ156}?g&+3uz4?HuP~%72%6ebVL2DPQ8sX&LX*E>mObxCw*aLe&hdR{=Dibf)^CsN zbnDtNn+sbtr~-;X*SjKYlL+S+aV5uj@6~3AREf-m-9Fx_Rg8o57pCd+>|}P)X*Po+2HHwwihMSum2(idhF@KS&mjFW{OmdiN0J%_w6tV zZVHi!E2g$g*XELPgIo9$)pLE)V#V2;dIrz8_&|E??w8%^#qzhPkQ8Ny~&-M$d#>zAYV@SadY z0ez|&ds_~b*mK3Mvl!;ib4n8|v~_|nCYdolPd>316naQzv7U$B!W>-D%jSHarX2z| zlQ|Z3a{giLVTG(KHLFraxti{^E(fZ~RI)mrG5eU1=3>=KH6v<;PUoM z&6dwqwLEzvHZ=w3&fFBQCgGtFoqeKK_vIK?>D2Tyes;bT5_!OwpK*I@+({nRe`I-+ zB2@Q|CQO-e*J@sRhgfN92O42NfQ1j+n-(C&)!My-GJl_OkWG5iR^W6ni<+vV-&=F7 zeC|9W!&npM-i*pa0To!hXHC_q0bK4^4P%LcsRV18$Ly9a7iGEAj@B;(iCDdv3)A(d zx#)&Bk$iSYGco$S?Jh2F8k>Gg4v=oYb7XDNqn$&z1uA~9s++BgrV*wQ{WN6tuv|FD zDG%_lrn>JIHK^|U=FIn4_I3TSZT0iCinOxHCwwQ)%J5U@chX1Y1Y1{&ZANep?cx*@ zU*+e|9~=(l^nFzwIvw8ERxWb$K$Xz`!bet11#Xc_cn*vJLx(;S?24Xqy}cvL=Q)$* z>$T=%+hOOa_GKk`Q6ZHimXQlwb*B&v7NE#gw&$9)oR$7pZhOR`d-3_mIcew(w?W%8 zcM!Q_8F8%JZDb`yfvUKPxwpO%9cO(S2HqG{STorAm(^|2M5yGLdu!h@4T)ek>dg12 z%rFM=XxfYE@RKpD>z}sXI2-m1EGadv7Y=GP>vm!6Lp?uV3%fbNt)yVNb;+> z+aP!C%n)~ryF%iIh`tZ0sx9P-mLeiY-OnDxfE>TGrXH&BDuBIlv#`o<-wpp0UCwt3 zEONoLKt_z~#ePImnc>C{H`8%Aax0yu&(5}{`r!9>YAHRG-H~Ee(+p3K^XU3lK5*Fx z)v#>-dKMI=q$$b2LMx9v_M-pZr0TjXji>{ib*avmprO%UrfCcU< zFh7Lw#=4fV*AF>$+L4pcI!q*<1gBi=wZ5)sybNZiUJ@(|84s zV{{G|OPJ^gOt0MH>7?|OK9ZW*Ocwi&c-Oxs5~=7TNgbs1F^a0YJ8H)!KE9+23u+=d zHYPC3ahG*;1*8oLA?$s|u;-A+9`PACpE|#9;NF-U`t;XEeJp!vwPw=3cgw`rhINiO zs0o;jd16;w^XQY`47H3!%~9=rs$7Xk_1-~Twj^8BowqClN?;KZCn;C9xtt6oGqIl zqQafdE2oYwNsn!3gT|N)(=xxLjYOB3I3JhZE=00%hdQ&AHlK@X-pCJSip|%UUuWRa zuCrJZG9lXG6BC_V&xDf5>b2PQVAQ%49>yax`|0LWSFP#K z55gx@`tCoxgse(SA`U7F=pfg?fs>)W5}hAI@-dCzB6Vt9w5J5De9}S%l^%&CNT?+rxu=D#?BYq z`3hogH{&`pd!~ppN-gw7JQss?Wf9+`#OzuNZ{){0tWukjz+$i`Wh9lh4rkL!9F!TO z8Od>be4L~&2YuQ)lav&j3}*VO`I)DZ#^2s6V%}DPFZQ`)BM+*Qk!LB@OF&cgc*}Y9 zc|8?lb;dc1uv*Y>`xI>j!;_Yx*dNmi%~j~jCmglo^l;Wy4*BtE9k}Z!Ho5~k1kXpV zHJ*jXInd(|4$ZyHDN*C@Aa{B_3CmB7Z&gp$k_Tn{cocyg#7ZF zS=-B|G2w}qBjaCD?j>EZ40_bOzg9vXlx84(B4md1!?z4sQ+;-S$?p4yOV}1pF*5eO zaT&f9BARrapqg5nQBmaaI*-bnesQUHDGiJikQ0oa!A`W8`ug=j%buwV^YLjys#P!Q zY*@=Q>)g&}O$KL*oXA7IU3}RigOJ+#!0H*sR5gn$Zj~it_+N+L`!J-j6w$sUzs>4C zVlfiKR3`~zu&@#$a~<3R<5)h=catKt9&E2iOUzWrs*JX6Xvt0??_*#jUN<#rS}Hoe zna0!IRO}fLY_pb3=M73-jnta}TE=$ikxitVUzjsvwqsJkz)@iZ_^vCtW+SnJaLw;X z>EY*vy^77Yd6N5$4p}KC2zEc@r#1L2CeI{KY72Hq45Y!PM}m|f97isUWWKsKCY246 z-_OZ#|PdmPmdUM1&q9BRs z>4lSSNqD1%@t{>YZ7jZqOZGqa?15wYp)gfOXm^2s&W z@Jq_R3nNSHmL)R0v0k*qXz_b@-<_;xJ^0vzdfw)p0X6-d+gA^jo^Lz?+2OXG3o#td ze#JiZhtJyWop1d1^R=B?=t*ol^YkmK(Zs4dWPTaPnEi5A9e7C} zCLG!cHBd@(_z*c5ho$c~wr@)Q&=g&2eZkLAW;ug_@qkyVO zPQ&rEfHvVIu^dpRbQVN^zVU#N=9H=A;(A!-;o%zqEo%Az)Bf@i2B*%h%R5tGhD5q% zkaSghe|hD$*?V623+l4&tCn)U)p4T$tUz@X@MjCcB+prC`4yCu!NUnNrc&zo=iSs# z55A@|*YHx0=60_1Ft;kW^>mz5K6G89E^ovF69s3C=&ej{}apLOU!yRrm^o?rryIX1t1n{Bb+qa-*s+vSI5=n3N?ql}19*mzVIS)|V3 zAnf_4a%G>Uo#A?F%Xo8=TY2VU(JdWMx}nn!fk2H0b}H_=Nz2sE;W{@KPL$xeT{bM2 zV&0_}tQ6P@b)XezLIL*S?cYh1gM_Ds^u)|VS+O1k@VuODsm84`Ih(DF%DV9#O&uTc z-CZ2yHkrQ`yrJnF5r%zzETeB}G{_g2Twz)QO!S!%_GS1Uo%*>$4QTr5C-JIM)`vin zjCb=-_pEd?x2~E5I^p1miP^9_^xBq{6xwGBtJ}w>Ek_D4+ow&8lFUc^`s_KOAIc|b z0$;g&CHPvWAFLTpyKJASCIMk!9Qt(G{pGj*4Vjh0&o6$YnBUl}XC2d+b&5DVsu}fCiZAzosad*tvgnX9@LEA`cI#5TN|_j)E~B$V-G^B7 zFT25&kyO~D_=5wR?aR;RyE+%MA$(;zdSwqObFY+jL1nHfXM%O6Wr68on5A=!Q*ZXR zoa2%vA=lBnvn_M?V%N4R`B5`qp|ht3Hwq*x?-A~Q42w+f>vD)WM*nu+u?LW>?frvK znJ>xW%rh@`y=u0;iq60dYO%vCjDFOjTxF=>Jw^4q0}*PJdb`=|F1;d~Mv?k5-ZMwz z1xIfq_U?zwy${9X8H1%1fmhlB#1_Zpad733q9s~ADX(MhgYpHO{A}Wr-Wo2uanY>6MsUZ(AXaECyuhqis?sn5O2m>iIsxr*-8mYhQ445sY&jy=i?I~V z!fXQ;ogERQ%1%@9)U*ZfL&0V~=|GDSO318D*BSX{0d2@HpB&q!VHz|9A<_i25Zi{( zGI9f{`E?WzrFpk8t=*9yIcyk-HhxNqmJQ zbYw5`O+ZT_2t6N$O(s*Ii5Z9+l3|p`3^ptEFdB&1D2)Q;^8XIiYVBwvp}>BN_pOeN zF>CY~tiX(Tra^^~aKF*5jD$3c3~_|)A260?VLHNYu2$J?^_hnBA(_-F7)!^rB+N*% zLhW(tQ*Z(|rr_@o!M<#lLeCc)FeQN-VsJct^pvAUy+C5I?NnLN+&GO+jhl=CHclfp zm_$in0vfr_r6XKA6Ny21e3U_c=|~VCL587nT&+o3^HwOCCU4-#d{Zk4<^M#=<$RgW zNGNqGOePV~$Z!HR8Z|#r&0!^>+(bGziOZ#Pn5-Z=FNnpZvy%`uOO0`rDxPX6BGO)h zt1@lcjoPb8dv+){l!r#MWt*Ji^Z0(rJ+GACYQq!^G0nW4H~k-l^Qg_4Nfm2sXi{ zfrQ67Yuz66K1v?kR+sUpuJ`4G!Oq@&zpNLW-nX3asUd$;n&-N)+$uv`8O$+|%Yl=n z)4+Yl)U(ClMOdR-_l&W#9yd6DM!Bc*0%z3!)!G}s?d_>PU}eXt9P5?6 zb=6G&h%)zYD#M)J$`97K)HXIX-FdR}K-a^bhDoVQ5)M)7`v+$g&4#+RkIcRu_@FiqrXjTci=(o^#WV;k_oYHLlb z^Bs;=`yHrl*SnN`QTlM^q<<;B#pP@X!y0k}l>7Ml=JeqMAD^2zbxCB8XMJW3sJ(b) zmBsT?9Fpt0`L*^{Mec7RF#dE1XuD|cu zx5sj?HUwm>*mJVfAJjJK=e-_x{9%@7e}yv$KLP4vm&f59S!*{QqIjfDu-w+o&uYw% z{&|x1&NOONUoTvaUE9s=TfZ;!_GM!uD0?Ma4iax)zIt{4?7ozatWp&0UD*+}viHv~ z%vIyvcb)yJv+Q}qk(1LY7fe$@wk);w+0-&YoGb5}F#n|=EfJ=qDSn5{#SI4eTeLyP>ulrFq@VY6|1F`tGt`L9= z2Cw>-7G&L?CsfJf%^Bu`>gyA4xL8gfcs{_MHGSXEAlRxtPmz;-F9fX`I8%Z{OOdj z`jB4u)%wD7x%>BbdvH?^_ROYwf#Uda{>4A}`UaG&(!7*LoIknUZ^oh3{Z_W(aJ>Vh z#q(}-w|#EuMAZ@J=YWbetqYztACaBEaG~;+M?ukKp?k+a9ti@fnj=x_#sj{EF2dlB zvXoG%8L2hPxUDTIwZ ztm0~^>%}Xr%+N7N0M&KtppP}IWvNrAxg#?CpC5o_<;^%J!9T0e*-eiO-G}q{_$MDtwfzf~Nh2i3M5{Ob2WaLRQ2+n{ literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MouseCursor.png.meta b/StandardAssets/Textures/MouseCursor.png.meta new file mode 100644 index 000000000..ae3cb1162 --- /dev/null +++ b/StandardAssets/Textures/MouseCursor.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 45491040a1134a70b450af3182935950 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 64 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: eeec7549cf05f9541b74007df9e51fd7 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/Oculus lineart attribution.txt b/StandardAssets/Textures/Oculus lineart attribution.txt new file mode 100644 index 000000000..92677abd0 --- /dev/null +++ b/StandardAssets/Textures/Oculus lineart attribution.txt @@ -0,0 +1,5 @@ +You may use these images solely for referring to the corresponding product in your video game or VR experience (including manuals for users). Otherwise, you may not use these images, or any Oculus trademarks, logos or other intellectual property, including but not limited to use on merchandise or other product such as clothing, hats, or mugs. Do not use the Oculus images in a way that implies a partnership, sponsorship or endorsement; or features Oculus on materials associated with pornography, illegal activities, or other materials that violate Oculus Terms. + +THE IMAGES ARE PROVIDED TO YOU ON AN AS IS BASIS AND YOU ARE SOLELY RESPONSIBLE FOR YOUR USE OF THE IMAGES. OCULUS DISCLAIMS ALL WARRANTIES REGARDING THE IMAGES, INCLUDING WARRANTIES OF NON-INFRINGEMENT. OCULUS SHALL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, CONSEQUENTIAL OR PUNITIVE DAMAGES ARISING FROM OR RELATED TO YOUR USE OF THE IMAGES. + +For the avoidance of doubt, this license shall not apply to the Oculus name, trademark or service mark, logo or design. \ No newline at end of file diff --git a/StandardAssets/Textures/Oculus lineart attribution.txt.meta b/StandardAssets/Textures/Oculus lineart attribution.txt.meta new file mode 100644 index 000000000..3f3c9cde0 --- /dev/null +++ b/StandardAssets/Textures/Oculus lineart attribution.txt.meta @@ -0,0 +1,7 @@ +fileFormatVersion: 2 +guid: bb11aa79f38e4540bae0418304604304 +TextScriptImporter: + externalObjects: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_left_black.png b/StandardAssets/Textures/OculusControllersTouch_left_black.png new file mode 100644 index 0000000000000000000000000000000000000000..1d086b0a587c669acc3d0e2b49d68f26e4327fad GIT binary patch literal 402320 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î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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_left_black.png.meta b/StandardAssets/Textures/OculusControllersTouch_left_black.png.meta new file mode 100644 index 000000000..24f4f7dec --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_left_black.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 6fb63649775049a9ab0ccad37f046873 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 27c8d89d51324584681ae041050b016c + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png b/StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..ee0b4a5db0b7167f5cc8958720abd3b385e74dbf GIT binary patch literal 10675 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 E1sT@!bpQYW literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png.meta b/StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png.meta new file mode 100644 index 000000000..000a47405 --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_left_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: d35a9e0c65154bf7910dda75a861b8ce +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 27c8d89d51324584681ae041050b016c + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_left_white.png b/StandardAssets/Textures/OculusControllersTouch_left_white.png new file mode 100644 index 0000000000000000000000000000000000000000..67b0d7642cc698945bb7e7cde22570fdcc123e7c GIT binary patch literal 401529 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

fDuCzlSnfl3gwcW?WksPD!J!~zIgsUm4HhD&q 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⁡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 +*@i_a_&Gpp(bnlw1%1v-GY`6Xgm;Mhp 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%0D^Gtn<9c3A$|Mw&M(*HD!r|U zz1&MYo9~bxHPdfqcu9iB*S&a<6nEzis{P1|@h6qJ!!g!M`=M&kKNT54(AMJo1ozgc z-uW-XA8nt`&&FO4-PR;$4JQ;F0Rb)=9FHwJpa2Rve z^T@3AEi=BoPXC>3pRo~0M!&tU7txivjq7ntb%eyzBD&qY^!3LDbZu0~n%Oj860jDpEUr7a` zj`L4w*9OkkhJ!0LWU8c2qz(mO>TOt!$*n&Qija+J@57$5NivfYS8(aO%Kmy}O8on* zlRsg5KZsk8-vBl>g*VYzr$Y=49aki!3rBh2z@tKKo#g)23m4?u3q@>7?@K#=S`N9H zdS-2CIDY0725y||;X`+;F2AQNssoi_(8VzFm8*AG?8$I*F2Qi70HklB&LwHpjMjU5 zD1eazm+3XGCpTL;?3SF~{0QhR|L(WBHTj*8Am2UM*2x~90Gq4nmo^edq$=6E+T}g^ z`}eo*xEHF`N^c1UU+DQ;5mR;WOiJZLR#z8(eji&H|Mq8+p1-wN&MakyDYZz4&OpD` zNl7kzxCU=EMUSWuHBvZ%B9FC{tcRifx4FVEF+MYrn#XW}vvFY8RB$`}TeNL}pCrRxhZH z(5ka?5%yJ-`{Fsy33~!p8pP1^fsy3Jm1drO&xS1}_J@HR0SJemmRGNzvmXCZ*)}=d z{}lv0`_b-x1-l{ArL5-`cqy(mu702N?{?xr3A$`yp4g~YDE{idw+0r9bWo{8ilAVu zVZg%!INS29@^&GZKcRyGq2{;_X#6Lsf!6sjJ9L}Cp_erj^PFtk`*wB46F6mdwjcAh zJ$`doX6S`+M&x!2YwrtO6HvnYG#M=~e+6Gu(D&BI-N;^kpaYkr#J71kqzg2+_>` zibCZxI}%9i+6#_9>{jIrGsqpo3tp->(YM$Ze++QFYg2l5Z*t|K(l^;RAe#N&+vgub zwO~+fEZOe`#VHjY61b7NuVlqg+DGB3_8kz>YA!5t7KUi~=Z52M$gTRq$M{#yy6s2)Lb zT~qm`rQbzx;A&W>)j@0Qr{^Ek2VSXN=9HoF{Bn!yAozF?3_gX^zTRXvbN)RO{Gc}> zh$?l&DcJNwmNx$KqGII=4!-heA|$Y>azX1#z&qnVe; z3$nIc@WeD5oVIvwl7H5m)^{A_iOeUj9!Z>}%Q`RrKB?&4!n!WJ<4A7yv7Dc)%BD?i zdFhL|;^w>JmO;tyIV8%cr_>k1`voeCwTXyvf7!k4W^VO>xw`G_{{oQ|;6r@=j&+9n z7_s1sog0h!|19nR4Nf=}g7ythRNei0UXQ9&xft8<=~^66w(1jRhkvq_^fo z(GC)_`2lpthW@a;_;(PT=ef^Z?V%{85=()y$Fb$)OOfHlX|3|Rjjp}dc~;QlHU300OF{JH$Uz(^bXGcv%!LWrP9${ zw7VkGSffMC1MXe_V(2?#GYok(^jEKK!EvCr>384J){#g_ost~cP~w<+@ZZ$4%jnI6 z;nms-jEDChkx&NZi`r3FkLpm$#>U3a`?BEK{x`X`LnJg$JJC|{aEu+}o+fR+Bf?Gd z5iD3CA@M;H8%X$M9%<&WpTEjpak+aF2l~;#!1>s9h}_ZCbefqTOK3~r`Z=FXal4X` zh2Z)OJ@La%S$GaJo2T;<`CDl&ZnJ=ZTS`|&dvc1_BF6=ZSG;#=$f+9`2?(cTq*bwB zaJ&~v@JY|o-gGYdd8F3LXasE7?e%2F$bC3D7Eje7tHwpqOK#U}HM>d&Va@;`IUm9j zU1iVOD>8BgX!+f?!tFh(x_5vdf;E=^uu(d;oR>7Kc*Px5PLhwFdN<>xsripEO6RO& zcY}>#ew3Pxgkt<XH*^F3Z z6iGc6Mnaj&LY#n&In^hx>*Nuw!G$oHw;kYok*8FU$nL7ZJPv~=5WI&%cg|Y|5A3)a z{{}$2@|}3&oS4}$N_&{nZou1TYDN+wZ=f@jfV|7E@DAt}^HT_#Zlu|1D0^?N`Ceq+ zp;_^tI|zAl5k(C^J+*B<4h$O%Om{mtyJrr^wtO`EfO`Gmyq#stUvo5db+a%#xq zfoPp%#v3iRs68$3&O0;skYBwk!UN>yvTljSZej)Y8L`nGiT}vbqhc<|*v7(zGpJ7x z8TgI+#P&-jv*`TQQuDF0G=~lv_h(SRgU~11wai{8&HO*GnC5LYGU;?C2_`DY7u1&j zhDUAO1mP_*Oy>tTpIzRuOX|0?)G(8MBLn~`E5<9gRjYWSW5BABCK`Zc2dtSZY5#ow zb;KR}n@bvGb|htPg=V;tzcy7p^ZAr(U}-7Nq*xImm9P{?|$T$~&+W$Bm zJQZ{PEuWB>?SKbnVuYs`Hp1!(PO&wI&^&@kA@RpaUX>CTL;LsBYn#yvj)13r{f*_$ zrTXvHk>vx;ruO>~+~1P*e0u)kMt4_-hZ;Gx3J5NIM7@LHLS-5*P2LAzBWL{u{FzO= zu%f#%Z1KzlW4g=mo4Gw9@D4~rB8pE$82$ALCPOE*e_V?fk`a;0!iS>Y(Xyur95*}u zo9qx=%1CAxq?huik*hnh$=~Ui^uUP>E^~xu;GV7ELto{qu;J3vU+Mi6;xHannhPKo zgerfj(bt7e-3CjQPhot`kPgO z9XN$vx^#B!jBS3t`YqzGgVu;3IPsce%T1o;*TQn&acf0DCxm92oCR4qRDP8iS6r`x zXe@fUK*9h={C&5+)+M8_pS-D7Q>(DC2a{(<7C@nL_&&i7m5#IT7P*?d^8BZz;~*zc z3)SCMAXwQHS!7)h2~^!GHa-Jo1)Zsnk;~Sf8;pa1P!b2STqS=`;Gf>5@9Kz&UghJT zW|_!MZ0hUS`}`>__L+jJKNvQb)X}@E2e|~7yp8V5xh;v6?XXe`m>{dY$!~>*n@?Ux zf2D7p#A3tyKhWUAkXB>OmGo8xK1$hr0tYPnExvrZf9iA|=ecG_lRz$j%=~Y=|05T4 za{bt{;?dr|ncuZR zhu8f!%y*Nj_(*U|BKLQr_m4>Y0@UA=gWd5*@ONbvN|tgHI-P+nHQxM)oHB@PRv;rZmlYgD?__fRlr*1-`ZTNr;r%I_@LIJV3y5iXFchh;DV9nFLZJ{odn3JWeyjkEiD ztQF*RyywYL-dhS#pZBW28+Pnj_XiRXqXIz2;1HPX5zUTyyIpAF8WRe4PH;4xoSW2t zr;4Sq?FJ979an-+=MCS)@>oY!E`9gGMFU3e*zPTCNpWUlZ_+?Bu=Ccwke`^HWnvOj z{ACl^O#mqp+7dMcjX%TRiO?z zQA8o-=O*A;Bk1?h{`64K?>npM?~+j;Ne6a$m{OqCP>Z%va+t)Y9H#vl`q<98B`a-S z$ENQ&j}bbAr86E>T|-Z5XydYa?YF3@E$zl|BurgLn0q4gVaJ!zgUDNSKd%i)@eFI8 zlOzWsS*tpGliWa->^43WSTye|w0M5KM;oVhbZet-H|LDTSsYEt4V3?KL1%{s!otFS zZ!PCFF0+p zlT1XBo(#a_8`@~2SZPxyvDAAxyCIxEVb^TFXWZVkP_~Svc%N$~A`2)?hfv-g^=khz z+IFX5P&m=L#roe4lm0`fN_5v7tkR;tVzO2suoF*MK`Mj7aXPD;iu?yaNRoJvSJW`^ z^G_g3mRc2uLJr%MZuER zRjZAp*A7=Ur84@WPRnv#!(X(^Pm|fD73c492=G1c5jzCA1qQTxC;h&W5^sF{{fGvA zSz_Qo*2)5dFb0U(s^*BDzI#MFc1v@;`jn-=Ht!jM{exDKIJx~U$L5DAvz7KTMirBT zR`SE7DCL=mxwvFJ5OyN(?fjuRDXnC&N_V1Q3=hm*o|DH1JKzS_)TTNTOr7V?mO+XZ z{X|7$<0jUlK`4FBkE)(w0VQ%nWWg_(^hcE**H(enrqdRhV2ffazTWUD+n=;a_K5_l zt2rHzKjH(N#YR3m;0JB2;k-_y2!1CXN4>~xh^G`Fn4kR2CUlTh%7!v#Ty9#77OgutbS%1ggOh0g1k-;F}NpoFR#Vtg;c)r4yA zK|i)xl(Ea~!-?oGi# ziMZqiZbJxJtDNcZu`gLbB|^UGjsw~%7txN9avI-06ULL>yE7#-6>F!wuDN_3#5>ws zx)O{n$kAJr4Vr86OU6BK#yZo|?`D#sKbz|O5$yEyCFp%w!ke;k;G3I%u;!Ddcx?A? zr5#)pnt;x+B`GJXdF}uPY&f~q*wnoX3hEld%M;rloOn=H_FhxEjZo%&cHxH#Jvb0s ztlCSOG$n-`0STni_^{w(=DIPhG{(G#9R0V4L~_usszI3Qntt})nwZ(V5s%`=ah%g- z-SL{po*$SL~}ccRZ3XCx)w8Z6_rhqQ24{q)?3Ut|Ff_3BtaTblH zq%kx42(*MeYPwYu2mZe0!7EiepD`^+?3%3+PS+zUJIk4N4AY`TaSjVs8DfWnDS0H zNqRpoV>DIB*_KgZz7cjDgqq*ys1g)iU{x|05&8B`#)oCDXz7Fel7)o>*K6Umpz;|R zXv0O+PxK9mP3o37Yqu2thntWXIHU&bH48wZdo+DTGkDE#F5306=v$HMma ze*+*xn3VFqJb%m+(gBjMa3Tpi(}o&2dPcM zhvd6Bi+7ofl)vMHxg>uOg+e+l7|%bI%8w%C+g$_g@T_ic)##hN61(*b4hL8Lid=@X z2gbY}@YLzlAzSP&nkxQ7BZIBW} zJP}bbcZxfoR2*;j{uYoX$kq23nT8b6I*`@c6xeDRI9U&kLIpgF4(^ytsK>^tzKOWP zpUHi|7c%|lPlKG;O){;&o0)G0iwX+J9e7)FQAKqepjU$PGC`~ zI1{o2YR@4B(N1}mBgzC#LkN!gJK(k7WKdpysT1Oo8LE3DD42;_li(;sr3P1x>)scp ztkz~T%KGV=Pr36MaSIajo;sf%3N9V?Ug6OeVs6)6t9cd;{~o2Se}=|sPip*Bzq?h_D|q16YM|lgbD|=bx=VM$5Whw#v-t?y-_K{8XPcOWc28 z^*#@HV`lW*T{Hg112nqs^|g|1A`xzUOEZJJLKU4yQhZsapj*#cNtkspL#y~zb~LoR zU)1!cozg;`e45@Us9ehcx{})R!^qB${QdeyCm*W1FP~%=rj9craNHeXUt&SfN z9{|p_lJT7-f7$SbA8VD+x;WZ+;3NcB2G2<3MEIYmM6?9?T}LK3K$~W|R-Wb@?|Txf zn}G5;j0TD>JW5w$B%6^9p?_sc~>35D<2dBJsg z*dkh>`oK1hgVk8Ais=5aG~0nsG_hoq^x6V}x5NDj__{I+VL*d)MZ9LFFE2L!_p~f& zm+6|1rG!0pWLjHzF7~!ZKK2xeu6m6oZ88m}UUC0f?0-Y~T=rX*CTml#_fUOIJJZTj z>;D3m(fxHC@N!ZQxh|&7L-R^7m)%AfAY}nuB}01eG0QO|1M>hm(<&OVY~Mqkl><%> zZ^t=(&0szUw6?t+(=m^;|3Df(Yn!wBuKPgePyN#r$HkksfUEw!CHLa$O91W)qphW+pC#H+iN%WZ}7 z^4SiAimE3;?lKzam<4_)Nx1!LA0oaOaWAjw>k}rv;cpp*j=GE)&#c!jTLD=H<_ngO#$d{DpZ^OWJ~63nk7TLENOCfBW+L&+dn!lg>{~$;Std=IHG|t;I(=mPs@HvXK+TagYK*IK;jT z7awOZBy-B!zI7pE3}fo}eY7pITw9@A;Z&&bT;jkH5TN<5Y|3zID66*Wjp7W3D)@0F zmpI6IQwnR7)BLTarUp9QMhszS>-u@pPZARijt#(t>#b549@e!H&oDQb^DWW*@Sv#0 zd>b&cv%lcn!@+vtYMC|q;vc0nIlB~Y`90&)xKiq>&J7h zJKBlXPbd8RP`hJV`U}X?9NfDs%edrf{fAA#_UbzoL)Rq`usz4BH|eF>Wd&AN=^4sS z=w)&|Qz?)3PI2e^fuP)%;~yO6IXeutGkrECB;8wrF#r_exFF3!|V(t8{^LGEbV39N8!CE@gk)gK`@#8{r0=v%gE z)Vt1~$T;aCJtuWhx=xl{+LwsmWH3mc-^-_qXSbMye{%t!2uZ3>`A+BZsU%tM9=@ya z!9|+$JE^je7Zqa{V`3Lj86v z(fOf8R4(6|oYaUn&OadtGvjDg!QfT=-;q8QQpnBOdVWkN25TlV&XU+Qs45rxE7j)? zh;viSS*iiIbvQ5atMqg>ZNh;ymZFSEKtAAj_&GxknC3aaLKn zj(O|>+vt&+%>vtBTrVHojeuLLXNs0B6BgIHH=p#IQI6=dUQ90c@6blRaVDzE<$bZ% z1Z8cCt{{WANFfLI*|KSKD{hze(+JLRXr$q(^syceg;G-~IWG*_u)0}GxOf6}?A_aH zfuGNjsGc?Yn8$hHXNB%NwP7A88l*CV-PubO-S_7J=wOu29#u8pN0VpeMqn-?U!4y! zr8Y&O-CP9mwWU=CziQyFJqklf_Q`JSOW$maR;2zVS7dyGkB9#*G?nxj zSeihp*G?icmdZfUI&-AX0H6To%7b+DFk4GvFEP;}g`A(KyfYq;BA<~>F&~9AtJbds zgbiBGX_2*)1|oc=gPl&l`^tG67#d#5hcpl5J6{*n6Tk0Vy5r*+-hCh%bx6|f)3?lj zbwz~8ym8a*{lxXxZ200zJ(9-5_WyXL?fT?v-|;sikllp zyqe2w& z@+q2J382`Xr>Kq@_M=h2;er?YCaNm@{MaJLvY06xTSYj!ah^9eW%P<6>Cp^%2Uy*26V4rJNmFG%IE=5TX zY+|VHAdLi{TURONJXM-Q2}t-Jq__4}(6&A#Z-_om(9C{uwiNtwJV9ShT&9$I{7QfO zA%5gv6`mD+W6a!cau>HO)#G(+@8DZ-p=#F~?Ngp6d$ITRIzeyAY5YJUY?+lV*Ia`B4z8S08vIU)X=B z;lTZRX;&4`k!Vk`>V+nc_5ZSu51nNXVK3R(chgj4H5;k%amJ|Ft|XRR?@zS2uPqH; zqta%b6eaqlfZkFf+?h;82^m1W)btBv8}9cGV~?qD;5=u;12slHMHbN~z6W)xLgYso z$i~Ayaf}UroY2v~jl~#20`YD4KtuX>zdb;itO>07Ze79uLz5S8cWarUfn4re3^+8- zazFG3zGV@}-vFPCX9lwY3rngh_I`r>S25fqZ^&tckP<&$SsmYt7}6b3o(~k2B_yn1 zU7=+w9+%m`3K}pKOFX7X&eABOWQ{f(u={TMk!8Rg2TnMQO{WlHn4ftk$^|7&bWw*} zKTChAHi71vLCtLlT`Hqc0aULI|&uo%ExyF->$ATy7hY@`s={_>^Q>Gl2a zS>Dww2_i0I@z*eFHGDd?*F-otS8)E<(J-+*Mu-}w{gw_-`Lzv9-DB#yy&d0bHTKRd zn#?tJry^nG$sZpCTK9>e?@?RO`rN^etOfFN>04{az(O%%ZjO{{jD;-SExbWp#&ys- zaV(DF=`P!dFW*$<=5R1;Uo$G1-Fm|Hm3wCh6R^pSL!ty|!lu*msc@jS8LC0W+q(N} zo0-#-!|uLC2mAUWIM7m(^GeVyC8NWaqikaPa?NfFZK)H9z4s#YJl+*W2t9LI?FlB{ z-yvSU{BR;)PJ`ro+KTxs{(xD~&wBsvg#Zo8&xAV>S{=C}DyAw4ftt&Xs< z4uoqjR^<}=eAQE;$+mgW!>0FBTYas_+-^si`8hp1WIW4!^6_r1Aa?i z4`A>e2LZDHZfKMOHm_7+Bs7Fn!9SCIKguqO`v9XkM&D{bEcax$5#Mqnt z{T_2vp!1qOr@SN+drVmND4d#ekvL`cn?oi#$%8s13cn6NnNxxgW>rs#bibZ6oB7js z6ieuy73Pn6T9_YHpTSSfd&zkvIWz#Kd{f_Y7kzPlds9`!xB0Ois0ZC|AcDlNHkpod z11&Xn#BiW#_wcU*!7V4Du;$gH+T-KqM;0bMYQSSnnMojB_wM+d556IS6Tv4|v9Gn< z@S5Ellihiu_xz`;xv|P}X6+xNg10}lQzOv#aVLn}jkXed-#?YB%h-5FmWjA`z~cuw zxVSKjG>TI}H@GX)_US?;a|Q#6X)?%uh05hS2&R~^L24En=jm@VWOf29ORXlq>RDNa z9W=|N8BLuiidFl%FS(eTXK&`+|FHU(Re}?DTJ2fsr<6LLTEi4s|EHx~S@w1D`g|7s zo->{$(a{FswMlOzV36O%SELldYDCirY|9DnpR)WvA7VK0|5-+OI4$Tk^0;v^)|)PAv-QmesF2va&;dx|WY6O4qA+-EC6 zyEB^)CAnQFB}H9ks%pw_+g^x*zk@Ex6<~lt&w#t4C{dhcPH5AZEms-!BoQ?5RyJ?i&?MX^E!LnY&}5k{|svk^c_+dL!`*l=l9oRIDy-@1tqA zlO@px=|oysUVdm~)A3Nb90^h_ye5TDs1R*e81OLP8hCGWeEe4XR~$!apBQ2c8O@Jl z$0iBpTwOWJh^()#Bc6=!UT7Qe+dEGexTlPT-D>Z43cqUaHm0>DnQZx^YQ-MuZ4kC(o-?UP9`e_&sQF{Coe~&;|>S0zkg}{?&S4~0-)7>itCK@h3h=K8TBGB z{UObYU$GhbOt8^UB+MoU55C}?xh*s}jBrX210JvGOOvI0aYV4?8uB=fJ6032&|;X& z=X1Nj%!+nkfRPb>K!>9G@|EH|L5CU|Wj}SfA_dZ|PPrZP*BE~}?q6PO=UpN$YJRnK zsqqlUQp;28blg76<>B!#)2VqD#lM)>JNbV1mm-Bc!%BQFD{i`L+bP{h(DdIhvb)Kx zNisocdkK#wuE_e~jwb1D8$)b{B;(ku(d8>yyjiA(FQxI*LThI&4SsuW?`_)(Ibe`G zTJ?j1N#C(%q(j(|=0WmvBB;Ng-ASH0f_^d5P3GamFn{}%Qp?cR)7NNxGMVehy6^v1|7dIxaQz5_jXJ2|4`9!f4>%SF+^#sDxe#nnLiq#Y;eNML zL^eO4i;x8K{#7g$4pON5L__(q5O6B~_v-$|gM5NHc6IWn>{Cu<-y5;<^BOb4;3N_X z?I&6#x!{^zU4KjMn<984yVXakO*X0``Be8hF(ju~Sy-^yj?ik5v&kYLBupR|^eJ?e zPAfPb5Tfh*PV>}mD>Cr$;|j8BFH?eM!}+OK-KUb9qD#bMoXphm5S1k`Bny82Xmnbt z=zZX|?JW~0(J*VfE4%3mdY1^GUj1Rbkk>rRJWkn#R-G8k$DR;OQMqs*eAzs>Vu3I^ zxuNJ+xFvtiTsjrb8sO!MXWLv38W`iQM#&2Mxq8!4;nJJyG@UQw_EY`Mkpl&AEy+XVK>? zk8Ze1)+6G%l__w{l|+XO1(I}CaI1gZ;VZy!I-3%1hDlhkM%%OfEC{mjUtMS*-J3bn zWw%XOUuyXI=`C-3kZ%j%fR+R$^JW@wLT*PP0Rg6W46#LW5Jxt~#;yEf&+I@;Rc@hf zIKl-sG%_MT!*<{>N4E$|q5p-B4}I}~eX49}xH5i8>iM^lk4|;5zjbzt`&gM64(T(8 zl~r;!!iowidWBP)jGpNQEe%~=-0BcqGCLe(@#E3)cgSK}%viWq{i64D$sOF+;Hv(g z9Y6$WKw>yb;&Mo>x4D3-GT0~rAN7#3{d0V|owBBD z*?#{g4VnM7u7&yIW(k!MV6*Zmx%6~e>tz{x(7^^5mPT~*e~K;N4UGE9Bz(v z+=~9Q+xPkC=!h_{{7QVF1(p@#^WcS((}m>kD&8DpR-^Wi#Age#jzd}xtXoh6UtJ%v z%h2FK7OH~pxp4UP?r}o(=-_MP7W=jHehlM!hRi+MkbV%~NwC|K;ID3_r#>HPSy1m| zt1q(s(q5=naVr$g*_(-5aaAeqYR}K>;O@yl6Qs6#AwmSMa#Dmcnu4cyES_D=%D8e> zNiQ!bv;>3;HHF#hB|E+JYB?ypc9cwen_ud$E!iK!`n*p2*0#mgVxDzLzm zRv)Szn6Tl&OHM9nJ7Y^lsRx{+F)ttbb^uS<-4dQc+1X;4`|K+#D>s*leN6@6q2;7s z_OKK6s9tMJG~)W=xiu3-cA%?r@*beO?JXu|>`hn|ix?3OD?CtZyeypZ$_f#wulzA( zMBRFE+1;xQt+_?6o7wQx4j;;J*45%ozxo`C>d|l_ImYGIhUOa|A9^<+gtpy_oF|Yb zI4~=@->*0`gDZ`LvU2E0bJKuStBuHfci_YAQYR3oM9@AbuLP|rx4g2c{gc1--RQ=l z4RxwN&mFZ%=LnBx#XN8|tkg;`=^9&IJkbN)GGD$>OEk*WchED?i$NZLnG13t<2iMo z!;f4s!K`RBGvmR>#?lt*Q>d4y$EV`}IieIR5b}u%`fa^VDHmRRpLasz&AbixA5tXP z`07U9aUt#TWtivid!Q`4d*clL>*gSTJ=Q*xnf^KP*{PSlrrqBL=XsSw+eaT2Ea)?Y z-mT^mS+P{#IZ)j{CG*>JU!S-?N9TEwy|$UBTjVOn2%catrT*un{-?sCa>YT84aB>1 zMuyy!pWeF~7MEOBh4S926J*K}L9$$BtIbdFSiv-)3wKGKBN_;rSH<0i%$-w^9!{>V z(`ix%RCTXWz29iWMe*XT)vYY+7L&j2X$v4{UJl8c~>FCudME{By$60M(w48 zrefF`YUPW);Ktsxttv0zL2z%IN&jKB-!1n=U(0~ajlv=yG12fmmDMmBHj$~ zGp*L~$OdPZO2XhjLwe%KSW}Oo`C9y2I7+X{u;OK@u~1&Eg@pvs*mN;fjFa5Aq?KCc zo-@@0tCYz^vw$Opam_<7Z}01^m}+skcXjWRUpM_$17$c`<}f8?a3f@VyibMwt4d1k zL!#GSGK{`ugxWO`5nDa;aw;K$2Wj3ud%n!$H@-J9VnKeG{+0LNa-|fX8h7oB*1I=4 z%LS^IO5BP*P6&+Y-*>Bf(m5>Gfg3+rQ4KpmIx&=x&-AYhW zXoz6SG;5ek411S8W0WF=-xM20)4)50t>I9!VLNuo^$EkuEKE6&!dCVx=v{4pp>*IL zLX#uGYr)1Tnb6SK*axqKCtNphd;CN`vm{%EmQ0@-k$g?Ujf{lP_IDI=(H#1aF(pbyb+dix*NjO1jEncQ+9; zVN1Rhbs?vL)vE!2RiUI!)AGKjElH1Y;Aga-^)xJxN<7qsKt_~68iaJq8b0o=$GkyB zF3yqH*H)NO7`}lxFcYap!>e(=y zQD%K!%xBH+Yv}s03slc^k$)A$r8I)r4+}$AT0J!VuEW1Mkog}YFK69cNd{JbT)BE1 z8e;CoUK5TBFOs5xCjPoN(k4We64y4y5iVaI+#?yedEI1Nn9d{YXolz?>Bs+WAWx_v z@3y@wUi_=0<7341?Cj+erW@a=A>Z7V7xUWX`hCDqM4hb7xHmC<+HU?if*V(R1_+Nt zLJkne)d|d5-#i2LhqFV;_QigG&2nWFr1N-YTu8dQLXEOFf0YA!ni2~8c9*(KQ{nn* zYofjg*`CIa=Ie3cEH0|<3V(IMctGh(hPanXMjlg$y-5Zul!?}VkHUB z>q!qX#&4l?I4k2hU~us&g&h>*#E(_tloeQZ&Nxvrl%=by%9y^`)F}~tn{$hn-bDbU z(3P**M(4%##Cy3R4ESMi4gR!y0!wd_nrqWZU10EP%Qd1HjU63m`Ev{ShimE(hJs_X zsw%zj*fJaE z@7#9|jO<7^+mphs)G&kb+bsXm0wRf^d(_Ya{0}6zua>g;GBY!!Q{D>xbEAqW&jg&>PA&)g}9++&=LLXkJI{0kCzN?K;2^NGZ!J$ zz7lJD(4ZbYOiAQyg#h^U+zLNRA;W*=lNjKmOi?S63gvA_%FJ0^zI7j9r({q8B{TUeX%M_rob{bAavH}e z%rO?CG{b(GR*yJ{+MJp;P3OETJIxhZTbnle<(wbR19jNzEkANZ_~VaeJ5JPsa!2qR zhp~Q;A!xG)&Sx7wus8Y~_Y_1U?EC}&@0s$YhJG&kzQ_kf0~W}xLc)BC^cU^{QV|Zs z_bW#^WI`z!xUkrgg;{_Y^x>Wz;8Ug)$PHjA=sqzK+3${mZ zsO!|~qDpZN0H%^d{9{A?$J5(}b-$Fe;^)PK&vypA%G4ji?_oV0OhayblD)cC5PvE+ zHS+b82DR#AOYG`?b{o6OT zp2KTqu9zmFOG1nyU-~ka%NLi0)70Ia)B3uJ>Ce^_Ip;rGT>Zb|LCVXjW8{8_`E&4l z)iX#Lt{xx%erMn_*?LRJjc#$2nvufXqoo| zPu!kej%wS+?&3G%PHLw0$|=X6i-xlci;CgSa{Jplhc_df_)Z=rixrUkIWPfvualLh z)@+;Hpi=l><-*7NP+l)KJ)Q1Knv!D)A% zuu`|X#^*hJ@z8wlqYif$5e&S3JWNg|jUee^G(qd}Cn6jqj(wRwiS6BAjy`EV(>P>U zP6WfykQK?0O+#{#xby?7rdh=I_GuUW(@M`;uQJ0LEj;~l)^*nk1vk}BB-Eh71mX2YP4$d zoV5HmP0E~RwyqabCMr3ck`?V}`Q5Ag!NJKKuQvr#faMh}Y|U6XM`fQAayU}dhT>Ft zyY0y8T3XOqkn*)*$4i?jj`5e#OpjgGziqSM5M=>il@;4}bLFebNRMDq2Y&TC7d@#l zazTgl7e>|3yoNbnNXv@q7$|d3p9pgf9-ZD~(AT{7v0{t6lEnaT^OY_cN*3VUNvKu4 z!#HrsJP`j+!~DOxW>9PsLb0T;FnXOkf-;wk^fM1P07l(Cp%204X_J!I=j>5C>+7d7 zbL_m*)!N+9Zf2`^yx0H{^*jGUuW1iz=uO8Lq>2W?$|c8sU|dRN2Jq;=`C;?IMoDA3 zo(ZcCCAGGqr~jl6QE@DN`Q3Azh`wVu*DiACM@NUydlStKSoJvj%XmAoJLPwS37xn3 z++AOR)j>$ZDbM04Q?ld-Zc9x2lc3c$Bq)Ym)}Gl%EYw-YHJ-6Y@P1T{ zAcDM3?%Q6HN26wtZh??HMM`6HmGGnV#KTI^ApDNg@IJGor1USm^~pl*TsV# z$gO-fioB_i31$IuH}Wlip5i1r?b1E)Nv2i=bz~&;FH$_x<9fANYWKKlfhuTI*hS zf3w!ap2R%UB4OWqxN#9L3^_6BTs${E&cr29h>%L%7QW=vl_8PTTE};;QP)b^SAc%} zHrCO!GVWGH`HlB=SLqj}2_?`5QSV`U2-kg@|2yu_oFK#-0L>g6h;!O z0%L4CcVEmntS!mK<5)<@DT01Xq)j)C{+qshM1UMaV#yAU5`F4LH($4KDqn%Aba@DT zwe|#kB8Q%%$4H`W1ue(UByKL=z|l>$bnA7%ps5lle%Kv5O-G83rL{XvshbZNA+lEUQs)) zvyz$f(`Yg~;)ntz^^EI0aWSi$JFZCLy%Bhf@kLuXCmOktR?VNI;#APWHNwS2q`CL; zp#7QZtNnoSb~9V{3$;`6&CxhXOxe{D898CwE|2jk|5{Dg99qHt&T#=Waxbi*7ZMtH z$Z0hu>0jc=q2rPd{e=0rRPv?V6zf9i4$A45>gP9UNg%Fkc7eH{zZh+gPuHldFd2)r zPDOC$$f%%N7(VrTf)((Y5!j>p6ERX)j=@{Tt9B@bn?cs*D#}@F&%69^?{p7W0-Xjk z<&p`OR%>FSHt7h#wz11@P0|zTL3a1D)q~4F1YcS6DkMXbK0Jqqd2hDqo@)OG8JR{3 zwVC^_cHWG~1qB7+x^C@JMdVPz+GMnV*=u@c#ue48^xOPT9Ho=*nu$!vV_v{B2;f<* zD!UAc`KkJyv8Oq7HkjL>Qj1O0UYEZp9KPyC9E=e*9&oN+Bv?LajRVs&29_e7Wz>*= z#-l7DwX$h<#%-d^-Hwsw z^yPL8d~s?D)+s`P^WlQSLll`rr;0#I>V$n;T1f3n*N8>0q-ej5E#6xB`GX-VYt!d zP;w3RR>lP-#+b|U#N>F8nbAxLH(RqD&3@LBvB%;C`oo*t5G}my$%TCA_7dZ2tNt$A z-mzdJm8;Tpsr+}t5{l|6hc)heA5;7(>1Ga@&|el}bklNuB^v^g#r@QL67dCmZ<4OJ zlDTJ2cYW&}-7BP|1P`;hN?pnE)`#y(|E4wG0|fTFx&<5!$^MX%l9G_tkJMN&^*suH ztf8^7Wekm;m}g96|9akB_2zmn0rJ(MY2)&O@FH!ms`!(OUaEVaV75Qrs|&qT{8jzJ z*$)iGJTy0}7YAxjnjxDgc3UY#lFSYBJc{@1YOOXJ@9$+V-!N_7egkJ4{;e6Y5kOp+ z{`3YtfQ+sINjWiC5By7K54AQDU0oU=^01WZnhaJqa{7cn*`6wA-@R0M=uhNX zGll)bXm^WE7I&Upf73oApERPyT9%#Kr0Z+vyT1|1n3BcgyFChs9;qXVf0McQ6QK&0 z!E*kmV+aM_g$%BNAMVVV;8fJVkP`y%LWS~z+4RTXxpU{rNoK08HelKVBwpTfLwD)A zV%N7{MIL89xZTQ+ry>xM*wxk5oHX%gVO9VSYWE5VWDApUmImr#9B$g1r>u|{#xd&K zaa7#4^YdA8Sv(ITSTW9#M;`1FVk-jC5g4U^Z?A6LokeNw3u^O19L{+=0}is=5m=eU zvvRGWyAc#?_G=H%&ID0&ck^L=`1^8#pu=?-V^8ELq-up%i0+bUVTr<-XseyRY6ZXw zfkcYUL(ooK(232?#{O{@l$-Zpx*`X*#gW7vWq0^Ylu3aa&p+l<9lgQ<)s5kBmzXFB zmk(-V<}URbuvUolw9(V!L9I)*qHb*X@lul-T)4|V9^tv-r=JcF$J3I#F~6Be;enAW z1zRb_q%xwh?`7g2B)f(hNI9XQE(m75TP(GA`rGZQOym-)1DA5Uki|k+baSXi7e-3XP9{w?l8WnfG zW_t%9VRvp3m4^v8Gh69bTc}U4X-|zGXpP@z>%_C!K{!k6N0LB-lBvCJ_$ZB?zV*@6TAcg$Hk|7PtKvRk zX89XH#XYWN(+*W$48DT$Bes-27228HTsY0^sTA5#qPb>dnA7L_UITja_}NrH()4?p zhckNSJVuv6mu5DC!3)O%*E4FzqGFxM)6UR|yapSjs-%q`&&#me>o~A)p`%eX&6VwrXzd3WM@Q|qsii<}PS{t@In@Yar+{0@JF#Ux;^7-p5 z`Dvz+x;Ihr(Sk7Kiq6scu@d!BEfgHS&rF3zEc&}dJgW~anQ+7Luu!(UT}tp8xEId+ z01w%^)uC0EZBgfH$-0QMN$o^tBtDM9T{JgK?Ojc1X>ndw_vll}>K#?hB!R9w#@p_k zC6J_OM5rc1>%7bp-eW$0uA{ep*;&vZZSQoE3zJ}GWJ{Sr6|i}A5WoI1a1}pZ)HmVC zSk-rkI1X1grt$Q9_+W0hA>o8RMXj~y zWEIAhC52*l2TzNXWU|Dst%Jx|TU~L&SFB%NEDb$+c<<9wk!lyOXdx+sE@Qa@^G48t zxsObSRkT`ygA8$}UmL@@aY2QT#~u6*?i5{JH&c&x+*F&q(dTO+$e2q2OfA7FyKhDM z%D-aEIUYBwPRu<=y9V)Qxbn$6RLw3K2u#$3tbrJNF*oOaa-mO=so z{9hS&zAH~WsP&rE$^zeW`JHdcVbSX5K@J+S^b5^bgYZ-W6uR%>Te;zCTWl|%oquX= zb=d@scq;Mq%iA;3%P+bF%9PG6E4Ddv*u4EN9tM`bo#4O`$1NKPM2zHKNa_(lK{{(p zI*x4CCFk&_J+xoBf@r8J?Oec`x7|l?je~8E4CdsFM$Pz+Tw%ofWhQiWtu66PSK!4C zid_Kn+xC47!}ldJE~w6DoB;KoeX}Pi^mg&M{Keyok4LwaUtFRVNCl13&u6_P9BOy} zavtyaFd>r2eR&vqg_B%=h6zJ`MSD z>ZgIHB0pORu-&II+;e>EKjL_8J%A7T!DIJCr#fR>;gLYM_gx~CAT<=RKirAgm%6z) zt#&+j&HWKkft0ZnI>uJNQ-9I3it{7aKxv&5MaA_BmId0PjxQvVgkf;HZnx7?+dr4l zYm)qf$9wom zhllX_X$B{(b(Ba|gZvkazy6$t~nFA_CClVsFNS2Jfx*w5SD%o#R3r(D3% z4;|V_HF=cphrk}qO_k4)&vMS6Sk5!o;@84z@etl?wHqx*Y&nfrcl}7wyx#7qVF$jaJvKXpgm8fz16Qz za4~@h7Qb5gyI--E*P3;Ne^ zhp;4$**Yh3>+=?>aj<`gbq=T3xl| zRt2i18Sb8;aC-na)-wHHzkfGG5RnCuFPza0IcMIG{mBM?^FG-Ib+58liJn3>m5jIy z4m9F^@#6a#$?I36<>wQpNI-Q+)`wi(;M}*Jr6^8R58lRf^YDL6(Sk^5V7{r$sGCiA z_kpk#T0cmASX>9ESYVB=aA`Y$LlaALGB36?uHmRKsvWTeAsZpgyIB8J^hc`1wA}#d zeA~N~8-U(!R8Gz20mzC_MSA|w4|T)j zkO4N@2a*0YYJ}+ZL*uT8Po%z$3r>c&#eCS0QvR92lMHdV$8|9&8Z#$b_c%t5#4X)g zURPo~otZF12|*Trq7b4BN2g<(kzYbIj)0bXi-;#C@4Gp*glyic-OGK;q&-`--+$zh z*N};GvbcmC4-TYZ?5xTrCfln+9U&K{|Bz=myL=NyOU>FkPdmA&e*ywTgCAW;e{YuI%P9i3{7h|C^K``d^Xs^q&T{BoBQ04(|7W;%Zy zpd^{7?fH^ZzpM254Dl@_lzZweHL_Cv3bVPf)%>BPF(Cd%4-xuKH77p4X3x&}%*;MT z=SPE`877~iJJ-XY+#A>KF>*Ore6M;yf;#!KXU0at0Y|gwQcAsvgQ$WG%)wQhuRRfI z=dxBYYGuB9w43IsGgK32zv{BQZ!GC|`1RmCsXQeqGTu3RHtG!Z0#gC!w=uuxTv#4Q z(~HLtuGo~T)v`qOd#(s%mE5V$G9()9_f`$^NDYwfz_GQc)&=nh^IbEYKy{PygHr z^B~VLosO~qGFod{Cqr#S&-lz;J32B(#@k{Swg*ts-TV(Wr)D#F92X{wHL=6Npp}TC zgsDW>Ri{lqi&$`sMHW&+e}oa8R}$}Ma+#MbUKshh1mI2hxK4^Ae|mLTDTGx^w|owf zln@;o|Bd|}`RDu*H}q@H;j3TqG2UJQU#={IaNS(Uf?LI(Wf*?_Z_S1eI8I48=9YW}K9x&1h2Z+4!9dsf6AEKGl1sr+J1!R(E( zSeB;eJLS-B9-uoTiqS8rA3EI@_Kn^<&6`UiCX?{pIhNatHqBI8sK029!Wgib)aF^A z(W?pzx>{9vt+RgQ-+(iZqfkTLmItk^rMl#<&LZUxdc38CC}xHO@OvqoW8XR%CXlK1 zT)=xj5??h;)OwB@f1yk+{W2qf5aA?zN0w~R&Zb?a#d2d* zx5Cl+J-MWFp0HNjN^5q+i3i2gNtt_jWqqcFacsR?9MIjW z=6qv-L`vRthRgnJK6HYFF&TI@Bf3=qK|rLK_uhj38f9_lz`fw^@|>4JX%++| zP}2>%A&;~z(?=n(=&j=*xjj3C;^=zW+@;ryj|+dq4`J60P49y!x1oF4CD*C9Kkhzv zjIbQqI6lc6Q&P6krkJCMn||B@A$E{ z>!k7PrMRZ^tc_8Tqg8^|TWkp_pm{32NL;+(*3;g9dvg1iUsEgHic%knho6rL-W>*c z1Z$0p-h5lpJk5V-A$zw~Ds?H#yUD}X0Anv7^l#;Jj~e>0czkc|Q61G1;>z5HrMr?| zL>O?c-z36gTq|<@+bksRqXQyvBD%j2u}gb*uTOA+42F-f;BhIWoUIE6%T6$d2?YPb?qL^9#;A^uqb*>|vTHT@w8R66*elvY=QWtj`& zNWkVPqQ}ChyH9*qwJcypB?QRr?d(+3W)MJlUD5?LJBfdC_L1t^pl(mEdqK^pl!kW( zu=QzQfyzi}AnRF`sVrv#h@dci`$@Jag!@04XG1&cLD|KV9c6_Iqs+Xha zP^CmfGYR5QTWyh5USei;ZK1MizoQ_}prL6#U%9mP5I?A~Uy3 zggJgX6R#fgKvfHkS-#F*PJBb&)TX2(pKtV)0=rUq0RlJF*%6Y2rjc3I)1co2RLt==QmYIWuoD;4VXp{*`?D zHdPei@X<*ox3h5&h8(#OQNx!UGRPS3{Y^%0aK3MG<<1(lQbp!i`A;qw(o)jwfR)^5 z;am7;!Wr|`yc)P=L-Gev;^x(b3#z`udu0{@6Js07^ZjpHB}6Cr9?W3Lm$++j>yCGl zA)6lR9xcz`*V7^77hiT88KdRa!WUmUC88cO)7KET5fdP*ls%<(N`QU7r0w=N;y-FW zU|?xn#Rr+mfG@^$t-7izE}4^u8J3%M>F4H>l!MQzXUFQ>Zr)%i+k4 zYu%Z_9ObCrE#hEivkj2xxlanYp$0<^hRY|kX12>N6K(8x4Y=eRn}!Rk2K2~zG$7m~ z5Y!{Zq+PZP-w5qCp1~@)L%}b3Gl8x=>g;^tCCvrLXnE(?%CIgiQf}z_i!;o8{GD!S zBBIIazx;eaRo{8r^+z-2m97lTBK@TdV5kW{8Hx7#W&_1-P^SGLLvcmM_zuekb9x-e zg%5eJtcj(T%&fDvD}+b>^5W3<7VaGW=5A?zH(Dgz|8ohFiHYfkM@*{-HDq0dY|;%= zgkO!qy}rR4O>BZrsXIlJK%KxXDZ6z*TXmXFj+96*oTI01Lr;v6Kx5pH?Be*&vDnQZ zw5)T%a-60oG0q^u&6sMDAEV7$AL5}TMLeWXq77KuEAew_ zB00x#{?AP(!U(i}^!*NhVF}}+uvK^D?kgpQM_q`ghnuvp`JP;#a6EdUKdQ?5V0@_4 z)miI8^cL&n;HYXm>>t1JKY#pxrem?21jwviEIM58gScvQYf+KCj(~y(HIzSjH+wgj z1coe`A8b2#c*^$8kIiyZ$fgPqEfHyoPlt--2J8Qkix%UaCrrG;;;1WaRQnS7+>bDOXLZs zFoE%u(lK1HsT~2*ni?|8fm5HjS`me=HEM0F_Dn1__hY!qZ=|dx1U4nc5irm@*$+=o z({Scv6S}%0#=tk4Eo^fD@5>{Ws1Ih*+8LqHGN$qp%TC(&P^+U{ zU|Ri5MF6Pq%z=g{4O(eoZI~nO$?Z5ol&g?ByY)kE#AQ{Kx9u-t9RBmJs_rz1YS#Ih z9c1}R8IYkyU|&?6#~$sn%N>Kuc+g@6{dkve7bfYQbP=Uhw7h% zl=<0xYc7{77mRgA4TVKLw>2D1ioBfuZdFwS>H)jekKl=+3l=KMBC&y|Tamwa+n%tG zG~j0gaj-ILE&X9n%Hvltaw@#{`TgO!@4?wK`<{Uw+R=!ljWy1XC62mRy(&=0 zU+8Rd(Pl8e07TiDW;23uYwkB{QV8rKI9z$~q(Ik-@ISO_khS_M>L_^d&=hS|8=cANBC_&pNXd>+``P5CRJ4i%-%t$iu)#qAG3Nj{cHZMzWUgF*J& z1cw3>Y#1Ae6e=ZgAzATkqIDQ#I0pFN`j=GSOLDV_Um;$4mt?_Bf#sS2Dh*43tniLR zyUoPp51wB&5|rt)PSQ=XZ{iItSj^uLH&1qy-q_OrsIpw+yv-M4dQ`+=;Y-4)1)8fUu@YR zi7OCK`)`adyl<(1_8qyKwb>jUL@)dDbR;0v%QG|5GvVeNjJMZYuYHDi`^j;;Yy+nX zil3SCVA%lPNwwUbi}&B}8E3DORihUzFGU$mS`+@q8qqfnvs zKS^nTnM`3vbmE9$)|8s9{GRW?eHHsu4`nlanH!pay|m-}QS-(zW%i6=j6XMI%?t6+ z`hnKz=vhnpB_`?qTTtOgE-D)@vcBSkm9+2pVA*mL=azewc*ze?tu>%R z;Da*N>mfsu&kQIqYVKWw#I^#55>s5lhB6=y+o1krJ1Q?BxN;mU1bbE^BLp zljEQdiyV3B-;7(=Gx&1Wx3(D5A>LRnh8_@Xet=$ql@ z>@hU-lYP-VKvNU@T6X*zFs$@ig)iT7LM{)Z&ABarmi?_bTjxSuRv;X-j*F&3^UXO+ z*r^C}cWCAZgcNymrE1^!YJsml}&CYK*XfF zE*?y$BZ0x-m%`UCF;uX5VNK{b-Kfhy;$&a4RCYx=A5*Kf@hkrdbidpL{=$QzmExtF zL>#12k>C&jQ?mGroKk}EeEDb6A04j>$<8G&*Z?q>VZGLdVBwK|*k5BufaHz0!6SfS`X8_R zjwN1Ok)Q7Hir`~xKo(4Q{LSZNR;@xhW_AV|sUf%FLYfm7s zM3O=S89a@8>THPDUoxzOV)Q^3`^u#TlOEU9((~(32_BhQmfs^Gx)Cr+WdwY}FC940 z3Wx8M8QzDdy0d=a%!~a$6XW1@J-)pEL*J!?1afix6mdK^7-)>Z#BUAu-$++`gnMx| zeSMt(>b0(5%kM6{({5!jrr=}&>~CO~xX^(rm-Tc8=6KRIySnvm<7z~?XN-z~L| z3E&0S80vkRG>eCRi!oxvnXF5P26~Y|kD51{-Y~*ALI|LaoGzRUysA4;|H$-ju5hJh zQBc>eA&Zf9cHdi_`)v{*SPB#4zqK6UErm8^#{>q{u@FE#i*s6QulNhZ>GR8@s1FA+ zptgqjWhZzQ>~TGd495UwZA72x-#*{`9ag4CSJ15`221dRXp$uoK_6Mpzoo`qGv;aS zO)eoA60?Bnc2n-Y7a`Jd9$H0TLH)NdR%uqXx;VXTyXw@FDCFKNwCBsaXCHg_$mGwQ zUwQ~6hE~TgW|qGy4tUOYisf56_H`X&uW%foRg{K}S#GsE|BY4v<~2Wn6UO_0USwRc zT0b18o-y~Jd;CFZ)iMHtWb6LH*axUqLIR;+k{F$ur1s`jzgBjv1M{*9v`=@;> zkO|>YD```<6HBPrDr8|DWb}C876@AZQu@*ci?kJSTb?p+@`y7UV$xvi3rNqShHmpg zQJcEQGm_#%f)qh;2I5&$e77_Gh*QPMk=ZJdY!J3`Cm~Ln7*jgbw2IwKT<*=APVy;9 z?i+dv$;kz2`(2z;kIRJoSa(zVL#@WTpY3;@U+#fCrObzu=TYXx_)gzLUiTP%82z`{ zZzAtf)A8qbDW37U==%2dDLrq0qxO%KEU02q;IuI!t@AE}4Jhn^c-beM*)BhhcCbca z&EcuW|6mFOmMWTS(JCn2o7v|=)}mh<>4hIj72P+E9SqubRWQUeB6=1DwOxe^$Q3a6 zcgAWi9FLL{ARiCRvnegLl1FP>oV)xJW&tv-PQD#l3~3g!G7;N(t$RLcvhcnzKkBK( zPo^(_#?~#o-o7uha8XmO1tmQ%iXZW4i4ueN^8?<}p! zmoCgw-8AL97N)}8la>=~_=UT3ZgO?KpXP4@ z{NBmVu4_N=H|TA+*Si1-2k_B2&`Eng9j7)F=)N|HtW(@Njq;&dGYp;$0-G7}*Ucz~ z=HA>%PVk{yd@Z>%_zINtq{ zDL;C9Qu=oT9n&vf1`W;iw2J<~PoakTH2xNsL_)ScX;jz#canVv#oG9;5sC3<`%tcb zD#f4Fur+p%mDndUJ~xhVVlwr(cUzDITz1-Yt9gX%!-AB{SVw>U^yHb&z@OB6=5MjUoxsd-u`zu7 z^q-H7I#?H`S;JqH!vBn#bQloX-O_V&0bJ!4-&ZNxoRs$I!w`zWW!419 zZy-Kdp{4iKOFluA;!DyOW+ftR|4uBi_O^8@c){jn-0LH~BQ8YUcRw??T9mjITUv7@ zvcBZ|jt{V+7G9ezb>atdqF?ZLltt|x6aHbylAq?c;(;LGB=XcyT2=0ArjOk6oQK~h z-kh=V>C=abh=5lMj0@RvuVz4pwhcm`k%^UOY&SdTwDTX@E_A$+wmUu4*(7R54_h`PB+V zt{hvHRoCH!4LMedR<^lTEltjSJHqDB$1+>JI69TZ(>oYGq)wIrv9wn$`(Kv$!(we8 zZx&Wus5-;ZL6{^kXvI!4Rf8D=c7{?lE{!4LrBwqw=r_vpB#!uhk4XRTfzN-+wGoK* zHFe6RYKO<~zDhl3!`w-C;{^;5y1WX)Yg6{z#{{`w-e%1^0u&cJOvOfmc0?Ied0%S> zh1j;>?2wh;3lciDS50k9_+_sgeN0=QiJ;+VHxOn7h}{6Bmz=YHV-7{<-Rrs-A5WZT z&R95FX}ebEL)fzKkU;n~`8aQP0&H;T93n%qi&6BXRQ_l!jomkF`x0znEJOfZtSV5O zl*$pU*A1pkFl)7^$CbNWH&nI-K=Y9xm7!5KaXBBC++5_6|GrzrsF9H4YF#KlT5q6&YtnlrWWaPvttoy-eB7|u7AiK2X zlXs@M#5;298w!r>PIjr~!clgdc-OV$#mNH8aD`sfvWZh3$)ayWAJGA3_O+z#heM*( z8gYUlX(BQ(1=Bc+-D|+|akOR+Tq_xD@0jsDqFcta$f7HNhym4plqWek2p2lBmC@#gzIAF^Zt=HO7N4)unD;?`g=IAM8-B#HNPvWOaL(Ww#kv#d!HnT~#OPuV8@3x;_ z*e3c|)d#3`Nim=fvZ?s28oJcQ-&U4?6K1>_v&Gw*_-sxE>nhtg#Db~foDKbVy>bAc zRH|3e?iuEz5(rCDVCPk|kP}k429KQ=v9no$xy4d*Gw^VA(S73C zjmwwGS>DUDNY|bY==6z>b_R!b^M{p>VH0g`;Ez?RdtGv z`#V6y)KV?KY7cmz8=WVysO3_2OBPJ|T}eEZ3j$>7)4`zHt_srHSO!u&ByFnRx-m`R zPnD_1%d;UDy0`f-0h+|A(fd1t9|ZC)8+$Sphx+Z`6>4$#M@k!vCh^eKcfr^apJM9~ z>!H4@-`(qWd?MPNMNrWKN8Qby2)Rjpu|&Nz#m!(pATqzM}kY~$w6~$ z$^gOAZsf?XBOuFWk9LPw4;O(ki^MpEOSv7OCV@3-BwK~<0V@T?LEKtSrs6?v%eIo^ z_$NzBhya@~RcYJblambPiYH4dmq#~Y6?e#EB@(}U;DE9oxEVn`P8%DJGqf!V0l{tTyAXADa7JBqn<1n?HqBIjIDMSq115GVa)e|I-X}uy$}`E5ijC1~$6*py{_r8K~L+x1*Iu!VcWqT+EI?TLb=y-DAsM+)fvlPY5#|JAjuQ2jlnFB z^Yc5EP=c%JwpF#YiD_JdK&dF5JyH3Q0(cQmK(A^0`b4xuZs6K)9dhVBJ4pa@o!k)l zIO;bJ@TLSad3QtV5O0%1XJv9(eE!69wnewN!PY{R=H@aC=_tksXI?+@z**!GAmgbI zyInCtb%%oA@|kgEcgfFZE9vb0Sm5liI`y`tUvL-orlWQzK@DRYTBitp`at zSMZi|Gc|q$KF*bB?pYGo+NbTXe{g1=h4wZfbZ?Q=M*8A%;zScDITLYrI{isemwwUs zan5xwjj;7BIdNXeTf75lO^`9B6%z&`6b=}*jx6lN>>b`GzcSYuv2%E|Iruh`f>n+L zDmqhbm16Ys=h%BOqjY_6^w;;5*RgdI(%J#lQWwgkX?R0Z`K}exP{3HT-xq* zguTHpasj2-ixlF?#OAXhL`nl6G%p{Q#V+$}Chg65THxjvu#D3!${lO>qShjgR~3zk zcVD;Ye`sO0!9%JEEzzk;37eZmerb}=A!4vO!Z+6ZorI>3_+!k3$0fhD;^+SQqwCE7ud4^ia|JT$!dR?Sx(hwYEhKK?E${{4 z0-fT{2PTm)Ry4{m^l?G?t&{Jl8;L0k9!R4*r1mnKB8OTc$-KTeg%zH&PFu%jGdXOqE+bINHElaxWKcE%inM! zBY*5WJgVU4zkg{lNACQNB&U^7E@2mt0aD73m6`<7hTAsv;_&mMAMo<1y6hMG{YbK; zbPJAz`>Qt=>Q8UhGPgDEC!>uyGhMjYm^sUNy8-UrQkg_!h4zb)Zc&);WpI17hg;~M z9lma}i+OVDmwv6UdzYA0f}}4W-3+5_?pb^{uvJ7gGb0MGSi>RkgeF1iO%SDJASHT| zzSZ~}MnG1tQ|1Flc}5C#1xQ?oh~7CVExJ7W`$;wE`>m)iFL_dDHyyw$`C5HpA;J1Jh z{Y?%1T2M28_M!{15+8Rab>Xwf{5Y&6_Dx1nON0E4OLbEB6p+VeNGaXUMtuieq%12yI7FP#f|=6$6qW>2lxLS|xSH$V~WqU`Ml#TOb`qF*49a zgoiy@w49p_(RpH$a0%Y+;>Mk=&xW&aE9u%KO4KL*`q@3fx>a#&wZvG)jIVd8EOmUPlCjrC$(39J`SSo zCmX_@w&)7&!Az}S3aXC@_fR8i&?YcLQl1IM@q+-_FOfhN5y55~5F>Ry z%Up?L_41$>yQdn zxV=*NdfOM`_iBAc-(}Y`5~K$^(A=(O5&QFajSp|7iNW0stoO8B=2-GBExXXi12M4r zo##utXY5#FqBobsNWACIojVrvG7+CaWJPQgx=J^wF>by3He}%cdM&PYP2A2j6LIyZ zB{l#fuD{=lC>tc&{%W!?6NPs8n?ys_Rxz8<DLR4w>(H8<6Z`lnVOs`$h zXYGK1?j5!%{||t{=(_uobJ?C1b#lEA#6)#Hs1TOTvCz2N7IjuXcCPpsBm?d(-pJn| zOSSwN`#?&>C>uDflGu#B$(a*u=D(*vJK|50Ybknb$B242Lc3NYM&5Zx9K2Y0_fIXN zfy@|#M0Enbmckjv!%?%Ra`|3NGh>BJ)6s2txq+zmN@i_~q?gg} z-c^jPZjr2n;Bp5MU|`F4-~m)+i;&@Wwwor+Kg82GzO(GtLKyu}%Z zTd|7r?1Bq2v)^h84j1!j!(_QCb1L1~W>5G?4FUGc`7MMdY2e((#9_=se6}@$rDPMH zn7nR^7-i>(OBCM(srt9@c9dXov<$`{x*0c=L;mx^eDp&SJ-vBTGW$V^L zvF()T{@BP}B+p5X6vD^vn@Cu2E1PMRXUBt-oUZ>dYP(4FGLGohMX{3?sNPcfo>uiB zni`_ng3Z6b{=HkRjej0*=om-dQd?YO6kY80aH*j%L})h6g@3=);Muz}oLuCK>w)Go zuCnJ}d3}9UNqTp3jt6CfMMVtY!VeS43`Bn;-`=DvXi7L$yloW?sEnRiAu>kX|CG2? zfD_Yn(O2_bpI(_>F4j}#>)>r@hwpXEH^nf>l>_y9`_91n`ydO!r}?wsDO@K&O3CH< zm>4O^ZzdZyr!`8m59Ufcay1@?*TuFt~yF0yJ-OYy!JCB80{W{=o**-8%|5)pt0S076H ztP>&FBuR}%=d~i{H|mZO-zla8^@ogll@-u$hCEPU1*=Mbl$sOWmB$z98!Mwp>H4`J|jKD;8`66?IpIv?G zK+-a4AZl>1m9xcm{-~(!b=1tndI6sOBf3^TPLU-!^9N@^^`Zd3oor#)ht@7}KrC?; z8);9PJjTEVZOx%91s}$zATvv#wm)JIc~Yb}W(G*QUS6nf>EvOfrsqaetyo^NP(hQc=zFrP|ZxzEc#Dbjg))W3bwA z+LaC8XZN4XHl+VcT~`4CfxqZnj5wJLn2g0vzm3q8hk~89h%MZ zN2g0{OXM0Z#}jU8OgtRAr$YGbxEwJ zSIP`mUcU5ebMts^u`@oey1e||o=WgU)dF0E016YoZ0STa%se(ekr#UtiF z<`i1vt46Il@lm(C72KSjgAr_s;AxNS^)$|VUJW2rz~+{F`Ge0bW(&crEzJU`8O8~p zE@}3e1qD8iCgz>((Btj>wtj+^6LvQ0!^-1rxM4Qs{FDOqMbU9H1!_*5YFsnv1FIWC zeN3nKTEEG}@mo{wzw=5q&5yJW!q7l%KEisL7%#(iC>mg`nAx*_-JDWn{UCxA+OG$N9eYN!^9!R0}?%3EGK1 z_hgJA6=R`h?$q5l(_w#A>79JK0bbkNwl7QycP|^%Y`jyJj))^h0K@^DO8@^z_9P%} zeU_#Btx={0~fyV6-B_=-I@R3t3HB@{PVo2xiup!@OjYSVFHc96z zM(zwgZtJ$!GO{oO1FX}(@{}e=QMWXRc!Uc^5R{hg4yjQAQHh}u5QY$Dh?)5|zTdZg-+RvckL$RW>&(o4_OthWU-uOov}3}y zl+P3j<1wqkg^w6eOFxv59suq;>Bj-6XAmQCzq~(W?_;6_0fe-sn}RR6()1>Kv%I66 zcu*zLv75USw~4d*@|R2gb!53VGKAVQzb>!BG zCJy!Aey-v&=44GYwEpB>+=>|Br90ZBXn99}@t10s;;rybX4!bX8QMw)ebs;K(h=*m zF?uJZ5$-D&T(bV>ANCqB4nV{9goQoO<9!Veg40pwzU#gS*sEHk33kL#vHwq!g^uN| zA|?8%4nfBRFrWY@n%&6f8u2}c2hq=db$d14OPNXia?-s`T8hv)Kw$=tnrLzQLpSUD& zeuO+!KKH57y$pP?CWzWG^YzJ2ePI~AmZRZcx;QJ^I*iw7+{7qF1C3HjL&|!I8&$V| zHMcI;6oKEWOodi}_3++7gPbipsiLyT2nEAj3*ko@K{w0fYKcT@AyCSt1iS=;#NQjg zF7tkr^tSczC?zO{Q*=K${_EQMe%BY{np* zjjuThy>Hhl4pdVP7Th9oXA}xv%5s*K6H=x|u;Tfz zLm2XSbkqSH^MGWo&E3{^r!XgHd-4&j5gbtM{eh}sh+*3`+!@*1mgXJjw`0W)%O5xo zd`@VosH`R%X^||f6H^j*9{^Id$d2Ew@x@>Z<`liFOV$eU!%mN1AwN9JlbRtDH_HFd6~+JK)n@&Uf~{HaJ2sD{1BAkM4?FzCp3T*1eXI`8ou zGo$wKw5uB$oZ2aXP;(@q856r@OthvNZO=Kh@=@guhc{24^Gk*K(Ne+tt;|Yl;lFu0erDg=%+Q=8GHtsv!WKqFX&JIo*0Z-0iDm}Rb9VJpJtz_rtFoQ zx?F0Unh-`$OAE`uW_L|T73MeQb;aUR79mE~smujtff{zckty?rBk8Sy`l4t7RcZuy zNpv6uaqb@VoYH{>JX7099XJ)mkNXtB8#%#q`FJMEpvlU4w4$C9$c1E$3tT(thudb`!r65Qp%aNZ8e`%U zn^pS7qofpc{d4ZMk^hfU4)Dwd=7ZdT%d|n>?kMWING7lZV;^+9jnIKQ zkJQp_@n+=u;a9kmze*IxiM0)b@Ba}L;IXuyi1yY=np*F}A zq=lb*Ztu81%F{g=9442p$64P_bNF1w2pXjAuKg!$k&*kr3JtK#&!beCcz)g^5i6Fe zrh_ik?Ai4DtyT{Ks^+JQP@|XH<(O%Fv1A2n!dl15XthnBUHJ{H2S7R5I&^|#U!2;o z2b`LyDNzr0ySkOiHYC2id}pq_eAJ~Sft!V8gPJ$ehHGVu*2^`yQ!eLG{6bJL{X`Ky z!oMtt)~9)_6499q4tCqvQHy`x1Xg5Fvgb0_d|LzyUdr<+H+_kr{&&PtOzd!QmEx*exc7CC1?> zN2^Ol_1yd~`uh&bxZY8DjsG^?%DZ=}l9=O{co=t@dOdPa^QEgL*2aghbIv~@5?^oS zAm56A=&P>ou?V{HkU!I?5Y3sz!9~h3}$=6@QI2~zkYFF=Y@E_3kxOd*op&!6^y0@7u=G8LEL~B)S1p zoJlQyvqYDI`tS%LH|l0tFYbQQJvXgonjz8EV2~n;^%_~yz3|n#mv(>$bppIfpBfh% z2z=34x<>M^v1n-T1?b%Z+J@Zc2r;Rdu26p2@xd7b@}tQrXgB9Gd_3Yr6Q0ic9q*jn zRjH|FxCIVK6@t#=cd-gdaycA6`Sd;k?%&qDAcA)rw5bd$CQ4e=CT^oAC&xLzHhx=W z1|}UUU6fot9q77qArVaxZ2#u%Y2xBUES}#Gn!hHgvQLrKuv#(|?2pqA-_@zD8y@}+ zGeW%tA-9BosXz1d%9!|%raK7?H!s1UXz7_D z`0C`B!5W;36~2JnsT zG47P{&o`Q)#E_dCp2{KaLgxe>&ja9^{Zw{gj`8-NOuJ_3t1X-LK_wtu;L_ZRuk_6y zGuVA4v-yP|_FwwrCx-y9XF?VT=DFha)y|#DC!g-Hoe=e+6kH$O<|Kp_l-@dfh)wKk z2HJCYXl;}LC9TK9t;?(hk&ba{OHVfHITlML7(zVYi)R&QE$n>)DNvT(P8kjDo-vG>}mDGx75Y8 zI*#eV*CGZz{*B;s73yIa*Oy1%(W*VWmWiobSDAQOn9qRbRf>~4gP#Wy6KeLp0C^L9 zu>OtXkQeHz>*(v(B4#!T>_c^Cw?E{vV*+p8S}Fu_O{R|5bM9ArED#npHRV;?^zPJI zdHbAx8K27eP_VJId-8&ou#@6168>LsxF5)XBSmK*p~HeQx4q1GH4miv>l5A9v3UdNW(|$jQlVYem#< zq$SUq5xVK)shZ5Qz3hY~v|oLk#PjO`ZR>VaRqm&vmOj5Z)Yg__O_g*sExmi#54Ll6#Z1x;r zVCp_%7o%S7&MVwQ9c%NtPi~tWOd*FY?T2n0=-7+qLY?k4DyK&gxrV8HP?d_usX}*4 z7g{aeX^j^pu7z20NC7r!M;iPU$3m+`u_$mfuo8CmW%RR?ZYqYiT*_&g$#g=%W`Dks z=1-sloh+3YbM3QXz788iPYZ9G#7ybdTTF$zsS{U?!P0S`ot=hY`?v4r2_G#uL_br6 zcGMYwdo1vMZuS-DZ_;4+Za0f{igr$zU&chx@A|2eSb>-4n@x z`#B}cP5?p)Halp9^(y*KZaFeY0*@S8sKjb`b?h6h0W|+Sz!vEhlDuME5zJz-I`)01 z;+EQ6Sk-1w!|P5h)>w0rhY{g#gN!ou!}3^hqSqmh{*ybNC}z?InW(5tzuh>B=H_Pk z&$yYhhX4b>YAlfg^5WEn)C`;~>hcF2h~@nj?anz5hUM~MH}3%P zZFLF!rsxrNv;7%Df*;Po9VFLyY-6d8*&9QG43JQjI9)4h4f772nLt%7UHTBDmIUlW z<{2i?xOJiHI4>ZwJ^_5HD=idyU78i2l!Ko?N~O!?_FqbnH>#8?mU`8HX33S3U>vdd zYx&RP+|!g{RTZ4CM`7LVj7wqx^swMLTDvi7{tLG89rP=jIZlg&LrMeHQaPo$BX(xM zYoVUL%&Ek$G;h0|agkuZva`hH*l0ZIAH2ZO5?aU<3b|FX!kwINMmH8O9qzyndAt(4 z*pedDL<;%)#cXeHlN50*EOShC2wemmY2A2eUUc{V5Qdv9oDNbdx-HCnIvKeFb-(GH z92IXzU3<3PREVVTYDjs;;PvEPs}{=;#Xe*dKo~0H#SyVIta#jLFj41BJEx1gxA=GI zbHFf%ue+TX&E!B=W8v>B&vw343tU!YJT!!%8{g;#ksTx{o9_9P;+@z#m-L~X&2yEz z0qPYQvBzDCVd}Yq0w<@D{XKx)Ip6jIgJldtN#O1cayaw1suQ++xCx5W6;rIT{elN8 z8{n3ZLYLgU)YI~GJ-w^A=Fb1DqGCJtp6mTcBar>D*>)Sxxw~+C zqR2|rKGF!8Fs8F1m;F!oy=X#$P|=Bd;=MbDj&|T$@Bw5@=M(xOpqUe~RoEQ^r~$cq z^J(sii1xj1<(BJBfCCBm1|_QXlRqpxRrW;In4rO_wxN{@n-j`3`-6_PbD^R*gzXdK zZ=)q7%EQonN?9on=jgM^QVG~Q)2}%Pk$bSx7bCxH6alpjLEd;+U=_@f17}#+;_Cqq z5kM#c1U!uHr#Rv6Acui4s#J!hV_HuL7CcX`qxPXd)53+joo(86bd$!ik z!-YKD5LE3g>udb{3p9pb<8VVX91R*7%XNRay}VTSts>#;va*NX-W#7V!S?3niOIKW zC(W`tWrt2Qte)*DN`cTipLbL~PUub+)YrE&IZ`K{@H)+bj{mg8VSm--XTM1D6>uT( zER*n9P#02Ovm;cwrn?5#_nltkt_msSbdoI7yH9sRVXAQP#t^ucVmSz4FCW1B!g%?8 zwT=*o6<%6L&zp*=7GlXDWy=aXlO2=u{x|Fg{s9=h^}G~6&7u6!C}gXUKKK25VcEb)EI@l>DSd4MzL|vJF=6H4i!ievOZBxB>k#^`~S)OcD zyh4n{qF}oHNB!+4FpJd1YO7F=vILJ@r=X-9Wv9_MSKh1_SSg?TT}==+3FRm&Hfr`7 zshFe8*G8~#9a2bi5ohtoBgt_RPScH3bqJ=9Tw}-leE`xR=a|xpX+3{)VeSSoL%1h> zj%7PAAR0=9K;2a}bHt9`^l-g3FEp62{tV|tSAh)QwCPh8T@12{qla{t+VmB;o-Lty zZ_<1@Nz8R@3l6Saz&W<5s*=oO9c4!0;2pa68PlssIsDS~MeKEOqjC~L+X-4gANY~) z)V=eKKgz3;8^c_cGbB$<99qH#{L+mA7SY7Zqj5*SRE)&EcjgYoZ0eo4T?jsBU9#jl z7fY6)+sMhQl+wY|+N|)jc|1$TEr&v-?4@jLQfZJ;hr5=d;RDrM@R;K#I$VH`bJP8w z*-OA1)0_+)qGzwi+mD}{%Mp@#_S0r}R2$k!Z8*KGbMEKFR$9Crz$v`yAW=9 zjRCw1Dg>}=`f5Vw-tj8)=*dU8WJ+aM#O+^6U$HkzK24<;#*1d>e;`}w;9h~fw48@E zU!@ct47s>e#`^xcyoa;$x#5I8P&e*6QcYx@)HLmdyL3eQsYk4BI{XGRPk;o1Sf!)q z=k~7{C?pjQiA6r2e#ZDg3lhfrLLk`1LCk0AjnA`vF!nzw#mwA0tmHwVI@=O>%MO4I z+kEVxRdA!!qDS2HSgFvwlpWo+YD}))c){z40lM`c!*V zMZo^o6`m>%e{IavDmlf$5WILa@{RC9Jn+`OTNtTG0v>D1nGGkXa8(?EZ3`-|BfC zXww7L4TaHuflr%<<7%R^0v}Jr(L1_$kpEuc3G_Qh3RS`?;1Yl|nGh;{StuBQW&+Z zCkWF+i<0$B1dwAL(U6Nq4i}BP?(u7S0v_uIX1>wu^iS5MNRC>#y5UL!gBijJcdj7f z*=1K_rR0cKBT~NjNypy#HyQQ54)mS8!$!P!1EKneE*H7vx8w zFa2c`-{FBgZq#1c#)?vCtWfs`G(Dz;hMG8GO~4(0Z~;Bw86vfpYCrvsQao#Iu}PF} z^^U)L~V4?<1irP_J6<}zWcb}x2+O|>j$0&baR!eVf)vkH}7Wr zOaRjwmWtI><8Vs+ONnI%{^d!_qhD%(kef%Dwstb&J-Jou_Uxd@iG^dzZY<;>DM8l$ z`(oOt-4C0dVg2uePd*gJ3*lX`6XKzz`@Z(bu)!qAg#vwd4N62{^KP}&IH zddAb^1r8eqDro`W@3zB%3g$ql?RQ;@Zg2A6zAcglY+1lPIOf}xNY)UU_~-#2-b^^n zE5=bUK$tn}%VV*PUV4M-FT_oASIJ$XI3Fq;j7Op?o~ekhsoD$EN;iJ?zu%AhN(Qat z{C=(dh;~h!I@y`4aLWZP9zgjn5kp+r!$02pqbtNB!!mit?avMy8nQg#4Dg8r{aN=x zFvC=Z?$Igd(G0D?hlMs%t3YbBP4E8H!q=|Ox0qm-uT3BNn?ZTGBR}MKQ3bDmiX)CE z(R$Dk;gLIlT5G(?G+mzO0#y>y@Y#s#d~f+YSR{Ax;wHdOjnnWoP6&e{n|+#b>dkYCZ9k?bSfVwL>i})y~MKCq@639;OOH6AS)#+D~Q!lJn#<-@K{cPt64{kO}QI z#S{?QlA_GK;1`9?ZlUXEGEo2p^fB<4@w!}&5iRy?I`2U}kc{wBZBUH>Yok0Ju{kfLt+8G1w>< zA37Aiq`KNOmU8=VM{otm;u;caFGo3Tk7*OaP9>HUO78Zjm^2WT092ztFbxmbDtg8S zPD?+}DU1z$WB4rD!x)5NdO={d?#Jq(h}bQcN!k`!0jA#S4H~TyPmm`B9WUIi;uX|C zMRbaT(54v^`i7-HV&OjL$ENy^yhhAca>2o1f9ixyF}C#P1~^3_NoZK;Ynr;Hu&`P} zIPZwPuwE@X8|Ip0c zeg(olI^g&67IKqWE9CAPZtsH{rcfa5%e4Hw6EAe5M_^+k^uqr6nOvTgN;)VXWGe36 zEajpMsFbrHT9KA_!m@F+X8JT|{nD>=6Dgg(G1#w^7)4M#(>UyBOmmdC@Tb@I=g!!= z7ujQB>Icgb6a=;jU}l4NH2y6&pHb<|2oeXtiwRI@N#J*{@4wwnc|M%C5c_!}fZ$;) zJ%R0e#zTKM`z%z<+F=hCKHo??wKm_>MO#4iNz;AdXkaJ#o+pQd_ zc{Efrk5S2NAW{jGoZF<@z2reM6!5C`cOTtX_Fg)-nHIH|_uZm#o0@TJGcD7LLHDlO zU`1^K5B47#XxJ5yP&tpzrI5lcwRMe+jj>A|S>F^r1$u`?C-Mx<F z3r!MVSieO@Yh$q#;OcMOzsXix$<$b&NQ!m)Ow0CH|FjXzxY`_c>}? zYbp_BLCpUc?7Sxqwf9gffXzAxnd#Qo)y2JDPyza5>1+M;BA>v6$olfUqL(?4{$j<* zOcJ^f2B_Gzq)@-91e+*9jrS$;*J4dgWrajjktu=dPm4>iWt2>bb(QbunogFC+_x!( zH8woq>fUQM3J%0zaOg=4O*L>OYZ;^EXDn0g{`NM;U>ct%005$5mg~P`8^=cTTtXO8 zF1-qOKrtmo#sh8`)_oAjOs}GRzT?H0M)mUxoUu+FFZYu@ZYmIX9$nmF%gIeRq43Bx zPe0d;NX6~%maj*nv;Fau;Rkn^A8fD_VX-!S^5{FD+zir_Nx1EvN&^hZ;umuJ&EC~C zH9ay{yYc{xnn&p%LBg~pEROP?HdB3l?eB=H_FD-YW& z>8QX-i#vHgde^S2|KmmIyh;xlg_c+U^quMG`;li*I`(q$%_uvXKEtvKM^hCHlZTWaW@B^l6p2!xB|LJMxIa z;ju-o3uK|_DV%px!>S@(#>wEC{-Z(e+pBM$bqEkb`tHFQrhn#tw0I`?$P`umZ6Wft zA={ShQH3zzrsGaUyu!BIl(}BQ1hVJfs?mWizYjTOjyzbSZ1-e0XGE1JfCO;tO)mnw z!cZr9ZMLcIhS&RXE5~!8*Tdk}_AdO8w%?@sNq+4OUkS$`u+FZ)m22b@2G^EB8H3rT z46k!_b{<}H(C+nioe>O0$z*{E?_$+nE;eR^Yv^b@=n2nYsp;|$HL)mgTD!9DCww$u z{j<=jmc`DbHgsUoYQyZb)O4JkzO)P42Ky2ldZ)3h^{G;={qJgv6z^*OX$Qcs1C{jb zvS&Fn-9H6*F_yb3f#E7x@KYwC9uqNu?eB0}S<;}?QHWAWI(2<=Ht+*L=w}(Fmf{s& z&dBc2Aol5>U-!moKaPTMr^ah#-_tHMS>=i4shygT(+4>@gHg29gg%?r95u^3E)A@O z+SE%{Ennu;$b3@B20UCRX`I%*rpJC32Md4iV=$)(!Y$YCrx!6ZE*|f;2QF@~STTJA zMA@6KC}YtwV~(v&&tfA%*hBvi9LY0Q-3*GI*HD%CT!8q#IecE7G|+JQOUC2&U01d@ zG!rV90e`BUop}mBH-mRNavOdwn=_=6ANz?Yv?C5$$?{r6i6D@eZvx9GYdd7Qrd{YskH-Y#oI*e|Kgzp@KVC5+&&V1Cz)+^iSQj+0wi#4tfXxiBCzmK6kEky0<$U zC|^Z0*U@EZtwOVaD%g8TLBJ#4kB126_kw(Qg{M0f+g6sFMk@DP1%qLN2+ zwuF{?=M2Ei!>VWhE@+mv6Z*W>(X*3_IG@IboLCGvgz8Bkk^0e8xc>KxX)zjlFBR|f zzx8^ypuZ~;;jIY$V2L^2%|EQx#w-=p`nWD_!)huiyOiNtoF7D|ati98dc_Cxh+Js? z=Z6AgWV1}8cX`xrPVI9Qv7i+O05}8aL)Axe)!jwF)pmId(EH_?T2D}Ui>&DF-jk)% z)EE3@{W0r9QN(~E1{U@Q#xNuG_tkg+w*-Rsob{sz&lqypfl|8>siWRef^CxfMU0Lc0{D2tjk3VDk^JW4sZKyEroh{%gt^`DCJYC ziFhi-ZS(4&qB0R?9_9jGOJ-*}`em%Z7JNOLWOxB*|16kcbGM=TaOg_7)=3=O9zO(I zRm<$dsB)X!#|xnML8P66PJgp4KX_%bsi8#J~_sZ3vssA4yB3B!z#3g<@c#K|1E zTJ-9RtaIF~XJwbJJjI^NIum8ZvR?sZ-L3ufxjP(kgfB65o zSy>1H7uf&wo>BB}M?=F}-Rsw@VU7x<{E(3dZ&3iS%K<5kWC+9_r6j&D{8Uopa#1fJ z>ei}45Aj-BpUf$aj!;$yw0nnYIX`N%L=Qv)#Rk0C@E2_oi?VrSD6D6=pU>PNWqCJ7 zv!QKNS@GL@cSC+zJNK4!<}-EWbagMC7`flD+LoKF44xE5%!luGUsPEB1y%sB%i*_^ z)sq~Bhgw?5{Yfi+en?DU`M zIB)03_KkmVEcr`CF!35{P%^rMBFSc0I<^t0nyp0FUR2z$=;ye;o@q=t5H=^LSh|35 zQER4M_7?qGSG++rF7LPf_2}BGdrxD#rB9%BqzlRUhHmtOaR0zS0dc z^PUmoys9~+twuIDf*V&6G)%>z)w>5xSt_vet4rD0{{~Y4FqaOUzN|k4x4inx7bDGC z6A!>N=&P1a_zW%zs3*ahI=(Z75>duQ25#PZ0SN3ES}4VD(u+TfVQ`)(KuM-hNiLt# zSJ?eTbw2j_tfLSC?DYl@zkH)_A<6oT&B4@UTe+w61DMF(U3VMgC6T@cUZHe7Q@GcZ zC@cAAIm57-wseiR(-BV8w`~5u9i1n2U(xgjktko;fXr`2>@+YdbYv1UPk(jtn5T_z zT;ssKE=5*6)f-tp{>FL$meX96`h)luP zPOn`&edm0O6%SA;tH4_Fz4;`SS=_j2&(Rx-Td&jI4zgWZ%vU)|9ku-AhfCM?B++0DR8c zJC;lAXa|c0EK9qOLN~sAwTHBTXjkF-$^~Y^&}|xY(e^ADuF-ZdCVh+ApL#)wBlW2l zR~^7Xv$NSf``b@cHxa)sAnV9xzVeQYTPnBRkwX1g)2~=0?$7jk`_!6>M$56+!lKoW z(tUy82rqj=@QrASyCQZehF7WHhFKX0gl_-kY94w66ahOYbHGc9#&+>gCS3m60@%lx z3VhN0Cv7P2LS9=N*1l1GIP+AjyLBCkEd2!7REru=;;V|RieFSBS&Sd=+ma3Kyn6Sp z&*#sevAB_&2)mfQi2KkvGe4xq`6)EdX7U{&b9r`l_J%xOxjZP4eb*d3J}}?y!x-kZ zeF(dXy>!dE8%y!frdSMl5f+?FemA4|Q`2+lCon~(yz-6%pfUN6WErd)rayJc<~g}of^m%f_g3CO7^ z%#9gRDB6s3XxH!voMLJn&#fjs&%qO+d99U1s>B+ieatt@!Ispe_Hxe6#tpCUm(bBm z9}@!t$*Tu zy!%y}3y|bGXT+w{LP#>D#O&;B!aRCxhNiNv4iM6$K#s$wfj_T5Dt*}@$f6688SG={ zJxF%TN-Njyc%RC)A}9x2HORx}QsgGK*A$kdo;W={M<#e7U@zd(q$~HyZ`P>qGZ}1!WWoX>K-VF5b(|ifUp?K5uTa zfJ?m7^X=cBIpA~jC9_4146t2YFF;ww*j^XW$lcLWo~2TrtQJ+GMJ<0n>ru-kO~|&r z`sTMFYpg>e1baRLGSP48JwuuWJyFNp09Mi=YylOnil2a zVdv-188EYFZuqtN9bE8B5~qSnC4koFe1sg0Xh zuSFFn(%hn*y(6L(Tol?EughlRQ+nd0i4z=-?pGo@nieXF?NO$YmzBLya`<6FSnFj# zPt*b>@3ht!sKan@maQ3vp`8C0$%-xV6l^=lGO*P>veg%ByC^C z?$-XNc5U57BAl{;Q}iJzR54c`>K;6uWDUX`^=q5i_Nx)RG&Vb{Gw^e-r+hD;?M=jK zK+W|1RV`xZn^WDnJ+9&>ikf#fnq&LBJgw4;h42c(dU}3>B;7+B5e9XYxq`&{78xo)JHj!hfZJ)FuVcpZ^0lizOwP z587ZNm%`b9Jwmp(w{I1W4BddPiaPikzT5^2YEAp?)|~cJscvO0aW_!@1B0*w8OARE z`De7}zPO}}j!AhBsF4rUWOpY|$7BhHeYnMxM7sm?u+h1+(S68W?g-vdaFhp6q&i98 zeoNvR{POtBw1nUc21wetRDL?(_dY8`$w-2USA5!Rde-gfh?f11%HMzTu^;}r<7=f7 zFvET$2>p((;u>4N#9`MSh2o5BfQBl%H3y@NNOcK)OwAX15a;IJ>IaOM)jG zFqw!w&TnWd?|fVQeDb@n;P#)=@8Xb-t&?kkORuq^?^KwzYk6IxF5jC;AF2VAV>bN0 zWc1X6zrlC;-I3sfg9G}yY;7wIR%3VubSkWE&>VV`5Q~$Y?@L675KS=3{QD?%^bB!) z){lRCcz9?dFE3vywqh$z17%%Z18aZrunAV67WxT=^1Ce33IW&F8D#MuxhXjV3GlInZriFpLYH*ic`+C#1IS-0KEW&j_!**xnV6>IDL$x2ny656z*;yvQDJk?vAp#XuPRbqbl0CZXG}9oI zjE-nTRHvU$nWX^~!aq=603lLC)q=IdhB^Q>)ffMdE^R`Nz?OY}_hJP0fXK=AtIFN; z_!}VP`B3qFl9w>Bak$uwN#jlEzm|o3jxN6D33ih|xL@KrMs00E6dWfF2KW1TUxs-* zoC>2K2ZIHJwjUiS7ZG@>zZ_DpJD1oak~k_9MlQAdY1<`mv4Xag_+i%i17%wf7VtCF z17d9KdK~79QmMBtlTYz}HWl}q`5AsFZD^My|q39rqp1|$Ler#g!!#Kkiw})qBtYm ztv8b_ky_?~55>=-FS`!Sf}8hvbcsU~7BUnADo#;7H9{qB(NH4JEkOq3SF|B9;FZ!P z$flOAS<64mUhP`g{wW|=f#KsE*WxH@ zF{q7?^&g;CXvG%Qh*&s zbo#dKJ#U!b!-)C?qKBvnt_tz{p#ClVX}P`o^GB1EgNp{NdZ5t_}xIsU6 z{q*0q;XQy9kFG*HR5JVoAvCUo{=L|GniihzANso$f?q$5gO{5hy3P0@b4aU60=)tX zvn%?LIROeUH=eUiN|E4$ws2ESht? zhh-@-51A9L*{W=Oay3|(q-s)1Cx@|hWf{9LTH)P|dxY;%3|i;06e9A&veqe zFKivR>DN8^8xkJLo*g2(L6hpL-aA(IzHq!3m<)*nJ(d;w(VmB{*7p27VXZMq{@8Xz zuJ@IDdj9hBmYe$OjAt>fh~0M*C~ylZF#j1hT9sIJKGh4sG44tJkeQRXvMuOueZ+lU zk8756{T}V!7Qr&ILf;cFVPVjDx;WoOdtJ=|fBTRz#nF%p&bqj}aA(G*2Xs3BD0Evv zGFb>m&ZclLCV^}l`R2_VxtpTuGQfb9Ss`w}3G@>-)ddAhkISFWtB@gPA`~h_d%&Fd zl?KQ${Z9Uy%6(_vlr5LmG=W!LS>M>o?W)=k)euAX+?`{FitV)gn_h8Gf<;OcG-jW^ z1Jk)6smN)8?pQpqC$4hUn&VinuiM4*Jmut0qj0+97GwN)LsbM`H2C+7CI`9)cZ-C& z2Cur%)AUH$HZDo+5zVIqrri`bssWaK_wV}CSsqCAz|&fX{Xc@S$xom$-0#_$bGC?X zLLHzFI1`liFRQ38Q^DHDJj0e%0cg0I+Mo59|EyMHOIk~Qj}o@E>vfKvdTeK}(Vv0* zq&GF_&r7Y&LB5agaQLK(!C{1HQP(1VmW2CLp592G0kJl(Liz$xX}pzfRAo-bPXS-- z|F1lx1%w&8sR|nt401I6Ny1XEa=FJ{K=%9;bXQ~|TUr5dBj=kg@0?QLG_T*VHFWW$ zxBrh9n!j$Bs>iE^l$_$II}R!*Br3}9P0mk}H$Uc1*m3tHzx9;hYWa5YsdCS{EJrR? z^Fa7-E+^t7SqIuZ>laf>iQJ_c756Bg4#8BL(zmiH(M6gL5Nn`g^xr!S97ZWZGs@{J z>Auc3)_inSo3aMyHg1SkaI*3yD7=@-KRak8O+@i)2pdVOZ;zeMmKMsg3AgW`?6g`y zOm<`DkZt8q^X^FuWehSJ*ll9-D33nS0EA4E3%E$$zq`r9-toyy>bZMIoUB{kR*qKy z@><$ON0p${IE9Kqokd>cw%%!i!5c0)Udz2;C7Rt&w|%F=TlfEm9+!o{b_;~oa!K@V z815;~;jb9z89(AL(o6)w)%Et}P6CjE&RCK{`&Rkq?D!oTL)KnZ`;TBtYC(x30(KFa zDM=N6u9>j*eHvcNeY42i z)@N+o|3SVh{TH=XiTAEiiLcG-4HMJGWhRn}J>AKt8@y0dZ{%*&Q;RMfO`mmXgWAwl zdchWx!fUH$X25O7??6Ke&s)t@!0|I8vU zx#6;0X?BLCsEo*IT%7q5B)vVky1T^m5j9%l74@`W%*Ni^d-Sz^%g<5mhI z7(_^rhezip3*W}WL!sX$-oYG?0_Xy&O>ZBzNt{a|g2$#pLH+;5BnkuNiw5+abSn4q z+3WpKSTfDdDfZ?v9F@8tKV1qWgI+BrWvYN`yM{s+P0>-(#Em(BUD?oPT)_JxWb`py~xv;4) zcUFA?>y95>W*>ep5pTCyfU8WZ*WNTQciNt8JX^+dq z;+@J)OIX&qEQ}wix6Z+3Pd?~Zz$n=yb3eGEekOZ2Zu1&4eq!%r`Y;Wm$i6!bVbmoP zsj%-)NZp-#osGG~mn&ntzX`4URMSx^6oC5n*Q@%jbQ)`@@{Yl|_U0@*pZ=?~63B$A zL@ThBv`gx90TlH6SOvSZMF}uZd}~hs`>e>qZEkLw_4Hy9_rA|YPtkaC@LvS#)mMO^ zr77)XEuX?Dj;QQEGNL}$P3y2-oGMvAIIg9GL>8r<#F4Gw#i7(t8d17YHWw5E6oTLnQI-OnV7~;^p zB)v1MfRq1PDRlXuq9VseE z5+k$ea0yM(({-8ICCO=r2j~R5^bO}l7_@V8XZ8K+BG{nN+6uUZSSV=MW)C=5FOIW; zL~bDubYZkMi*vAq7&0#VnfNj_|QEb;z~NTpftQF50o ze_I;p%Ymfr`L#Rs&iWp#cR#ck*G{qLaXleM-`3%7sG;2FCtwwycs-O3gh)U6p=c-{ zC%Xa5s-$eZ{!U{v#yD&GQ~IN`RZbyfd;gI34*N;hOf|q*z^PA#uGI5q-RdXZf6(g3 z;!!HUijhA)F#Pa)Q5zzy_a3=57G|#pv2dsqhxXA0Umfrqi3$3odBa|9$>bfyQvT)L zj0n437+VO5B1O`Ccm^hn`RGdg69iddTY*{+DGmtZ;r16hJfhoBW7Y z_Ga;aQ8v%y0R4~|b5&ZlsRxz<<`xcCO>lbZbJAUy!hu zKraKfbEp3`&j&0Pd1Vixgt_PREJA8Eb>F7MR;d~J4pFV?2D7^g5oQFEA+x&OO%7+g z1Bs{ACYsR3X7xsGJB(9x5UW7ZFYfn@+s5IW6z%LObTchaK`vFn_jmCOwTz*Muv86j zF4Y0kcjFi24)Ln_)NHn&nNXp%Bj~mZfDmgeFmR*`T$;fo*j#>6`tz|5peEPdggo|5 z*xYi5H5-FTkc#IAZtZ$k$Wz0!N&|jW4ge#cH4JB;gaI*RIOW~{O65R+Lt^n{&8x__ zy&v8$V{`w5=m~1M`nZGak-3COug|1mog!H$L*e>S;ud>OxJ%h@Q>^ngPX7Xt<`6C= z5Vt;n1hIjnLuZg+&Cb?9TD_D6h!QNi$j|6jifH` zjRFOwAoR=fl4Z{zK>+Cf+0Dzf2GwlJi2)V%L6hvr3R8`_q}AXLv_of~d`I8$2h=Vp zYpY=TgI<&xtD*BKMnb*_hq`-iV{nx=N|9jKKM<^8DNs&(XMl95IN?8|=(#}mbkcct zMW9P`A%rzoI#}$>pWrJ7d&-|$pIZ;?vq_JBk{woUKYR7n!@Y<>rbn+n{5?It55eK= zWTW(;o0=wuf&wYGvE19E!}n!F7!e_aySPgs^^KF$S{R%osZ+$CED<25XdkYw|JeYB z)K-dcej84*HMZyz8ix`@lvr=U)f~IvWJ}v>)uB@>c=6!zdJbP8l4Z|4o;4=XAvBw}802tb(KMF%yY zJx?}QX%L-*BPjyu1Ql}Udu<|}|L#;Cvn`FH7(0jgp&;gz>w4m@4?0KRALi2AhRE5Ehi5o;& z4cuHvwl{I2xB2K{;cWKd&0|BeIjPiUQr>~VTenV8=Nrj|UseQ-HK zNN{q=GekPaqL54`CxCn)!LwU}572=HSwkIWh&+dY;dajbPKioHyn zYJ0{v6rmC&DBOQ&_~Ys2m6W|}5k)QVr$%p|BNJe{LOPxikBh8EZdq)!d{3ck(yf;J ziJS_`2rV(NH7oZ7UUtixs%BbDn?#-s#DAb92p0iy?jqmL>f3||Z zw3wr^W3+XaOnkcr7{u4Uo`H9Y)^d>fCXQFUZtk` z5*WZBWLo`ha9seW_kWe_kAdRiiLJ!9pcx$EoZ96+7$`G!!WlFaRiLsLm>Dw4AuY~r zo98dE3?lfmkuewacy`o3Rf?%mun^afZ{@eXxmlTRQryzwWd6m9EN}b9qS}X?=Lfdm zE?y$F;7)26iN5Y(^G&VwBs&Pb604j}<90pV?#TA2M76B0oHmg=P~*YV*Iv)Y=WxpP z1umQU=aJFi@&PH24zPRzt?5FKGCDmm^Qt`RN38;%+rJV`yfMyQ0}+&@&<|4-`B>k{ zPJ=(NaQG<*&11hPsLLluU5?jKoa^;2=E<^wC{%m4iZI`rkr9nQSFs>K`typ3N23W-rm6LTx93HKb+9n7 zeZU1odOimKfq;KZ*{%GKas!~Je_JsCAQ^PFjcFc!?9o1!y0PdtMXUs>B0hs5EU1dm zBh(;Pl9e&jL*eGj^Pq}jA_zqcc0Mdo8XK(}I){!liiDTcPOn_+Zt_y2^~pzy4C1V9 zY}6wT^oOq6a$BLuguk-wY(H?>|88*6u}*zFU-o^-wYQfFstutM9U9ibG)rL|_e5Bi zTCFF^<-6Kpzw_-1Tx6?A9e;#Mm+Ns?E7aXR0|tP**x(JK^Bs&%3J5;E&+UvtV3wZr zw>t7bx<&R>cdUv$-k)FsVBb67>(f4$uofjf?L<2Rx?|FBsED49(WXJuk4K3&_pZfVG*3IkBl7K~-`9sr-+342O; zB=vD5b4Te6Z?e7vC|wS?k{mR?{UF-m7m*d=Li8Db_xkmH|4Tfg1Z+nS8&iy%XKWi2 z>sE|tLL|KCzhW74p-?BmMVyUv9sN-?-%kXZD1V3J_>~WnSl*tmodA%_K4&1ytErg_ z*2>=Y_eg{z-B@+%?nM361bzFfB)k>coeVt)K?A_k$(74 zH2-5ELW7)!h~Fch>PSf(L+XA$YS#*;pHt?gX;K04I{!ro0Nc)%W2X)1DzHY$+hAYX ztfzu6JZH_7d|av`C?j;S!S=b5sV>o9lmjj#3H3e3Ll{H~N#|dDGWX<3 z7NGoxv;IY%Wj)4#eTvU*E}5I{c4sA$J~Z#=8O(T!<4kmA!Llqq;c4H!jG({A>_N16 zC1dGjBcM~P;nI6@k$thy&Vkk3XK5A-cM`#Odwhn3(9*4uL#wN(x+8yA?Rz02AEs|J z61}rN<~i`zhgRsNLySFg=y)i73dGdclIwYCl8r0zTzn+%{4-Qu>oA#hq5q}@^`=2p z)bVJ>`v+^p7n0*+uDl1sJ^zXq(Soa>Y|1=EMegfeY3e$O^G93uoK<@hz)Aq=JY%Hl zQE9>bojuJ}Fjs$nK|3{Li1N4`oQKjVkX`S-f=p@BY1Q|gugk##*1bA2ZPNgH3%w`o$ zIi&0WO|V1tZ%RzK9F8xem*}$(lrT~qkQ24nT5BXC=du4LBS!s%>wBRLP!pv3Aht{Y zKqCfemK&46M0L15kB1hP#CnI3g7NB#MN9NXT`~{^s~4&3PqW z+D7awNo-W z9K#iGg!&EW(|ewcwU7x%Rg~Ss{I$^S_fPKljE5_Pv5TI{$lg zAP6O+Dz7JZal6E<`SkG>?EndW!Q6?>_Cx1~IRm7I#@+1^ZFIGGH51nFsXcvDhH!Ke zZnIcPH;c5_r>6T?oLbV|^)J<#bh))0+jXXrU0(hoH6-Mbs}(Rg6PPOA_9cgBs9D6X zOD&Y))?#7Z%`!wuXF2`|G@8B->d@$pYUiHz?Ev7d#)}B$-WF=}gIGt8gX(O38l&&e zw(O>}r6vJS8el!q)*bjZo7m7-ux6$Na2PHtj|2Q{s{I?e`?^{-M?WDA&x4fU^KKEd zat&6AJ1^9AB%`?iTV0{-wktmMrI`vOa%T+3;LMM@&0t$@%lbC3P#?E8!wo3n$zLXs zUV4SrR5+hK+DB~&l`BZxx9++ZYqAn-I zHUnUyL@bHbC2e5J2-X9g5Xu~4j<%hL0)>BL+Ip{VixLM>;pSq~g3diErhucWAAV8< zEPtdKc(^KTx!$Xg(7DTd`h7mad9%dIiDQs#X!z$1MTNJ5qb}k4bIiTxHhuL+d%1Bu zU+2~ttL3y;RO(HzP-M8vJfy9-6#|PQW4c^W`!4ExLUk9{U%8HtuTbs*!lNV*wXuHo zz(8(4?Ov$W!~@Fz3R@rMkeS(&kxqGhFS1Ehu~bUniDpc7VeC8TN@}DJ1;X=!+i#Wmh_{ zOWZmMB)FFJPANPdLU}G&LjP{n^oTVFF*m!qWDi0?0Rq>X!%U!ENFFDHmUc=;ok~t3 z_(w3z)MXX(pLV{#R0BT^nckbZ<)o-z13O7KHLSFLjvXb`0M#D zH2!zi1Zz}O-Sl_dQ2kr@0cjs_`UFRR>DESE^r?C@|Bs_H?PPe6NU-2*+O_MXG3Y~K z>WeaXNh3Wqee#LGse#PNQ2CTjA9ON$hrEsW&o8hb6E9~yF!dGp$2RD`Lx}}lQNRcX zjT5|J0vNkZ+*x6ah^AKWp&AtBfF-76Zk`gyH(MWLKKp2acK*2bnr1s_YH#@Ov;rWK zEogJrljVCEz0MX~tV6dsJW3NV5-Zo#JC=#0~EgR&RZ8?(>#`d%0=ioe}MQ7p)lN1vX`lEI#hqe}TIKx|j=Q=1SPpo;^dA;4)D~Y#2xIOx;UKai5zewb^Lx5pH$xGD8f z{r5hPC2Dx8QyZeTh@yKc!*HJpt=2JtPr1hZ>N{^PQuQH$xq&(2PQpGXmDgSL1frF+ zsn6V6+4tn6x;~jq(`eW5%%v(PaP^%6Noe-Ljn#+H2_U@u1IsDVp*$zvo>@cirG)M_ z)5jO}^C{EiIJmqkxet-n=*wS!EAI~zDh%qD@LGdqmN-}JUKM-py#Zfl2ibfs5@GvS0B)sDI>@8 z?xO1qGi_0$!~VMFTuutp*A_dW{Ye+1V$FhL)@n;EJoTsOdgt=p3kmicZ}m7bK59O* zi3~oV*&y3D!sve13Sg7*JX6Bg3TCQM_Vg1eKzi{5n%nV3R}V0E7GGaOc)&YxXY+7k zWxVbRXW<|*X=TMB?iRvh%nO1W8lF;GqWZ%|?gl}c5xai%nlE4YL)oJ8e6ziT$Au>Y ze_jyDHHgJ(c!}&C@hdYGHrS0PDX))Hk5eChzOR4EbSa&W_autFdo!Q6R6K>V7QEco zgxUYM&}T3}gSHT=f?*)4$86wv#F@8iKu zSkz-doVaoaM>yS1G<}E5F+xEhdy;@IqRf>(l{_ErJvy%v0GFB3_8JY5IH8F|ooqvM zqLdU7aa9fZ=1%a&LvD+n9z9Sx@sn+|Yl&+D0RFrZ4~8`Hc_o$3m3!#@-aHmA%fe$( zZpZBNsp)Sl2Np>hcvKvLi}w$wuH4lz=x37WWe|DYavAMi(uXg6{aD+R=$qPf8-Jhk ztE{Ew+ULZgb1?w1x~ePz|LO%X%-r1%&TNzbcm^3kuz-+1$-3l*-7ezb&NiP>TS`PwC+v?^ma+_4v3|{ zR;9d&8i1mz1eUPbeUW`<6c`-{Gm2L<+#^ZYuSlFOl`z&Y5T<4@eB81So?TxbtI%b< ze3nsUJ)~g26QCV6DEJr{*&0y%KpPG;tkP$hLg5rGLZRZCz^KHl_6g|I!9jpYoq5OZ zF~0^@-Rine>wO;oz<7zIk@0uo-c&&3g9^=Gr%pq7vkI>h=mH#Bag=x%R9fZoR{?bCY3Ezh9e&xfto%-vKke zZts2jyA->b>Rc<-cNnYt2&}+xh5e*lUT8s>i9S(pLXo5>LRk+BpxF zy@zy<-qv%Q&o!|BmH}qz2$td>Sl9_x8*CDE^5z1euYx1Zdkq(q%@(Q-0UeMQYO;G#~LlDL;f``0pJ>ulK*h(57T{jl3*tLQqR8 zghO)<53;Hrx!r1$!hzQTPv2;~Grz|l$TiMda`e1GlQ78U*_8;joVNz!dQcz{sI2BL(V4*e z;;8B=j}Aq*#=DE=%++;dDWAqd1;U5%dA;&m;s`+9P+rbIC?j~D z{CVcReHpv_)Dp5<(cE!4XuwcGeeOZ|0I)j3g=egB$ddtTm~We#B}m`Q5TN6~mX@w( z6PEXcpDb%O5v+dlZ+OSAr7SD!L*jKPyTh4(dgFkSwJ*=U;r`JC$;tLPLXd3A*%o6$()G7 ztm$2@D|baRnv4yTJU#=d^CatwIWHk%!OSpXlosKd9oqU`3o%l7E@btL{`4?vu=t@A z4R?-?5##lI5%6}OpLbQA&EFie{W3DI?(Gybv6ZTSIVeBw%7`>BX&UvW7^B-*-@JI8 zESw)9j^e)x<30sEW(b}h?&zzZJ%voOxZnu^+u3B5l4S6QbQcU+bxaw;j67Xde(nIf zj)!CrW+;^DctIYJ`?Tx7#dk**$wF7A&}T$o7PdVs<^`d-TR=t z=9Ho-%q{^#QZ4NMy1Hum!g_Y|&H`5!gv;Tb{eHs7uMzGEi@{gxc@fm4M~98r69$>f zMpk9F^~2E^2q62z9R;PyqJe&84KuUFZV$;VO2#j+%!soCZ(bh9EuZ01eDj?p@!-u% z19nn2-@#G`AVL+xD3}%}7y?{uDgVmx00P6S^m%Fm3#HgtRf}!vGBhGs(!FX$&u31h zSKRT$Gj6L{cD7`KXsjUO8d#TW@%k?mrX~A$@$J7{2*;QbZ7WnYTI4J&#%RWZf z5SE!wE^-#NRvC83i9X9FJyuy-aQZg0RJt5r@u}zYg-SJ^-_C>!@Yv8@Kce4PL`inq z*ic+(Zkq?SXoV7L%i@1u;t4c=L=ffDJ5OA-hUTBW2@#Uo9gc0OCauFluww@d)D}{h zOT5vQcp&@^md&$g0p>SB4(7R^6~blZ4g&TJaV>E(I*uZzN*NX}TbA0XMYqA)1EjzbwamiZquW^O{#@hYFDWDXg44qxBiyg=b@ z+{P>G_<)7r_2~SB*PQ|EuQHqNSfWC|8ztMk$_e|W7re#GyvIeDMc(dqQ*^qcEQ%{3 z%$I(__YH;v1haB?$>3vT>dLY#tLj?Nx-0Gan6PXZT}I4q<4ANvIcY72*Ijvqt2?8} zRp!P2?T-QM9Teq&mjGH&bLAHT23OL-B%ur_E%jn*k89G>45j2D$G*(s8L5{a!>Sf` z@Hqr-z-6EYr{+SeCpb#XAl$4#Nf1;e1hhU6)N)a);_VdCA1TW`l+#2pN&4fo7|=KV7B)u{<^ZUW~%OHX0|gvXHGMHNsUt>D-bwD^*kyVJ;Gd` zltlq7BWX(Z!G0Xwyv{pUvj?C};zp6dnDf>rQn*v%8!79VwD&ClR)_7=MR7!3jya`P ziys0oB|wH69}`aJav)W_feoSVM5jwvZ?6|M8T*6-kuAwY$(YIBGA8S7$2?u|UXS`fRTLQU0NZ7Et|eQ1c8+Y$X^B2=(^chb6%XJ2hSqN+?XR^LWxEQnp_rg|NS4lvm+YfrE2!mj@j~a zEc1KrxMTjfArPR++P`sDzW|Ge-@crgR(q_B8grMIxx@U|Ukwfml#3tqfvFME$cR;< zR%lAVKTP?1_TccX8+}{F_Gg$51uX}$vdyE1rO<1*0<%Xgdq&Jg(QsbR>j)cZd@y!_ z*ZF3y$4&~4N^+iu8vuiMRBJ=5k!qk6x6nk~Td#ddv6o#>h7GM_nnPe$_7Fgv<2@om z+L?NN_#Mbar6)Go8+BS9q;3cG_aXBge()<`S6JY6RL&{zc!+>nT*g=t;WmTjQ#Q1N zF#nVE;GF?E5f@nf&L6B*O(N_#S!l>xm=O(1+Jectvi1~7-!c=3>bH<`((Hm#|53uoZUCEl{)V_8dybBU!CCoPwfJZNe7U?+xtcUa3I&S) z@LupO+BE%a#4+1>pX3eu#T3Y`#?jJloxC;c>-0>I5yBJ7)eG8pn7pT1X&|K_jED2Fec z2-0gSCaB+%&)9l2b5@X${Eg&Ut5$?|g!3|&(ukh#P?v5rlr7~yc4%)DAm~lE{5^LR z%rn#q{lMxQa3SMA>8+zWxFRC28;LZ<{#GMjbC@1aiYfy{BABj&UEibF=B7%_TGmsq z^X162=@p6E+HmNu^$j{6Y!kL8dI%wE=Nf@6pR$VLG=R9^7kNBWd~DEW0D_ynWm&qH zPI%7C?AFx%6(C|IHJB;+ouR#%*K&Yn0K4wX!ue?j`RT4?o^UT3B)gos<8;j0@_fMK zjVat>;4i|#bU(wkgXOpu%Ndq98Rq@sKQ%p&LOP*{Lf&wm+WdG$XZ2NhvLFWZ6ud4< zEXZp<6|?cZA_?n@)ghKlytbQX6vPVUU5`kdZ&lR$Clp94tnJNBN9Wlj{-gYvvV8mw zD|GX$C(hOQToKO|csEe>c>2fou_zcs?LTv6j2NaBh61avG^z)wD{T=EJPz5ACpcSN_7? zz9Ugd%Qo8d5KJ(@w$m`s(0}%AYM;FhOdlcekH_gF>k_}sx!Klgptrc$2VG}>w)RanD zvEm`o{19mRH2n&M$9xvGmzk6faK#_SL6O-?K0^VkuF0TUD~KMe)WWpDcADkBCAyBC z>!KDX0gMwU1*gFP&>0On)cr`_BV&L4;JX7(`COy4)88b!7Y~{)0|9MqKQsh`KL5pd zwbswND|~M+mY;`lGSJYpo{uvKdhgo^-*~zP9LH05BurE;w-}Ixe;7tGhL7LMMEH@- zyRIx2LW78s@;7la$a9kc;;6?UMX?|E3-m0y$#qz8m!+=#{YNP~ObTUAvtfs`BbfHe zH@f%0T|HZSnGWnN;yp1sv~h^fL=G85uWncuKR8gKe@i37y~NxJ=5SqvPk*pyJGSFRG(vj3Fz z3$9$NS8)L1A}>H{O@Tu1HP|p14!6vEG7Eji>mqWJ;*v8hr`OakNSiE>Tf85M59aHX z0NfqsU*AY;3YfhaD6}+UyKlSFkejE9Gf&P8&QCbZryB0~HVVHwXIrTIK56z7Wl8a66XIU7dVbF0^+dCqc%L&Ya+Otq6CKtR-a{))OINgaY?vrKcsx6xUzQ zbMn=Wt>Sxl`&)Y+Ywo6B%EPOsWUw3YgGP+LBUtk_++kpxjYK8+$VpfVC^ z1z`AhDNXiQOwjYaa*hRLu4UQ!-|aO~5|UwT?ev=gJum~k7^!j+x=L1oVgd?2@Na;% zZmi*Y($#mR43We!UAhbe4x!bGO6?l48abSH-*hP*??@dZzX_hu=GweT*mW^+=Ap80 zuKWF9X2pl?LuisX5uzOLLy-|qfPh-}JBVRobRAwd;zm=LfbaRe?jDEPD5Jy0XFfpk zSOCcb{>e9EzE_5v#nm-8iVL&0LN@aa6TQ&a;L~uRp(h9JOpz=nM!cmmy=i>BG3;K` zZf`{%)AyF6Ug$0%q8a1!=QGHCh`E}aaJHjIIZy8r0pDh-oX%8;SA>_hxVaQDi)xD; zPKJf@9+Qd|KSlLls?c1NZWXM1d->ISA;MKU9QKsESHaKks^6LCt!i*xi`{#7N4k#a z{gJL*3&D|0z+9h|crGx7`p*)UKNc}GEgap^xFUO0+MYW{MWbjXs}lHBJh7i6Snj+` zc7P2MS>Ba8Suy-*{`@5$bvJXvpCY4VzW-CdC^@ye6;6j$&imzJL1#aCEnpTVeUB{@ z=1AYKuKwa4$+-~D5Oy%>b2qkXmuTiAz6&Wr&qcS^y}~O!wRYlufbJu0iY_28yr?+cMXB`XY3^c;fB77-$7Yy7?vfrbqVYE;gk0&W zrP?DuMafc$-}33u?Wz3bwB!2(M{orQChwv_U$nOTuUEMNDi#CzuL^aa>h4)5x9%%3 z&z|GAH9&(ijK>>+h0OuY3?^xR#g!Q#yuoE7`i~5#Enl&a*Bd>Jk#04wQmCGgs{qP} zb_8J1((oQ(Af(8_F12p`w4i zM*~%5v7o~iR`4nQfg}OiA~ts+`>I?=_c^f>A6rS&?}#p5j)K!EVUq@I@x&78u8x=P z6Vkr$_ii<6kISy7{QgW}R!z2-Lb`}l0^zY}O`dxZ_V?}645=;RjT(p03Zp_BDtLEP`%&G{mrfVf z{^awJxD}WlMyi31Mj9o%n=)fuLEhFd(kTpX7f^0PP(qtsp~P>#1PYgVG-xLNg}Q?F zO=(2}q&m2xy+zTF$t@;BdMTfnDo6~r8SQxcU0}chcA~J8Y=}WsDXqE<@`qz)nNUl0 zKJG!n3HR+Z)x2;PXh*ck@CSfar($n6`1%QCxi2;%7mWlsT-J@|E>v9p8hL&X0#pJ7 z;a<1&gQVA1Rw0{DYJbn{AKQ7ifsSO3$5D2T zOGAWXb?IrJEs(fi-2{ZKP=pEINjdArO^EQJLGafJcfr{bLm|e`#J=Q2UFhZASr|e6 z6M14nHLAd9y0S1)t!Pc)-em)VU3-U_{;iytVMf~*^3zKA^$O}>nFLWOHamQk-+b_; zL~|Bg1MR$?Q3JbBh#OF<`qaQ_gAH;9g3N~|B_!QPs#Cm5sdR!$R45ErXi#I37=7X$ zpRj(#n5ZwXXN-0l*>>q2Z!75R+~QiBzzpydSd`ZP$m(ZzxC{556~29=UwB5gWNn&` zc@GyP1Kf$ciS}yr(j7@|~=HX*c1bKe?Rz9G@S}%%678 z@mlevDsgk4q1q8C(*L@tXo{k?h_$q%SB#ssqB*lYX7xd@AdO7D-g^;Yg%5fZUBSC9 zOVRI4{NMAY42`d0`t%G9dfbyb#_#ySNXw2qQc3#QJ~Jbf+#g9@=tENtht=FFK&$!^ zK$=h@F_83|a?Fx3TId%iOVcgUak^y@E;;d8JQ^ch&}n6w)$p&Hz*FXWoH4r|_ZIl7 zTz)bK?5$oVs9>OfBSa(O>nqcMlgo8EugSM=SwG7S4JUKdKL6V83IJ;c;As=$TOTt| z*ME9-#B%)+{WYK#Vc~W})`FYiZJTkq;`{g6a%So==I`%BAPJZviKXzCg*Y$4-TKb7e7+US!?)(XSt=%U*{kK>Bg8dQo5~65uioU?Ap>V{vFK+Qs z^)9Qv1qfx4E)>8+W4rJjr#&92VVM}kLNVoh+XN<_*8uVVaW2Td0CQm+rx&XcL`Ve+ z>fWc^%Q4ceN%NPtP-Rr!zZILcIVPn?zP7cUW{+pOS)5=`fLe~@USE_70bZ;yd_2d8 zp~!0b1r1>`y}6;?GDjJioSx8|b7MWyvk<*F9UMG(eOjXU;I9IGVGbS!%;%srbhhV4I zy%!2myQ@X6Sy77)49yw@^;b0WYKkJJC`tOp%7CHp=IL>~EF|M`A!0i~G?a?Rl&Q}U zv3yxf{NWI4sdK#2|CY?(^q~T7Y^V`*`RT{t7p-)LQ<1e4plly{mJ(!k?~NxT|Ajn; z!8CR4q|4*RfYMaoS#ZoK*H7XN_<={8j)A1c#x za~ngv-cL@mzPO}Ad|TJEyeU2&kw68ogjk6}FJiqkAnd2-q5QDRtXj`wFD+)~eoW@+ zi!HJRAGH6{E{`cj`e~aAlaEi{anit}Vx5#!|_Fyk@GauR!T&Qo4 z2jRGGE~USf*n8R|EGf(|fNzp|#PBmzM>da>G3OqAq}eq`5;RkEEF{bm7&fJ5-pCp} zg?gkJOgp5P>S3)-yiF>Uy(`k(>J;y=w0cfuy5SKSc=KO^;kc-T7xWux9;G`RiFGdg z`dD32M5F#rIY%02lbd+kl+IRBpBOe8RE--s(2|J;Hsm5L>sbEWL8n5B6O9&5H>fV_ z-$U_lR^_{@Y$S1_fH#N(4@lHyfv>-(K0ZRtC$XcL zjjr(9YB6milvKA@2e2sj3g`xD)6Ky&n{7f*{}JI7lXM!Yd6G10+EQZuy3`bs!^69CsFexa~MZEnfh0Z@yF z{|XUa4kcV22L);temIFR(jGTuYdW{+!;9?yfdIV>lX3r+AK%k3QRcpq+g8#%Sv}0R zANM31KeKuMfhK@o)Ap+CPRx5r1{Yixk4t&l#sLQh0b+i7K1WNp1T!5uqlY`UY;M1{xD8u(NZ13r?zGKng%_65f zMr>@aa7!Zfz*BJ?kGKZ;7vGLM@--NU`7T8*8VsvC2 z_+CN%_&iJA#2C*TbG~savS_y5ja$y$?8)geO5>t3*Ag^Hw%^~ppd1BvPiEQdHVa4t4ghwT%BODK5oxL z+`U)A9?qXb(fS0;1E-W+gL-~(+@$OOCuf5y@0O#3$@M&^qO_yMuOg)xXG*va*x3K! zecwPkcy``%i8X(ZhZSHD;5y@hME!V+FV(yjdA*@#KS>tkWIoN=_$~nc5LWWTQd~86 zIVM({ov$>70L%<_&M<4LqdjqYy)^YmP`zU4HjferYEFw|VlSUuY5*Mf%BS-|xZ|nQ zTbX(o;n>)F71$kuUKr^`9PV}9Cgbw~j-lhcfj#C+)4g&p`$y(`kzzq@I;_uVk>9nI zz`SD+6aV-tfpdo4byE&P;P2L2YKSXcsO75_-h`j)8yn5U@H4*I`gR+KGs2Z>k&=AZ zyYHcvdfVoHvtHv5X$ThJ%u3qb4t!g7XT45Fui}u}KtrrHS8vB``sb+*-`qKSzH%y- z6D6C9v9TMIhC+X(;eDB90n*P!sthH!i9%0fx;d;vY1T5|AjsuJspO}v+r2``a?Bq5 z$EV>7U_^Hzw!PUZZXKYE4ZDULd1JEed~8vfSd1`ETRhv(EJyuCBi5efebaz}y2m|> z-vBoR38;po8X?M^$b;&$k!F5~3W!4`k5k|A zdreHWEpr=DvrRZ!yk$7_p-d3I-&5oR(shiJ+LjY(fJhd_-DSp^X1cX4p^AWAO@ptd z39)_G01W7~hLcryOTOnCS&On3JK{+I!;K-ZBw<<`ZGLji{Z$@n%lY7Q=jN;gt(zQP2==5(5_OSI z-~&Y|KkTv5Vb%RTG;rZhlSMY#rSPsjC5$G3{=S z8RYW8VQ7#y$@})!&(o6?jonE72VJt6f(x_yJ6B)h^6vtE=G#VWKyjI!R9f|^@003> zmlCb8A6cl_l%qi-PF?SP(rU!H%$o|Xc;DDsiB|X@Ty)U)kKkC3?|8onWAq~`dz(FI zLWVU(wn)%fhphcis%FoGcya0~Vhp~ycpO`)hgW&(V^C7YJ#c!9=FgWRaVbLh<8fV6 z1?l9?$#S4Uommx6ZMu*mBoJEOr{6`}v20v(-;p>r@R&?L=7A!sH&;rZHU@K5h-7Q>dy=!v%++|^hkV+F*JcYD1w z>+n-~GmGZP<0-Q1)RPTdW6xSj1JLWcqTN>;S_4oTF8oH*gxwgW^yg;tR9vpdh{kZu zbin3$)q~K-8BV_EB$gz06q)`ZK^Ay1@JYh-BgDO$*d}CBrWOnZ_LXs!QQZ;Y>|PyT z?^^5Rdsu{dkDUX(#%>-=7%h`}ZHoQBgjH=lZnXcWShIqS#XyDT%7KeGHNj>?7T6FQKAwz?Z9c6_L->fK8FDTyd zm|%X#9@CH6hV=cC*Ty(YV=?yCwr-den(Scr8~2>2=E;GO?!A*H!_#ImUbgn8ANm4P zn_ku#P|Lxw2iJz~wMfZ5HcD?@MQ^wB)TJpl=;Tmgt8{@O^$pSU+c0&HNHOZ~(ByB@tPaX*DUYQ-7Y{C8FgO0^Y|(i z^H(A5EsRB&U(! z@A?g@&!mf)AB&l-p2=KgewPg^yr!C>`GcCvHtTPpyb0t^x@T}&YDshzuGBt5Iaz|7 zpY>!m(D;m3+k99yuZQsjUbabXue*A|SE!^&)o&#+7mp)&`{;c;l{8u}I@Qz-?HP!~ zIxfx@x*zG}E*9H{_!&90fA_Pov#QUoEZSEH8u>KxyY31#Dyv19)rKz5mE}E@?LBHF z1iHfAIydx%VZH38C5w)8nM1Q>21qGHB?I@heWXLW$(#@d&sW4NZyW3fVr1iZ%a^YP z8fC=Aks%kUYN;{b#6A3&J6u|_>~R0x#NyO|C_bDw<4+NY&y6~Yv9_LTQ3CPa!NRiG zy*2?^o@nKEt8{92`^7q@moAShZdx>OBfU$K^e@@K4gjK@lclDOU4Lp5PuG;LFK1WI zsN~Ufvc;8d8}mbMoi+{O!Iy{EkQ~d?n{ULs%EGvnoJUToU332HsW)NJ!f1RQIi3mqdRuNJP5Zmv1 zED7A)V4z^?{_0+v2->_5OJWDFif z4{4ZWpOA^tzq6&~iVLc#gZ^4sy;Y*E2irUU(7<()AYQUTWK)YW{13&nLz<(~X<7o!(L z)MH8`q-lsZwXT)3S^^`1$`2PJ_i!-LQUID8fZtYv2F>vrG4JwijF$l$7sj5AM_3!2 zu=6;}6NmP5edY_h6T9U%V17;|z~Sv94j!$hKp`i#pi7wmuBA264c}a!a3x|8>4a*k z9J8HE_Xq9v`7xZ_^JTQp(oD9W18gs; znT@FyZ!Sn52kqvu0-o;h2aA3{V*T!uXS)VpUu2vHz$Vb<2l@cz7-!E-lGDFUFD;3h zJCj)jBE*K^v!u(rUz6_~10y07x#fp<-7R_qj;L!NO6ln!6M;5)f^pwi!MC|DtF#@b z^K*J+b+yr^P0RLf(?>+@U1XFiHz^3H`CaIy;u+e7{Z8q(DBZ}Z!LyH^@8R=P81GMP z|Ke=adT~&*NtFcVYv4fzLuCrh)^rvr$F$;uz{H!V;ufu-Wt=d~tj%6j68#n(g=nFo^^zWF5ASW516M3ju zkb9(VTaU{$Rzo~Y;!L_Yf<~FWx&IMrPckI4Gx-i3cT^!&VvX_$fzH~~vVN9z%RlcP z*QZPckCH@rRR2;M*REqF$Vp7}bxTWiC{g!&&Oqn3W0|>H-0MWp0x;eSU8I;B#&YrQ z<~KaUXAigmGwuOcHS5$xQW+M_o-Dq&IoA*{#%ACayf|KEcqhcPDLpSv&S)DI*Z`|p z((+!_tp2IY3KFvRo6nU3PN3X)m0=L%1fx53%#Jt*G$P)u29207qkAdp`Te3^%0zxW zt7C*&k%FuxEW>5nCnP{9gCRewKid!XKt4UMzbM@f<$p-j|DZoq8A@!Z#l9sCec;%a zy_141Qk%hr`2H;swwe^Rk^qOx3De8>&HcNx6(4v0*Vhn33BC@c&T^4NkoU5nep>=+ z!`mPujrL=cowO-| zKfx0!98A9Z<4l0ZwOM&pFu+HU4*)L=Z((7y3og zB)^d<{=B6%+>7XHSFj)q_QVFTz!moK2X3-2_)s-1`@&37^?IIzt(Sf%(rB68h||pP zNVnaY(s^pG)5S?pP=(AY4KadJ^?Nj99o>aIx-hT~Us}izYC&V`(I}RaJgoUsYR+f9%i){7k@orULT< ze~Is}(*Y$BaU~VMOD~cE|Dq)yvVNCqZ^Z3ykMr&-e$yv#?ZIjgfKq;n3$^b{D^8Ow zG5FLlaJwBHxS9s6Zp+fF^v$8e0&K{cBB}XptDTgAg{`Bs!)Z(I4#_>AR6R*K^yF4Iqz0_ zyuFxGP&&3o3H{&t;#sj-(G}3c>1F74;Jmc8l*j48^rl-YZ5MXvafu$>CmL+9uJ_?d zL<2piKjIt4G!HsQpY>ZsuX7^p60yL!29ene<@Y$Eul+Z@SwNF1DIGVdnFQ}YQa53A?1IN@nNU?n4Ki*+=)Ht7MHl z)xSPEMp~y?6UH-!BKuj$3(}5%WQe;x@*K{wlpLV69L)UL;P@o0#7U?OuoM5;9$~+Q z0?pGdQvcn*UdZ!|P2kslrewewjL!&CeS2fnz+6T{Fsv%s3&sesDgaL&Ur)?f_gV1RcZAV|H6Kckc8e(vXIMNIK{HE^{3M|<~jfNLp0!oWCZY}+;rzRJXn z>+-`-eD?w#8-=(9@2qrbbfT~IZ=gGTdB4{O3?$a&?&uL?Lt${vlYtqUWU|j}t;bYE zR~#xfz{2aJK;puL+T8eT?}8;^XbGt5!w}7{00%0(Yvx(oH-pNM4fFD@bqX_HrLg~(LY4%RVmJ`K&4MClZ?zFW)b9(C4Vc{GHW{xjace!%%BOqq{ zCEETq0(zzwcz73$U%q%qoZGJO>}OzH@(KzI*Td{x4wnO)z}hI7<$}x7XBp&%6Iw;t zQ(Q@yRczC`qcP;pNPzj3{3aNR38Cqf=RO^~_l(j~`$wer=IO(b7A?_)h*fWAabI}& zSy_=OPaNoZR~rDvq?zR8!)D~wq$wxTbci=QBWIT4Oah(IoQo7s^ZW|-;-p!E4-Aha z%$;Q&F73um7(egYJg-_W+;4DRf)c~)m)DNn&5g?ce_Dh)0lU%& zu$Aw4^kUBUa{`C9qvJx(`)>jjGy#qqjmIXPh#8U8BtFpDf(`+2beA(ILFUlJLTPdE ztJ+h&>tE*WVseX>A)S2B00qrJQqkj+r*vG*uOg6FdkL0S)Y9EN`u6&FBE>jrGf)p~ zjS#&R&P!Ser`+JhJE7xvsxYGcY;P*8{aM)HJ5ZMgst%cEsaiyg z0I1uzENCk=y@RcOYEJh@G*{+!NGB`{VMw6 zkdP+XDQ^_pBMdb%0(z4-TM6d;bM@~xtwpYgNX8#>C^{m@-7W1X|J)=yPzt(o3va&~ z2b@txaKDW%9ki16CfHK>quku&(+&4ti;**x7=GoB5FFOi`v4@|*`Kg4`dB>AlcgO) zhVYIh6OVD!5p?c0r;_ft7JpbI2c>5L2H#y0!sdN}B_FOmUk#2-gR6QOVraS5;XKv; z`q5*+0goPQ+gbBHg*1bc*-`#EmYEaykfyYewBW$rx%|!VfV{rcE#|)Rz2$%~+Rb5Z zN`Ij-jc}kH%dcghbWfw>^7TsO0>~f!t)E&GY`l9TCg%W`hOmn>X4wY!fiLqnl%U-w zL44|$T3;lfgnpZZgS!=g}&^PJbG?HTxAm;ncim73my1A7F}- zbIWYz&wfl{h8oYmI#9c4{-wXAO#OF}#%dC7t4mM%T>SVquppbo3oS&oz4v~aAdV6x z$ReP93xpUtBPo#}Qn^w69q@iwK8h4DGEU9c-tkjf{AmBcTe;|siox=e`>0Tsn;nyJ z;lROJ;_UqC_pL{Y>&>`snjjUKps4%%{J0kwITe!`j_D)>hQ+k|q39*O6F# zcBwHDg9-i`I8bYFSa2M7gj=fK*}^37#;IJ$0^N-M#bAc`*vRG47o(-G&0s1=1QDx2 zPjQ?5!p{-Q&vv5`kAZ-B%dVT%F+xs?V@`K29?OAc`4LDII`-?-q^|(5dT&a9e`1Ae z=a{vrI?KEfFxHN&U@O#!{&^NWxMX1rI-}^-M;m&Ah9$_oV-STlHt)TFl9 z+ayh22t+bR9$alb)@6a}_NGwAE-!V`7^t)61>%^E46!X-4f95nU?DYg4}1Dqm6;${ zPnN@CGL@^B+2|{ z$*v)Il5~bEBab3~Z*AGB_LkgWSen2fV;YVFKV{?<4xMktbia*|3PW6yx|1Y}!^*ph zTF4#!z;1O07)>H)bfmYp3@d;>$498bhP3gAf{e;_uwp=2Jg7Iyfa=cw-Lw>Zq*T1<1=$@6(dAPj}7| zLrnd4FU@)kusQ3U5E7I-2|Ox+d!70nHx17SD^%BHLk&B2PU7R%KikeLyT+Bm<%_8f zm*dU&Z!Q5C8B@8sDV&VW9Z%DkRo)Il;$+sNcbhI8H?Q?ge@Egu-dm{6GnG$aRv+GXYHg7E_?~QN2Ng3AopRd3hfCK!ql&JDB>i3P0zI3=@ymzVSIheQ-X%{}~#Uiskzj+Tp zU82oJ^ZmQqz^E_7rdxpVg|iZ9WlB6A&Eg-q-4qe;u%R5tld1t5@gTVF3|T60VTul0 zEj`H>hUUaWd$lQ>t|A~aMOZ*KZ$0F7v8aU-%NS>A44&lj+^&U zWm0)D_IIe06LtwMPkT4rF+YFbDw)@uhF%Z!YW6IiC@{u%BH!G66Cd1j|S{AVcI zHA{EQls2@Y^!O~3oY8WsPibRPmvcX>?^8!JwMBXOLOL4g1?X0a_4cmO1$p2nDuNI9 z<5%_d1DHLi%s}53X{O#@`?12#F4#>dnGb=S5GUa64gZQ?nL5K#sXCw(MU0Mu{SJ#s zltbwRJMJMG%KNyx;Y@LNl`yno*hQ5FL@Pz}Co(e9kNlc5yiCvf?N$ z*ibzKl)^L`@y8zKhAQ*P4N}r~Ojr>k4}%w38pAC zO?FfnovgGcS%aA3ENWlqPa-+2Z3@|@d2oO=V2sa)6N3BTW))xPPYI-QkoI&_85d`= z4zh_}|FuUd5Jgb4p_t*XLOw2gdq!C2R+$}H+__AEDLH4$|-|O~y z90>ez#SSKi1i_5%Kur77lC!a;ErQdpDpg#T!jU=BfoG|8G^B(pA3~bt*hBw*@^}Z} z%kI`kOMp#_1Q2Bl*F_A4^_0xy{Vn6_C-WWzjWfgqu!ll9bOd?vkKcMLdj9=ATi!7q z+s?b#)ct-gA9$fL>Y}W%)5u^hIsUtr5QCg|mY5o?0js8qm}*^K{x*4u54Ek&B@GfQy6|Cc9a@net1O9MEfNRG&J6aj(N*>O zyGnE)c#vB7fU6dK`9p#~m!BmAICC8y%8PWuI6e{!V43`Ei{$&pK)@9&kC@!k3FrEAf(x{_4>eLP>=Dzy&`+loL*CkNB0H}Bou2P z?I;=?K!$~l9bCb?>!XPMnEhh(@;7~m-P$w9%_Fzj#=lD%bX;@Biw7E@Tgtf0lcVvx zTn^X%e!65DEHk2M6jpS%S*zpXg;-kvy}6`7GDW9auG`(zuUEE)H~O%ykN5%=|g7T?N+r_AVwdna-J4m*L5FiXE!< z#r9h2A$x@7;?kA+@gLs(NyZMFa)?Uiat_bLcQY=dZ#Ej`h)kk(8n} zQ#6yyMw10o5+(^0jXbd>hFf=>V?pj;Fi;OiwHf2>|TV3xm3K_E7q z1<&{%J<-45L1P{~OA~r}*9$v1p<`sFw6u`0K&$cc?Sbe(62rc_I^!LB=uea;xXbnJ z_JS{i%vb^fPCh$scK4@jx(mq|-?vxh7$X&&VE!3B3<$>&lWU1}_18oXCuo~hh7E?k z;F%v0t!|yNKn61D4vX+GrNGU1NrVkw8*(L4NrER#of9{u?v18$m&AR1oV~m2wihz( z!aJeYNF(Yz9bnlRo#5!KS^uPq1kwP%-hY2@@U#$zU&%sd^uL;W3Y|7Jx0E@X3kBiW z5+T(la|C^w7{jI(9bawz=Q3ZT7aah>K^GtTbVOSnW#*tR#CF^gbv{2eR#R2`Y>0q470!I4S)KesfDLZb?_8#cqz+wV7ts~@oS$Q#q1=s6W`2bE@ zFna#D44C<}GaY`zC#~yZ%6@=M0KzW-3pCD=9*hh1X|6V1)SNP%gF=&}5&X}V&SIJu zk3AOxutgimXIUss*~y^0$a!iu;n_6M&UsemGT4~bXpVILov{-7rJiPMUmdFObK})V z(H+FFZ-zx|G;dR5eyrXeYPn(`Afou;AWfAW(ybdfsl&0TO6fn$zi-2M_S!*^blFcd z%e&S=)2pOx*yk@w08rrucyV-CW>0W?U92rpV{>$b&Ji5Df^15vIm62OPW-3-v61Va zi~hJ@UT+nM-x^MnHzSM02^PbK=F37cxn$eCO;bB!I|cOfQs zM`D~%_*#fN#=1y|-ECj9R3Skv-F z<1$YW15h&P?~2g~Psz&F(v!%XP7wrlkI&HovcZ0;ih&V!q)tL;xFeR32xHgV*r0%|NR>LV_V0qs}t0ijEH9+ z2^>|m_{Zu*OIljyKbx`KW$$S=6HsTleC)>LP_lH`q7g`ptxJ!0_Z`g+0&dUW0-k~W z^SC*d(lfSbzKF3Je6<(S%aTmdFLwCLd1Knp`3uZ(aF$Z}d{1IERj5Mb{ocKNBI}02 zgAtW8>$VfCp#qghpBZ$WKVSbH<%G!K`>4^+RE~IKWPckhn`~oI*IoyG8~3&`QG`zR z<_fq+jE`ZM0VZ;y@4FJyd=r3D(74NB+!~VXpyj%EClPMmC zYHsB)eb<<1+mtn0Ch3Di#QDo^4SN`Ct7&{M(n#k0fiB2U(HC3GpIuA>ACf@t1%{78 zk9~(&>xOE$U^%`%&YT(}efrAaJLrhj3!F?^SH6<|E#YT+^m>`R%!wDKUGdLldqtRT(Gg>5c19rD>uAOcV}+Uj2P@tV z#FlN`Gpnw-8;zlj5PBzL6ymMZFjjk~y2hgN+?n4#r{H&T-P#A?ON3hwhPnDqtDUK- z%!i-$utOxyupFnhbDsEO#DKknf5NKf{^re`ey)++Gno#hoM&37f^+sEf4sr!zZ1F84o!|6gQ#mh>EgB!X z;tR*Cql=E5xY2OUPR*Osd^&F?K(1W|DZQLs!(=LyysQcgxx92;PcusxdNZKltW$zT zlAPbR65C@2SK+lgJhUa=j)*Ba66h{py)oF#o-SSV`FUqhX(`W44!M?om!fz|qs7}6 z#hma@(~dU`xcG-WJ%zOjw}SX@od$}8PfNe4e0twW6#k9L`E^qli%(hFzv7-Qm?39^ zJ8WuYIc?F3mY_+IyUItd?UW_SlTHXD5D_Z;^#ABn_Ve@=)=zZHcap$Iyy6R^bl-)X zImo(_w@apfa56Kg#+`Mk6u5DpHYc4U5{`8;voiJ8fs>Ehaq4DQzpcuTbTz7p_pAom zPWdD_!9Pi8kM>pl?PTwQr$HkZVauK~!R3lF zFk+I4ZW>LJlgZu!*&vpfRSNcl3Bi{XH*@)voJk-BLW$4{>*FIY{SQq!5AMqcwJ?%ZP%AK z&rkj!``OFgKHHgW%ws;yq%th6+(6st{n~GdDW8Q(zi(k!9cRge>I;eMl`U!exn6zg z&FgN>wMSo2Q@@oK8KC^%d?b!#)?RbpqovOx(P(f9<*QCu=o-V(Z?QeAMk_w>!*b|c zlq0bBc92frf1c5}o}V+S9I%^a(~j8AoRTz-4jxtoX$vkKAJ?&k+=de$xj*2Z9UaxI z(t(ye7_F<{CDT?#1r=3@Ug;kBlyts(USIHF5ktWWh5m{B0{>b8x(#$;^Ea^m!edr( zb7HK<`Ry#%6ejbF)YXgrpIu&9R!9nz#*dvqR3d+zeE4}P_$V#%Hmy2_x(EP>6y}fT zPv^DhHcJ8=Tro;Rwdt34DHOQl=_4@@+wA))DmP6kWaba;MMYA;9FHD1ldY*@_bRs% z_>UbDuP4*dl9eEDov|vveO#kIf%jECk`4=1`QKaH6{iJoMX)riY9GdtXmH zl{)r*!tTRW_Nq&J{^^)iBBKvD;s9fS|3Un^e1K8KkON!oAU=vRXK3Adp&_G+@v}#6 z{>|Hu3eClksqOs_3U&?m4m43{DoMJq59d?_4lgvjA<|!F*VgJ|DuU#KM2jTPitm0< zf5e5K)-}^ekdj1Hm4ESsZ|%@VwZ&2I)JL)Ei!E@IY#@FIMFDrr8`PoS(PM|IL3=BG z-#2@+g1Q_YGx(BG=bgOk6=9x|5m{bpSf=X$!+3VbQPfXtVAs=}r*i_MVji`G@)2>HT#N zJ6#SLHew+Q@9T9`$NO2apR~;?jlZ2O@UXP$6~Tww+&*;%7{lbwGw6kgTj&nfxE{27 zo&D=X^Dsfq`hfk#o8DASStZ!)0sMDZ6G4uPl?+jNbGh8vb zsHih&$w_}fDh|;$v9xH2vbX*vJgqU%WL7%t^r?8)^V`@`L~h`p|ml*Llx9; zIJ|(T)bX^k@(I0_Ja&cj03pu1gbu<@Hwoxt2^*tL1vfw{G*4RHLhteNiwv%0N8`8m z1$rv3k~T49y!+F&ctnP}YkT4Qi41D1Q*+jZ>BadmLAP^Kl#2%}oHs1ghSaFX=6vq_ z&114_KiADr&T?X~rHekoYx5j!zOO1^c{}~xPr$)e!`&7;3(XdPA2fLX1<0x?kSu(N z*r#|NS=)p$?Hm6@Q;Xow38=6++N3ke%yM2jmN+_%=+0flKc_8|2)}qklYS=wGPAt? zNat_+L@mB^+}gmlc_RA)m7DK%Ix4C}h+m&!!=qsxv2ukLp|G`YHZ&^u0S|l{{Uajg z5?0GeSGxVqW~FFq0YtihCHJ*_#hCRI23^|syVFJ5tesVj!|g6gBbc|8`Q&yAD@RUR z@SpN^8i-5U0Q>>h@eNLJb*1sCjKkT%n*VsJks4WHay`r2ZZ{Ye`N(qHe(^tOlMIsk zn-P1mAQCRxG^WifuE)vVj4E~qFydOiMI_;NEyt`AzQeow-%j5o)&d@^N9Puntg|2q zByKgH^DuB+aoQy;S3Po7a2tVLzNVZ~a3^jAvEYqk?;CvrQuPqpeg0I5q+taY*b2+#1z?TATm#oTg6$K*P!c`z~u zA`7;t_a%239-S0_fC>FQL=WEUgG1T`IKgWN6UMbHl3UX$DQ*(9gX-+lGU1(QIdX^v z`}sf&h8Zi^(^+1e;|O@=DXfKHKUd;n?0b2V$3)ilU#SMKMCL2Sm5D8c@VhT5FJth) zt^WCJ0AGJmNzh9%S}n%K!E{I1RC8WD@V|VT>?cxa)QTVVgtAz(I6eAeoTAlu%<|RI zpzN2SHa4XD!kWt)tiRuiX$%L_X;^>C&W*<%2?aa;xwR9rv#7gC1?Zv^Gaq{HmlyoJz5md7jEJc7WFpDd#p<(+lTvh6ZZgP}gtdCaXFMTR z9AvUS1dxsI;zZ8@De;cPu)*@9HnEqIym?LHSa~P{NXuw4X~$*bO(=O4+{ev>79Czd zX#MM?Yy=-#XRKZ@-8D4qi?}2Lk_EAX1r0*@W4mTHoSaJCEa8+3zUc>lJ{D~F9o!Ad zlxt%<5v|1=pE!C&4$-cxmA5(ECxQ}0nW9ASD|2<}_hX+qn?^Qh|1Ry3rt&g;E}MEj zbYmdK-ruQv7%MwkYY`vP`PNw$_ixZi3)aJp-uF6(@=G!@O z`pLFgkNf30F@keqnzH&ugj`mEBCIgBb$;T*A_>1HvV`3BnZ%-9N2_Wq^*1=*q(eV{ ziInDc#>8@ny|v{Oy(bd%?L5Ci)i>UgcnvU_w}tjxwi?p$!4l&A0QR!l=Tkef z_4g@Jslvxmv7h1_JMfXZZDl==@k&Dj$=8f!vX^v0a1)xGtOaxBX>RX7fRt& z)@6iIS*SmkHTvWCIKeH`E-w*NyP|^5eIZ$VuIDoJ#PS&zuXh;K&vDgQw`CGKbHl9l zegIENa({KZ=aXw#Oe|MjejuqDg}gcX3>TViVWK7iszm|Qj;V>#(|qUhDF#m%Ei%De z_S#<@!4wVWQlraNa`#a{2^Tt@9|)+`=U+?>PyR~fCRV2%Y^MH7y;jJjQ*_sgjbKBj z>WXZ%T4Z-+!p0)~-vS&|;Q-#GC_o0HSt%HlI+SJaI-uYdR0d!1amowzi|y?xD!F9Q z_8vg|^&rzt{hgQ|shjPYj1PE~~oRTG*`|O&B8IlnPEx>J~|L zG2+Lju+~9`6PS!sHO603;?0KmJTG&K2E;G#ZZ}R0XI|ETm}VcKTAoQbdbRKHRj#g@ zNf^CE05-G3+@0BgTIyw>kJC1Jb=t7M_}I^r)PPd5?ae|rrZwsN&icgYAl*-AjYmjR zqpKDJ{5x>!iMrlSU0T@nL>{a4WWXu~iT2#o`pawoN6fnI4H}!&R$KaPmSsXV)mg%( zUKnGhDEsjV%EMI_Gt?AbhZR>|>L7p;p(ro)bX|l^kU_Zf7{~R1=SA$yTSjd)Tb+Z} zYBr^?UUrbvx4E!n_a@1)gNO7PsWW_QA!Ly3G^Xn!DX);T=f2l+sE?G_&vI}y9OT>> z3l3;psOwdw@XYB0r96Fcg-D9ww;S?OS;aE>F{FOkciU@w)qydTS@IM zeDfxnC+7)8*6N^#$@B+K@B#8w7-^7F51@>zzexFEG(=zbs2$VsvO4vSr{~v#5vdN3 zr@?fFtB!r|s_gnS#5HvrH@JSKyAF_f{^EX;%mOA+vMlksyFAyo$ro2Q z-caH3bw&J!w+Yw_*BT@r9UAln_)u&)#_%5IKW+UV@MrnMIa zJL5UI@Z*oq=~nQ{b-ix;pKK)5l>Txe2D7XLMd;Z%#TYjynm1x7OV``_bIeq9x-;cU z8*zeN!&KgIul07CFTN{>E!!Z#gN2pX4qZ*1JI0;! z+{vin*y1G!J`?L2zz_~zQHSY)dX=W}0 z!!}0e24`3nhLb~YGQm;3Fv#}NCq=$K$x1NWFxxWp5;nj4$=B(v&fk!FRy;$^+~4V} zCwi$C5|BdSb3sHsC)jN#nFt~QqIz0PF6qE<_xG^x`$aVuni4(A`y<5!F#7d!cp&ke zY{+bInKSTp&Vg{seXKeEx?j9%UmJy_Ir>Cf2SR^!O+IuXfl7?s?GKRAP@aG1rVP8& z40pL7hZ7Hv<*9RNF*0o>WK{Dp?#6x@SCZ*o5NXi)_%)>J%lG{+v1b>s zsS~DjR;M?JnsgIM=Qee?al!Ea9xn$}(vf%C>==!yGkslgCP?$^X(xTLdq#vbLCu?3 zoPXjYsGSQ_W~b`sVk=ppy9yT!j7NNHo%TDooaPLi_8Gaa`^y3T(Yixu0o{|& ztYIcKMo{>+dcDoXV>{!jqfBj+aP^i=I7NksV%>77<)M+vqKhf21e98{oREUoOq#9u5ql>Ay&b7XD>CK1QsH@opIF71!}{_$OEr1R>i^d0b0Yp(A*AO=;LAq9_~ zZ_`M=_bQ^bW#t?uu+bYD96HTFS*jdJ+m!(mou|83A9=X%DEZndN(g%;E3vuIb@glA z{(#6te;D$HeoFRvUwmRyum{1P~AZOa4;`VaeX1 zK=iiV7EXwq;?BfhSe^C5oh>a*Q~702{_OIVngZ9i=#@&k@!mKnShAEteW_8KLA@{# zO&}UF6l1Ic;tA?T%;V8=15-=EF*=|Z1qex|8*Qv=;|5y+5e)rO(pecj(0XxaqT~gO zB>h@t<8NEL10DL$yiY`I{`80fY0>t2Z_if)0%*%i!k=J4`YI-0j_kU*jH0B`Q}Oqn z7r{Q5pIYJ>5zxsw)x3*RfV?UI+z7s6PKWYSHV8kF2gTTZAv75&;!H(|p6$B08471L z7$qdqfVyR{@@i({h2Bb*hc~uYOI$%JvQIQCbm`7xa8Zm3by1;;J=$!LGJ$g^CLXnP zNtKad1#esn-6t=Db#8Iec>7es6L|Xjk$q*K>LXDItZj}a&7scQrsN0&fdiETUQLoN zXq7L4JG)pO((nINWrOBygtjpgGxT3tjlMS*|Ih}Cw4-DKamd$%ysHazYG9LE+lgjS zr;hU-qpUC9wC0OAXCDzy-sk8Zmb<`7%kB^)`gIOVXyFbE_D9-T!m5wV0+q z$>_;=_+V0Xm$UBNhmtLLZDdSuosVax8K^;5qG(LsfWf=S$GV~pWSt#N#WyH=)$1Aw zeCQ@_;BDc4UC$*sV$C3AYhwLa#94K-wBzY>oZxtT5>QR%oA44qzkabaAT{eGNVes< zyKs6ihHa-La4NDfhU7&HaCl&M*7;S>WC}ki!_dM%cHwNrLSeS8>`Oj@zh8zK^?-I) z%g%zbH%iOaPM5m<4=~6WF-fI*{J7faWMX_rcYnq&GVpw=%Q6T zQNyg$42rkzgjH_g1Q*5LF9}>t;XV9z6jKgbHjf{XjdsjP-FPH1NWS_sRHkolJPQYM z(0}1FzeJmO^QDU&ZbQg<>8Sm0t>0N#bxS z`;r)u`0Y8$iL5*M5?cNTUs^wc3^HCG;5}6vZ;94>yw%6l$jvX^)b`zz)hKfPl30lX z92GC(2p&KH84o5Wz^}`5J{Y05ue6)D2C=J?QfDM1I@7%gM4O_D+JJtO{@*+F%l04N zZUN@GbcG;JUhG~JvekFpQRjN&UyvD5EmZLcAjfcz9H$?Lrth?pPB<3PYHhU6os@0s zy@&kMEsS43Kfe*gh%F;v?G7r+&FuQ>fTaZJCn=}j1QslfytA*M7|ZRPcFX~P1BVvoKN>LuWxDTnMh&h7#^E_BSDXlYwNRK_rFN<+GB;hgS66>UQCd1Q3-^Vcsyeos|W7 zn0X)|>SedpINEP6zDsNd^3~{or;8IJxw=T9#`6O?w0ZYgj!8}!whLL%*u6q45E~Bq z)+eHwIy9gPG#%`M;5_Xl@Sb|YA%XMYQs(5OOyY6jt`8wKRX$EJDJdi)k!hU9f+dUI z^49{G<_Cdw1=e6JOWAQ^i8fL4P&rxWaB>&3q~Yt0%K2LGWABqeAE&~eXiS%@80*g= z>p%99)7hNRec0tXhUW!{UZ3m<_)DGC*DiL(Z1C@dDP9(!dELNJqE#!gzpX`My)Y?k z{rL5i5B~nWp3}SAxm4y%{ZDxYO*zq)ezoC0;>aO!PAIh4c4~h-@j2`!*d|PKOuXl) z=M(+=yA%UFO-oUJQ!LDa2@3VN6BD?9HAdag$Y_+6N5|b9HKw7zv@iSni_>tKOTM0C z9D~%07Oi~6wYSGa>a!9V3WSR@I!}S9Ywu_`o~<%v{gMS`6vWtT<)!?3VfZg$+f9zun*6{< z**oOL1Sy28eXQ?UO-p#%Nc;3zYjPyuiG|p@OV7f7*3rdI=HIMY1O28Sd_ zE#d9R*w)M%g?yEKmPHBv)tTHzZ7Gb)20J*c|Eu|&=o-Q%2#%N@@uV~uiB>SyZ{Jce zQ{Y$>M%pf*%}EI(%1y!hYIFG#hyiN8vd{?M4w6&X zF`VP=6?`ANLLf+J0)(q+VzMR8O+4hrvb_7Yhv0ZIv8*q;$A_i1R&nZE*`sVe^UjgS zN5CwScN1gs`|Bm&T!0h2d>TmY%(s9x3WNz(JJ4KlGYxB$z~A7qT6Awa3$BnRn35Po zcYQ6sH_Nm={|+UNHP;BR6nl~q>%%7$Kz#Rd)v;XMosQd#eP@VxL5gQ*Sv+xUXgxlK z0~Kr1d8}TiP1AqU|8pI4s61s`KY5m0`69F8b*P7Y|1X@Fo1W~sN*(cnE03k&Rp=6J zv&FS*V>fe?!0<1{E}y3!Zzm_i;v2^-I#Wzp^&OVpeEeT->j43jP1D)hCV6g4IVA<_ z4n3@$cg8xwyhRvIg@OwX4wDl|zptE6_+)_CJbXkcr{S{k9&?IY3zzFW&rGZUTk`B$ zg_di$9^O;}#AJh#2Hw6uHJpm7>PpXMW~S5*jB^kvw6l#C3*G)PwY7AJy>}FNeX8vP zBmFoi5)bc;n)bp#oA0c(>wDgC4~!h8>d;`M%k{(Dzxt4M?V%e79lI>VPuNl3?UkFc z%O?1u<=a;wP(b88Hoe0_6#Yia`S;@X(`m+m3%Np|tRX+AG`AcB>%e#d?M0nwc7@L( znlf+e<3{DwVNLzZo!lploF(VogR|3oMIy5!BXxCpooV7&OzT&~&y>IbxUF;jX_=w` z@`3#CrlouF3^Jd-F$&vVcST7TrJ#*#7k?4Cy%YDd8<;&B zZpb$f)`-+xj~)4Z8w#p>*+I&bu-*9qA;_!mh7SVwB6WiQI4YFdusTA|a6 zPU>A$OIGCMvDyT18Um*q$e}@p)3qpYFE9_F8rM-wbkM@|(~PCcWp5 zDb47D%FQo~fP>|beEv=I4k+(ZZl0Pvx|5bvL|2Q@jx(C@i|PQkg7qzpVPCuv3vfnw zIK^q)q5?BvGIy7RP`AQzJ4&|QzETWU%MVf!SZxwHA9G4YWwy0|q<&PYM@!2Z^89no z`&}h~;Etqfk@U_hc)h{7A*;LR&wK_tJL2$h470^jD{slaO(RJqoRZO{g@IAkBdyxv7chc{?|6dHf(1SJuS|59=KE zyMSciGbQxArs-TleChak12ivWKe0-q-kHN&!8u`;@)HQMQRTE; ze9rNqYwEMaWkHh*h6okXn0g{{5B69fWd;tlbbgYIQx~dEfi1Dh#8Pj7q0HXM|0v>W z^9Q|#Z5h6=_Z&56vw0s156&V#xyg*d3hZyKNkvWR)X8Lf=kpN1-f@ht?kWIjBlY?6 zr^Bo|Q^s0T>n}QeI6Z!J5;yVy_i7Gzsnlh`fuby(+R$`pj@RJTv-5B+qPg3K>wn)f^cx?R z4mlYa@M7!Qo%4JUNH(ZZDCx6&@m`Xyz}tms;KrPH1v3keXKT*u?J)kk{OL`6>c;-@ zd|QHU4TV?Us^;)5pB5M&#FTF7g+K3cXE|+nnG0KP$odgQvpck$|JEC@n~q4<)$ql? zPw7Aei|LJ~#GoBsGGb>lCUh%^&|Cw@Ct;BDrSkLgBF%f%bkJaVz9Y<8(8+5VEF>X= z`u^OaUAp<#&h~!Bm9nGXzF@I;JJBU8lUByg!C{6^%>mRJcL$Dc?q6kvHp|T|UR4&4 z3NRR3reizt6u@*=0=f2T|GJoCTbin?`}0f&XJaFee!Uq@S#d3V5o!K99jQUL=fBsT zz`9B&V4>h^+(t%fE;EdnDSQ1d#y$BesOIWtvZ;F^MQVQsvgfPYK!G5DfJ*niP_Z^@R zhRL5~E$Ve%M9%+$LXSDj>E$JhaaGSicE0b7h!Gn3(`UVaxr46ZX2+I&Z7y0WQ{jL` z0MS>5Oog3X=;R=kW~_?#jl(%MEzuuVJ{(>L(N@*z1c2WZo zzegSpsBf-ZpNQU?`N5|Q?<=YjH%xlYp02NwZ2P?L6N!p7PVf4tUxpLx$=Y;y{}Rv& zkU%@NWP?GWMhRWH3({Ijinlb$IydUz6ma6TKQ{uS+N7h889kb#T<_Hy5AT6f?gPbB z(Ml}xsoh+;0=Ddk?N<9mloZ(A#xm{j{P}aL(din%YKy!Uy%Gp4*5{9B`&C*NmsW}P zPV7Oyqvup80Xc32#8mmEEOXW9oUlU7my@He%h=X1VO+r3_pWx;)_bdc&dKFh-6P%9 z@MGUo@&7vIRCA!#i^!R58X?lAID(zT8o^70-(M_1k>0WnZ}I^%ZupQE4qa4s9#OA* z(4dFBT0n@`Ck+a2q_5B6epo$_Hc*%V>IbY}eiN2pd1vgqrk31D$PAZIM>+FX$OdjQ z^5b3am{0k{Vg?to0;JGgLY<+>b&NJMlx`uVP2v)fyMh0KqjVO&GVwzYZ8VXXGyi?x z|A#NfX>2U+$K@l$_hS!MSHQ8fPBtH6*(|AWE#)`x2m`bt|3bs>aCw3y`5W1^!%a-g z9N(|!WA{@Is1lMr55A`um*+PP6cVz1Xy-zlI-#r%O@MuWV^FUB9~DInc=?57S97C; zV=#($(0c6Dg(g{}`r7h%r5`)Kl{v7n+`z@tnK?Ezn_(D$3Mbp5^F zc)?MPOmxk`gglhAG4jA9I=d<9le7$CdXs6e$h)l)FZAZ7sz9rj;^L2e`Q)vXCI7Gi z06oex_r?hs&B%k|)M%-^eyh#AeG0x&(#;OO+SDxg!j^g=a+3n-b ztprpMtN7PCbB$L#K2f`TEW)=h#0MKA1N!s&$`?;tP|^|Z(h++`J%noS5;T^Rq>s2k zKTO*%IFW1U={Fv>vagFma4BK{-KS!-KQ2MlfSXl;Kpus6Jlf zgh^tgXKy3NtH{aN#E@ykwC*R^FTGh-uCK&gQTexfV{Yd&7mZhy z4y$W9^r-iE>jc4)`q#NpC>r=a6^NNuoVt>r%FVl&nobt{J~ld9I?yOXHv7RIccR=4 zCK5CzB42~gUpJE>hKvysQ7X1j;HbNHOqYlbDwKur;T?O!pfr*AAjSlF7Rc{D7HM~b z^TNkC=pE*f_(O;I$1Dz#e6E5$Qs=E->uu}ZlN$A46K+ve#gfwUI|27c$$FQ3MjDvkTrM+zq5d61noi@>QW=aW z-#HiaO?V;p#P&ndYkhoMo6PfLSAX(BFmQNT{t6HZK=X@QkyVf&B{_0SOTEp(9{| z+jsXkv*!EP-;XZi|2wdYW&5_KLT8xMr~Qd+8cf3LWwn>7U;{ zp$sP`l%Lt4io?CrOtnmDXq^*QUh&FxP^Dvd)ceNv!23RLPNJy2fS0$OuI~nz|B!ds zn6A7hX9{ZUO$n<-{YP<~MIwsMmyVumYEZ;9amUu@IiDsB>uwOUzuhapcb)jdyT{aC zUOa1lse*Ok{2WD2#cE^IJCyU!zBiigI14N=k{rP=->aE8$@Sq*5e>+W20G&8ISvVT zCNrhOUu18a{k_7LS_Uezao#63w+Cx?O_^p}3fA@t7GLb4MLXAu=WJD9(HEjE5YHU+ z!MB&O|9P^omA?CjbzZC_(G0P6?K{&R+P9OyNoSb4QzL7#R*;tUPkIKP#dqCCg9Eq! zLBqh{^4hjHzAKPEWTQ9Z`;F^FyZ?|_1W-dQDpPJ$i-F%SYAKL;Y2j3(fuWScgjskx z6I;wNDv@2M0WgjVokR1X9@LeeORKZ4Rf|(buN--la*#wwP_Bryr3nrkcAn1t8h|Xh zYVp3saV_2~9pn#jvsxM#6THQCBTaJV$5uQLQqva<%~M%GhCbEuH%hOR%&clk;K=Wn zb=pY_t*xkLZZk?d8KkVwzh{HAZ5ug{i$qE;m|kDKPI(7Q)-B6TYI=LpYB2WYZD2F` zVPog2{={CnfM16-3@1~PiZ6X9|POs#(7TJzImsQLcdRJ=$n z%a-e7+r>Ry$pkE(yF&8*7lUPH*s_+~7@Ghh{Vl`O%b?Z_mcnmZ?=(`HM=%{oB4sq| zn&Hu0jP}(sr_HhA4T=c7Hb3bzT+foa5wY-t>6cTCT710|O>L7Ek!6z8kk4yU2>YWY;zk=la@cTuuNW;;kNuXv}FaA-d*kaA`N^fKbwagzNF! z&h(Rd>2FPT?tvyV9Nbh>CM5!|_V}6~;RkYZA?K5O{RO@+_?PzGxtfYlWtR?q82=$M zV<|@Ph1n3>R=NNeZC2qK9T?vgMf#+F3a_5w-(msa-A%pPPfWuwflif|6f*^&tUGx{ zGt;OXms@IXjHQldmn=|go*Vw62)6lCb>yTkA#)$Jpa@bBE8-G=ACx#1PIh>BZw$7- z|E%oT-v7bg3tj_`vs9G?{s$yUgSRe= zNd7jH--Of&%tzGE;CCx!U%jyY^XrUyZGs-wn+j(4MspuY39;H|kU)@S*_>FM>+zKh zzL0z=?X|D@KA?4w9;>xeNATm1y3vW#rppTtieizR4~~@VIZ}S!_+xzJv2<1=F5fX$ zZKwW#KYqGYfi|D0}9>hU2!ze&=tgD`uw58 zFG$=z=hqdvjk|4i8Fl*n+G<=R&_SuPX!I%>WlPI4HUjOWyjT_b@SNB0mSRSU(xh$2 z{W2H3x=KAI%}9k?@189_&EX=V^$Cp_s=i{bZ_Q$)Lq)~CwT|Jw+Ec#f%S{m#{6j!O ze!6Ve<;m~p5mIu%(mpatKuTDgMe*g|_tS`T_@|5KpZ1YGMF#F_oT=seh;-hrPv_dC?%jq7&tM2V|A*yZBpR=~ZS=A30-0?h@N6bp990M7le zA@IZIlztnKpgb8BBx?&@jx}i&LyGHX-nil#AkeH^F7nDY-wu^|!q zmRXwdy<@kBzbf}`B>(U;HhtuyI;pgaqD9@(l;Q8|#1;_+bF2XCaj3NdE6eTSfJkz> z?1Y;VBw3=k|*m9&sU4nj1@=-@l3bh_m5$K_#q2Om^gH=b@fU zn|u?upeGXGQrz6G0$b`ac4JWwnTVA{H43PubfAsjNsqzF**TqWRMEt?q4<^`ku%g1k`=W#q8p)r<O#h9gre&t(hueq*o0PtE~Gv5=L>6WXdr+inigPRf26$5h@qW0fOv#(DYrZu8MtzCkq}rM1?cr~@hHA=5eYV`%iFsDThWsD zdi$gUSz-DA_h3NwCk#Q}i!W{sTHU>1`|``Q>t=P;bQs)LdGHEA(L*}~Ya=upU)#RK zpSe%ZsK4;;m@!PHN(mu{fcJpfG05s7KM)CI_B^3KesIP?(~bF)3y-#om>))802V`2 zy#5^$w0fl`(HL>|v7D}KCMS{X{q8=D#g=?jqo9#@fcO*@`21G?I1_yg(V>a6*C1-O zO|8I&{*jz?YPbIVn|C(-tv%weh3fs$j38}nY(vV9#39M^8Gj0hz=&2&>x2KxT(ZVO zkLzuXI^J8FeIoD+9yuQ!<>7*VH(C}DE3@PelxrXbCVSASMu8=3{&ePk4|zh#v+T0I z2OQFiLz+mZ-!OcKI~l-Zu(wAXDkVUL>pWRM(0L(cj(#OZ$uf&IDwDBSWdL?%BM6yB zdF?%}RLe198uw8++b(K$75!&%mA)auCW`RN_(_SesIQXG%qY!oX_Wx>62AWJ%=miw z2*_bP5wqngs4g<(SM&4e*t*B(6c20taU&KkDdSZeYE2=I$l_#&oo(lrFDXf&BirvWU5a-h`L2xjatZ6Ezs`+Po zcFFp^AkMcbjyZ;#pt@6+8uqz|zy&*$TKR|e)hI2G?%d5@+W&#$5gO;#7++&in~zKQ zBwEwZFjHu)kvA?OtlSUoS-7su9+!e|Wh*t=-$#x86Hy8y=-CRTcFQIb@%SIO{0ARe z!)2Q-?L6GS8!gHwnEq^vg5w{=OaQ&$ZFi9#yzhCyJHioPPM?q!UX{Xj*!^oThRF<9 zC4{T}uAT6~b1pt^tIKIBEw7r~mijAsw*2a}6ye|jCZ2tvg%*ye8F(2h@x>Aq%zsBB z^{H9_d^Fu+vT6eYh}tu*6Llmum!`wO2IxQ2kP8y&eIwf z=TK7z@gx=FZACh2Nn%f)Uj_=MRb9S+-WH|+sY(56Mo7|ugXY?!IE~_MgtA}Ek#gcOG z3`?(whGka+F9^_fex_!n+BoD^O+A?A3(MVdgK-|0lj>QPML;ZIHF8MZvm7gjpH)vH zSBEtTxxK-fA;0n&&K|%w`>h3lJtPw1hh)}6U_C;mO&I^GncZYIMcA}%2yGiI?!;wL9M@Pjy&)H;^8?Kz zn?*E14uY^|?pS+%8{GCk3|O+ryBbmXi_{5!Kp~tt);9Rb%$*qj6V5OS%Y3^m|9eU7 zBM=Haz}Nt0#{NccR&s3VqY)M^;t2OVg8HBck+$n$K{{hd3QK#C`u|bO-h1nf>o)l;k!}Q#H}J zoteRx86%7hO5arIG*_aLXM-lc$0cMG39}#GJ_{j|n7Vl2Br3cf3jD;kDh~p4;6Fot zuL~74y_aH)e#>jC`pDtRvKqLCBF{er5;#2F^I#f8)6!UGtsbDtGj?WKh*-bwvR&n0 z^N$xU)!M`fesMVQlI2-Y|H)%q;B?Avuit)+c&qaE`)?~Nde ze62wXVYX0bcn32a%|NuCrqT}I@uAqo5Y~pcO?6F1fJ_KP`f&H&;+U&#yZPjhwrvYv z$hpV8mCbD?A@TQef*4q6ZBw9a35@$Hc5sKO@*;dWP4JAgLyU|0z7J~Tlg?cq9E&Fu8S|}`@ z6i<8#OV&tp4`p1Y(`bKE-hs6I-h6LQTFm&Wp*;{@?oN8*u`)zG3zw=wT;MkNRo-^+5jV=fZ~J1i|15f)}>^O>U$f@!>f ztFjt=G7aPu-|$zOEmwU?{6#X%s8RxpNdj9|tfjKJV*@9+9?Z2FsAD_k-01$8L&&`= z6SKp|&exm%1)dB_nQ$T%==4?T5%D4my-Wc$Cx?~cNFZ3?&}52mY7TOH@s+4 z!7?;4oETtZhS6hPviC<9%6*axkA9A|n1Fg>_*D|R8;w{HY4|w}%n|?U0Ru1{CABu{ zNB9#(T1u5Ay9NQs0BNVka6A&r1^2ndKsNlSMQgVNI7prlH7cXucq zLn9zV_rQEx-sgSq`}zL&IPf<+*4k@b*SUm2U?hg%04<{Mhc(z`l25pUwDIrf=?327+GA#SEWA>)9HVM&JYlo8FeT7+2fvO zd6e*4s$A!)1&D=&dp`C6OQSllryqdf<6b2bp*c1uRTCp*VGBP%-fx?lZYo!Ov+dZJ zzCmqL-WPFJ5z=BSds^yOnmrC4^LHuPl*;LTIEloL6KQ^ ztGemyx!)@1+tQ3j)Y4Ku&OPl@erd`gCS}dYd@Ji?7*TT#DhF#(mkibJo(@iCpmDKU z!~-cCs_>{;!kHyDijALaT8rLJq0MHIr%Sb>W&bU&2L5>-fjYJjjX3T^C+loEt#9ve zwWn@A5wwbPzf5q$FPgc;h2GLZ8IxUNq;g$|>BZ()zObT;XUi^7Ohc=LK1Gx_fBCY37b^5|K#FQd)b8H7@W;JL zqtsHj?*x#oEH~@!pb=n+fcMp!`M8qS-Ve+vRRa*5ChWU~rX9Ed*z{F!@{sW6+G7F5 z2YJhcN@uL?zz!JsF7@K|@zb#D8IMbmHc$UEW;@u^(`rcJYV*TTS)B)k{Uk?)><%J{ zZZK*0lWHFA6yW&+B*U+S3+t{A6OJ9hvW=Ir5-r&TrZAVsUAcFEdKSG4BN`Gl4P^%< z%HB%Ki1^)=$?X0}uZl@%O!}}2a+sOYHmZ1~z&2#2)$RZ#{i&15_8?8CCVw2|VFS;` zgU^dDZjt)#@Ec6OE1qI=Nz_v~cw<2W&mTz_4T)-=j2su85Y6&-EF8k>w>UVefA<#+ z0~lQ(`M6Qx{^mrZLE{!o?cwF*T!1s-nIgxHwTBh$*KXpqFA#C-5Q>5x=sD<7FFtnc zX^ALEOKrL>Ty{vY^Ubz?xvWT%>;qJt8N-O>X77LFVSP4Vz2lfPm>XakG4;`BSvT)JF1^dxMX3f+Er2BWLkl*#r9 z_S+XcHTyL_ZljSPc;~r>O+NvGO1K#lWy{1%BqehjxKZ+v!cp5%zs@CcBp_IK)s?v3 zjht3WHy?XpHe2I*3Jr@gpuc_@5ME--0!Tk$3T>szM!%Y@{0qZqXFnbEoqBcredq+y z19%k);$HX8u5rzVH_xz{vBJAw6Vqp6`d74T7x$LWZ=I^ko}y~J=YmI3%IR=%q$ly@ z=bmx8B`?qhsRgAC!s#yKrH08Hv0LUz1@UhBqPw$exAzC3)s@=h z(pBKX^R_8M|EI7#oV7osODB7+Ec*)dw-lD9`1$)LukE{I%_kv!79?r43l9WdI7-C; zKcLe+ro#t8#N53cyKgt|;785PEft$R-u?HLNe@Yl9>hpS+p|!cNPa*0 zX6m9apQZBV8RSI>!O1zYI}*)aT&lx3*jIk*%0uQp#WlZZXkA2%-V#;Q>oG2{)aZw_ zedeDKx}*k@n=h9bKC$~;TxSOb)N3bD8jxm5L_vCnFSCt){_R83PKVw)07y9qs~9=S zp0}zuD)f|j-}^nYvv&Vsx7^_aXJ=l8B*WzA0ozj$J4_&hujl2s)(0cqYV=yNzA}Qj zFAbQOJ4sx>F}sfIzWtHRvUJO>IWOPo9t_e3CqE{q=Pk4)(O3bJ`69mv|44PjUJMC-Coti{!4fO3u0~kqq<5x`b1@Qlk%YM3*NE3YiwRl&t<*6xBVsh z^~ILX{5T&1hyTxCHs3~{*~ju_DT3*@?d#>OI7nV10?3f#RsFwOBGp=#f$~V*+6iOM zU{ScHa?*Q#YoS8?m*F=N{T{l{4v#AK#)8m{+{<6*qCM{wlFQahj|%s#{A-Vua%m*u z!$+k=71EZhR5%|BaLl zP=#0;eH~|VQs)U=@A*WCuQUkVs!-~_k~tF!-v0dVQchdRtG&g;&yju@&XgKF9Z7Xg z?%T{RdssVHtWsMbsdo|g1nr9`9fu!OYU*S#L!`Wp^E~?Ln>7EcsIZrr+-gEi=Q}G6 zx$dDgn-~yENrROH_jcU2ISKW%%pha<`*_L#M`Vz_B?Yq6%+msx2F&rkV z7oj!dBt?NK55^O6A{0OcRuWxY{8bre1Yv?PhbwxED;5M=1OL1|f0i;DV^6iONHbt5 zhx)Oz<7vu(nW-{y;4X4HW+U_rhf8*j?ruMT1xGHdhLCE#}i^5WipDyr-x2?*j_vW8MX9 z2|8#L87L7iV)y`OuA;kvJhRL>y;}5%jP!NP1c?Ui9Wm^%0S8v2X3fu}*go*9$Wgdu zoDLtRSlb1``TWArfQ=U5PtfRtzI^+As$G($>Dx6|G_yP5^|jngRR2?3m*YO&n_qJ^(#K;$Pjj%c#jsR`d;KSVw+nt5S>HA$;RO5ADhcf;lR;?R46E=E`@dTnz) zJSU};mcS%$V3cXDr_PZDs~HoegHVi4Oe9wfUwrCkas+NMI%Lg$`*o&rte}{HG*h15A_N-5-8G+v^Yf+t&=~2>R7I-LkmD*aVe|&$ zdHyZ4D-C58a^9iWnl#Jjl|o$mA@OmB=s`*Wq$~$!yK>!J4MJfD=M2KPL?>Zo36Z-S zL6$xmD9W7sufZ-OpdB>0dW>7DUB&)=m))?2S*aHpe|_tdga zoTRdvH`oZ)<`%HAYgRvQmrdgp%8|~PHuKQ+8DesDVqr}hSbv5CAO^d}q&U?Qz}ZC* zUb_rTx2B3Wg__R+5CSrc$#rkti~=Y<`9)+8yH5weTD2eMd!;daQI((4+ts(;1}m58BRbyT5%`(GrlVFSX8{ ze@QeU$!oDNae>QP|5#r}J=cDfneh4P_#0;R^p|JKB^P3ZXg)kJrR(^ri-P;I>sG>Q zazRHPW{hX}wvVXVA0E#Sn_lFG6fhsCiXPSc7azu067mMUA+9s^BHBH!_$C?|Vnf#T z5Q@Fak6|?Wx1vTS5E)hU231DjL*+oV(H7oB9pfB{Z7>+C0B;YY=75eT}({;!WpmQS@GKwtajz$`K9}F zY^(vZnFP0+NHYT*FA=nsK53IV&W%wU=?}v=qxbU(=k8muivOi42u~KLc?C3cZ^32P{KKQ?YlImD75W%-GF9)aAo}=|X5&&EFDg|CA%4Nc%qK52Z3d;? zWp%vL?5eodz!T_mAjDt|Z^8!97J@4#)ij(Ath7&aRj z-!yj*Ck#v!y|E^K24lkBU^0xAGSI~=EGsOVbAZQ66`n&OmT_(V!E|j0GEzWf8Sj@{*pR6 zV#WRX>81z!{E3ecA%@;hm+OYvz)O?hEEOfCA7KSUS4_X)8JXi^87|!}F9e;1TNTcr zabBB2(bg?PJyTCk3U6*K@HgGi#TlAe9h-@#k~v_~ZV?XSPhRXWan;tJ$RkHF$WfBl z*Dn%@Yns!KkkmWBDG~6E>ErB`808+xiy@IfF-kPMPcHneSEhWYrA@;?%n9gakH|A^ z3wl4Cg>6MDfsFknWGX1X%QnWr;0&gNX|nuwsw;R+0%Feob3JycIkF3-j0G7ZpO1Md z#?18-S=H&`rug7Z>QcG_ddpNvaoUu`)L$77U$_T%r(CJuGdZcWL5Bg`vVba6||khC?ulEQnGooM6yWnxctX^X^W zu6{(*Z>uX3lCapS^qRh;S`r&DQSHqDryv9J<#emRhFU6_?+$8!1ly-#@QV!_^IhM+ z$Kdn&$gB4UuYsbPH7n?K6&51CZCG_qzvXzX1RjK_nHW4@|bE;!B3$gg;N0dnzHjAf89o*41-RMz4AI2^*<{JBU&d0XZ)^h zyibr*bl3w$k{tRw7R~J4J^LXB9~m5vt^V6Mk`R++-cl3jQZC=KnBLW~lb76)H^gN; zW*LA^i=c36k zRO)0m!+fTYS{Xci;BMu07d9kE5;&Y;I+oi6V<B2-Pk zH$(F5K`t*ef*)Ubao6>BsSCipA%Qvbyi|BfNJz8052Q|DUfQi1xZi<0(J8Tq;6wV< z(hheF3+OqY?t*~aOl|-b?9>1h5g+%pI_KgEbw(gb>UPM*dtg3cUY=KrbxpP$Q zEvpSe?jady?~))T&3F5|=MCW{m~X`Zwu}g9*}7yo#B7wA8VKEI?ixHXal&&R{|j*V zDx4$?>}uJi@< z75;1pQN)sccXzr{9>~nJ!zy?A zrfp{A!aSz7<&2$T`XMn*@wgZwt+Ob8+RHTt4DCS~R$}`NPx-^1iUih8G>#^KWJ__Kb7w_o zm5I;B@BdjSam;M=3Rf&JVMQ?*slDF+W7aeB$M3UL6jqUh&1I4VSo0j97T#4@HBFm{ zk5_1o6}GxFB70Gs)5P}#P(*XOL){+2bdB$W@|TW`wl<6ay6v($Z;Q1-hxB?#_=J2c z&ZmLcNe{8R@5#4R(AHQLs~c&1zI;Zax@mCWU8~96_X^AORO+$w5txK0|F$CRd~Hr& z&~kl%y1JqYf8$h5Sl_hkX!9!h(W9FuWHflJk|Rt9Rgx2ejXj=Qyuo!f+rNC$D>8g7 z`^NTVz1h*XEap(bJ<+8G<m;-^ytUE_kmBY|7yoQYh3DI1}hr|W^CO?wR_5OTHoETxll!U+0 zxmcEXt+W!Tarpn^1f2ZGNwdRMo{tupeX7VKqjoSkySb`>2xCAFSQx8qu!`T&P>a3r zURM>T&F7zbSYVnc!xlIaF3qHS9xhbCD%I>z4cF27{u7hTk=f!IA zG7io77SoX@WA{*!fdA-z*`z7|gklflI@$BRuv}Wy+?d)+52x^&aPBjo6FYTK!p27~ zU|Q*G>0C<%{@jx!BS4IkBOu$EjB_+cATK&&JcD?A%UsXE-)JuqisPF0yUa`##jH z4fkl?JVwONM9KtSJ+~>}|3VCjCI&D#x}9aaBHNQ+dvMXN4>@7g$d5;C)P1S~L=Z(j zli0~9*Kr2Q;BKwna4Ouve-1cW=YG&2<62ITSeZuXbzx2YDi5}YT#yPDuZ)!>d zYb|`L)F|f5J&SXNT%NsajV;@c@3xyilT}$tK0hhMh=hwSu7!r~c69|>9QuxR*V9pS z1(nNw%&$lME9ZRm*xc^YYfO%UxF*C(=((;^)W+Y^3lJ01+)8RIsMz^Uafn_!B{t{= z_fw>_?T(fT$o6iiV-0RowTY~q-Jh(U$6ChlabSd)ubJN+j%Dg|p`L>#ZWlr_H6~Bh zZQ21!mge-NsnI4y9nM{d>4+{4{s6gS;tK(fYmqTGmQ&c`IgEjttO_%(bdLq`66<+< zjcb*y*RO@@E>zMSst9m4x+aR+`-V!0oO4FytEI<0`K$AM;E}s*1OdamQ}%i0z1e)1!7=BQ>?Y!s>SiH-5O zqw&@|Z))ke>V4(ec$Ei&vsG^+_6~_G8bdR*)R>rK#Dq|F5m5Lb1Z>Usv=AQGqgy9C zmO<-khSVDvJ{>?t|6Ao&#@eTMau=fGpHUMN@%}HmPwN3Tf_T&{$p^ob zdr^@E6bNsY(Ew*Csp+D5tQ6v4XO`T0oYEV^%w8Nv@qt*74&q+R6r%A&g{D~YK@&0L z37BvZfYIlwP4?XRzA{@?j#5nFsobO?fTwdLRX?A(%dSLu3<9njx=&nVCED@@%jxCf z3C5h)z*XY!pd961hDCr~UiP?SZ6Ty^2?&puwEbeM^F!IzLTzKCXjzrz;zer$bd?Q5 zJHBdOL?@D~n;EN67$tp6d5-h#el@<3n};^|pC8XR=)C4?D>tD}(*AU?@Nn))5|LZc zvo_RAZ?VB+wr5dKBYv@=%{6tM8qk?sG7VSYINMULe8LOODnN7$=B%FDTN}-H@?Cp~ zzOcSK?VZ@L+iF{=HXn1L)6=w4WtklJH#rBGFACD;9rA2T!CruyD8=w$tiXxi6YU?> zMA17H@vYUg&0QBa07>-^6bX(sau-yYkRoH3CSw;JSG%*B7pj+|u02Oj`tml7rS@=o zwRDTGZ5L=$xJNXuUFO6k@R)Vky9glZg*@m!uY!djQt+;tmue_9+^H#PzZihJ_*Psi zAf2Al@RNFlKLE(8w`!u=YhlI+**_+U`03I;Q48Qg%3ouM` z3-Ql`PRc5J$qp(V724uT&#u_LNx0|%zT^q;%3k5@HmhjEV=Rr-E1WmeI?7D}@KKTK z(W6HjoCV;C0J`+6BVA}nz3|K3CDU8!+XV+O;%kw&YjZDQIpI63AI}yT=I_`y6JA#V z);l9RNLU4QSd*GU_7GO)R;fg!?2dG^*?F|`5uvyAv9sm6AEmPSK6&nA#u7Ox z@*6iE%uvxLh6Jd|2x+I~U*BF{i1A7dL8&m%GjT6Ej`4_0uI7i2BbAh5f)1H%*csEw zYf(4?4GCwzZ19(>gD~m(8#;FLc;kOReMU&Q;cKq-^$uW&Hp5zWHO?EEOv-$kluX}L z)P{i7OaXfrW%q~R(f*BENnF6X?fC7%fUSk%YC8?sZw3vT zEme5J?|T9@Lo=aa-xc%JNTB*z=R;);0Pr3@fyAAt2T>f?fH9)P~yZZ`;;soxO|g74D9)QSF>mKrpO>3EP@XC0 z9T@p({)fy7G9VGTSp5tpcl>>KqR{~6%AOLTp4`T+K+~+s2%A&a$x%s`#L2L<=B3Q% z{s%AL$xn4(kyPWRv~n^){B)9%(ZH>@rT_`rGRH!Av%J)&3W5;JbsNUQTgI3nJOf6N zT+?@l!$5*64BR_U#6FM+CR;p4Y~&4EwKZyXQ--GWV<|xOpd`!VL9^0G3*LiDE*FQ! zWF9K%#J6F!j~$xLt(68(I@sGcylduDTwNm*o_G&G+*8j`h`Lj$nygMU^ypweU`TD_ z^mq|-9{29uV;Ehd=d!fUkD+^*xD6>8JVPqyc$qdA{+JX%ssw=h-X1{F-_)}qzN|_) zP<&8bH)6Z+Ou>zr@I=1=@j8OAh%ubmji0r^70s1bfbSrrTbOkw0QN)nW9;you~V6J zN@+p-ocV>e>a&!9fUf4lKW!5eRok+&SaW^wjvia1nIG4`y3C?AkoqqLkkRnw+=xk*7gt}%-a9gk;wTAMGVH(rQsvitF~*BKPd*It?Y;H9r^zp zdVnc>M2etb@rWt-e3gp5ooxCV*dksK|9Z#uNiwIY?I!Uu{>^=A8teR;kKsc;%VzfUI%%3eT(~)z3b9vsFhw=SO(d~Me3=v%-6-P zybZ0@OcI68WO8XbCqTZ4Dg;C>0CkZS37NqRw#7URq~~h2H|CP|XFrFuUYKxE7FXFp z*@3$DfhVQ$Qr^)D|KhI6vb+BA7qG!18}=`C7An^*JH4eSEW$<}9;f_l&7b?6c#Q7u z7U6REpv;4%`IM%yKBn8z{e%}0J4901DOSc&mhbdqkYGsGhS8R~zsKLJcd9wQ&lhg_ z;lUS{Uy}4qVZ(s?hs1#R8zOjI%s(Iex_>+fl0H5(1J0t$ANn@dX$qN}XeoJdB~55D zQHZ4pW-WX)aqG(OM*S$K9vWL&{$H-^qVu*|(%zD0*SU&GV=@e_Pphs_$yH@dZOX^0 zAB$+_&+bV%d2xFW%pr}{z&Ibsh~^(bA~sw+hBQ=A5_gk$+P&`;?$yUR=R9voh%>KO z4-_4S>yu&!*FO}Wh=iADeabDX-k$##UjdM{@NTm+@~BlPWr#wxlyEvT5qA?m0d;cI zEpav9+^qL|9v58Vt9A+B8j<3}hYYhJV`50U%_rpBxJq&h zn^c%#1CUQv>aAzP-cH-Y11l)HuNoJbkaJAl@+&ihayRl^%@RxQSmC_qmxvb9^u0 zaUN3W4-$oJg8bxsw${JR5P7XhMm|gu|Yx>V`ZwlXT9;~RaMHgce858 zRY|hWMWT3=rH81NYw<1FMBzcT}PxhjEg@s-n%L%0V*0W2H?b3-o8@+ru*Q`KM zZ3pAFL4DVtY1T`byI*nR*hU@NX z=DksT3cO<5}&x~mtztGIjg1+m2qf4kSz z&>s<#?X&k}icPAr&OU|#X(HB_O`2g(Rhzr^dDtWRJF(Az73=LnnK(64H;IMw*QRGS z)G#Gq1E+2G-R-45(&WgjYAF^yT>mBD1o|XgADQSUYDtgv4Tz;~ zvhZqbi1&IUeW92qi?v2q4Cv&&c^X|jOZ=GeC25W9LEMqopadbL097g~t;PNDZ3^zJ zlq|*X4;uN$Il6!oZ7@RR>c~86p~Z$KK3ld7vqubP;^nT*m`f*u+K&Eqb^l*a_nqF5 z5yelx{WkbYVDl=V;kd4~mb*<{@HJcEj#*93;aKA{iw!e|= zns>5_&&a4+pmkrV!&&j6U(@$hTOsn8&u^@uhO*Z@995et=M5PKUPxgJ?FRALFQ;f) z-2|>;+364EW_!QeurDXp*W-`-!XN~F)lgq0ZBQ9Uf^9})d_}Q>k+yOz zQi8r;*i!Cm?`m6N*`n)r&S39iA&Vb6uu}O}M+$w9Yky9%&Ut+kzX2Z3;VoYi7@a=f zyMp{^c(Bo7AB9&R+Z!ibpX6G7@aM(c_|e1=+V!M5z22eI)`{WPE6mFfAD7@W-yoWv zKg3?d*R99D%}D|zD-Xh4%@#LwSH%N5Hr!8yCrKiMt0R2_5^bxC?j0UdzjOXId{xmX zMmr3U7%bk!eu{+y<*l^6O4f8x85S_)i48!i#4m@Y1y&5nrmF!v3v3Kz=#f~LvosqX zDmyrvXHF^E8{=Z8p^^w2vUJwoH8IBMXMxw<>QUtV6r_+)HLZHj?@)l2d38}(sC_QI zRwgFvQPBQ+85yvf7-6kQq?^ zq?8tN#uKkXJ<9X_9sF)X?&K!kG!RhW%b0wf8!EvW+P;83%+Ex;N1s%QdG){7L!Zv^ zpDp}m{O&)~mc?`B~P5yo@33ej0R ztXZVRKwoD>PEI~VQ+Sv_j@B|aQ{56u#-szjhZ@9X6~k%IS<~mQ??+Ryu({@0rv^0> zS3XJMd8d4l*G&c;Tj-D0S8~h3(*OL5MRmA)aC%XA%$ve|4quT#ciw;nk+(E|T{%8#C;*DzW}pDU zCHAVmzvfap{wfTw2}a*k7<*5MxC!Vq4XI58!vV@|QQs_)pP@kWcvlQz)s!hbQ;IHM z{t=F=&IdYZmtpAJXlam<+nFBuq$8pM(Yt|0PS}EF=FZ!WnF5n#!YI02YS7rTvIh(N zPm$k29s&`Igg)(k8s3U1$J4u$^8PQnkS`ecB-V%^uk)(|nqN9H&rdRremFKF zDyX{lXBloQXOE#1hW(t;07J(tjV7+G+o-Be!Bos_GMo+0=&3%TwfXcEuIxE1h-ppm z{q+>f@ef5>Y}J*OpGOYRH|K}&=KeM^DmK%4t!rZZZ+cj-;3QR++?`|a)4_HMJZImy* zM8Fx+i^Z+YX17RcN1N!wvg@OcBABUnLGC0xYzv^=Ze~G!%c^~cFSd5WleqJ*{}!gz zzuBg(6l%KUHCd$evgaY-0Ev0H-E(ff-*qR=4m{I2XuT zsnC2lPXYiCl_YB6)RD6)c;@O&TYb{@Y2o#=A$cHpf~o>c;Yk-vsjbeMaSl~pswfz% znZwOu&wSR}9w(NEW9afKSO{89{#%nBI)LmRy_W{|! zC8B}uzdz_eQ~Dt?tAq*o6|jWK*%obfW|EWP`+uI$FkWP2D<jA{3FE)m1iXYJ+?(XSS3M#f0ZE5D zP{BnM-mA7vK5hh;B$(m(BApUav~=1bAVBk?_qpODIMa|=WW=sL9KMwsjSZ3a-Mlk) z7x_{gGDXrH++Egjd57|=>6Ic@9K6CpJ=o~&olN+xpzYF{670jvd=5fZ&t<(4oj@l!z2!JFoQpV!I5|QT zXme{76;1G6iv-^HcS#c{#~Bds%4tbJujO-&_cZUB*mYw3M)u&Z6bfo0YsF!dg?E?k zrC-Hsiaid6Ieau?^#{le^kMZ8ktKL*J>i@Rfg775rUv*gLWWE= zycH@|G#W+kqI+9nX9YM7Jk$<#K!ti1er^tQb#-XGHHU9=s~SD3r=q>}neN9u8~hh; z{GZ6{B@{L$ACNs@r2_xMih}HaE%1)Gy>8Vi-55n89hb zca^HZ-XO#9848L84~eb5^@p08@zQ`M1~hDgoAI=|&9nvgDz=1V>N9>t*&Gwzi7C#p zN+n5W*AE8w_(m1Z!d77r7Q{0uoh+EOwg|z8JdH_bg5CkLVa&D+;fQ@W7DPjXyDH1- zhfxpxGrz__ymNV5zDVk|n?3R*3i9fs;F1VYWaDIq+C^TBL z*SOWpsolIE#$%bjC*ObQyCjx|0n$&fGaj?4+xQvZ50o6ixo5l@UD10K5~Wz!bM=iB zy+welEnj5)7EXPUGR|T^Z07v^{S)YSFrIulrCwzB9lE#&MPDG0F4YO0iX<3$NAL(!a;=FBb6^C}#xofq1BY{=&W4SCSNC=?35MTW7Z$dk zQx@UtQ#7~BU0%nI@61{1pqN`>w->~2r(+Hu=yYpAr74thO2S~Y5jbDw-m;`b{rVdI z){W1n55W@0xJ#Ay=lUh(b@0K0KfJww>NPXw99|aUPT&p?GMq=sNIB+wFOAX!^kcyM z!6~7X5PxYMaFF%?fCYLK03tX5{BDxA><*q?UG^-_#)Hf2TF01`F#kmD9iJv>%|N?P zRrY7eR`~J|)&Rb_0t3!T0SjGq%;7~d&YUdZwi?UY`&qp{$=$axQL~4=Ytg3rrCt!S z9dih#CznNsqBb2rz& z=4rO_=qZYS*=kJrxdi{?U+q|A=cD_a^_*r}+{Q+6yH77DJUo&p|4Hs_Jq;XAsE(0b zws3*N3>hE~j1A1S;*@+D4A?XgV#%)htNq_(C{VPNLIf%q@&L-ozaV?BZZaul=>yoS zu{>yB=6#5ce81}Fh*M^mnbMr#NE?AX2e8>-C{}65Sq=M-fEfg*?P4`IpO+deS+_%qz^Dy@un%bj}?XZ zdM-2_S1^3$z{uzw6Ob_CFpP0_mT=CxyD&KIv*WPw{tKoljY}@vFy?(+CJnv>TXE{VOTF zOS?|ZWv-mFYOuMyFhb4G7;Acg`vvN>zoc2=c$1fxr0b|yDR#TG^?hN(zsyRi;Pl_( zWmBs0pY>FPkd(CMGx;s~6}}-T?Gj?@;+qC-?Q=p%tp05L$dc@x9rwhJt(B+) z#7SZtc{w1~DB&Oak3<6J7_coX)ksUyo*h*3<0@Y5U;s;#1|oC3i_+N?ntu+qq8<=A5KrXH#EWSKpnA@Z`3y5&%<#*HanjM(5JT3% zM2QE#PKtm*AN}xCoZRGwcBrs^%>HZ_7|2nA%ztVuTscoJNw6z^0E2!SN7=?qd`$+U z2BztR-_ioDd5Kfg-I`8xa(&HcJa^ogZJ#4rJkz{ z-}%>Q(lr&xo8Z=sKYrY`!FccZM;Knk@apoqZy~Z-^-GTY{2=P#ApU@N0N)bNT2gxy z{!F{;P=wSvRq(}L_xt<&!*n6I-y0K&*d{sFDsPwyZ^TUU>ozvK(Q`Zi^5m1K1C4$9 z=gTcGLNwW*U@qNl`@+|9Kv$TQVL5<3t7E=+;~WG^k5v^Tg`6BsF6xS~imXb9CJoCe zgoI@5@eBEw3)_4kYXI%`H$aC|x^Q8=-EO^LVo_-eAP^2J5SrB6z}g8xb?sifqYNf0 zJc9*q6M8WR@V|6d3}Xa?bMFDIW$;(IN=k<;Z(iw*mLuAThP{Sl7vLo+ZE_q zVL+^h#q5_mXjgZJvK_>|;dE)N)qy|xhVgX)VYkf$^VUI~fg(7j&DHad>+`7rJ%;|y zo46lT)bvHLyWJ60#|^avXV|;!?enbXr0N9Mo_>YavzJp8 zUHq!rh9d)Zq0M>3xw9JIOaa|RAsC!~a06$DGZr04FV z5&tJz0Q0e(LLe>TDmog_G&^M!4{>!4Z_7AC<^3=eruA`d{=wJY3NU{$0kRkXlTo8F z6AHxek&SW|dd?^PoflW&y2<$0(AOOniS{&>LGZKb1B1IE_~sa;>ACBI+{b|9LB&!H z3x=x-EM!*yeBjk_Ol42?(n|sGhFd~0nc7dTaPDF=>6m)mDAsPGFesjWLlz9*-5!{U zKIUJtfq0m$fl!PjhF}>z8#{w#ADeg&4{eZs;+f01o_7M?C$M#|G^e6rn@nw@nIHm) z2b?uC6vCEMT3yY^{fmX2Ztv zIYGE)6D^oEj4wZx6i2K_-Rb&s(6v3Wg8P-#{+|wVEH#<|3+C@)#-xGXMM(Up!T69o zs|mWeESSzCZUOrG=gW2-Xy*%r?kQ=x-|Fs?2|l%XK|IBk0BSfr{sAzc1p)lMuF;Zv zJpQ(&p#CZ5uAgKUG04)A5t~2L6<2d_qb`W0;0XX3z@L)eN*tZSgG2-2^?x?iV=dtL z99PQSk>w@-nJCtu5eDWJzj_X2-^{p+wj|b_!-p3F{+FISR(VY26A_>aRhpGiC0Yus zLooTb`>XDJ_Q<)1+D@itfL7@xqqEg_MqTOq)8s5P*!HRWo1#3hdMh4#B8Xc>;VkKY zX&~9;l~sn0`3{)p6fMWpNj(}BotzcTm4(kRj6VAs$!b?Nz&R;Y)^YzalZ2DrfB$NN z*h$f2;|U`w{THOg&w+jR$KZ`r6YOl`Dd*?WibK^hrl$T^Im5s77?dn>F8KeWh>iRK5RliWyu}T38TCyLx=XcO6$TXM-%XksSHlWIv9;%p$z* zg|CDh8r`br8eE{1%hM|j)?}I=`h$6S45pj)aw;jWetZTy9gl_o=Yl?q5taqX@7jNK9tPQ zIM=s>t~8^VbfXc!e+!LfhN>h>k0SgzjZO-k<?Xt`aL?J6COEf&+2!c#ixHyHYG4b1Bey$=j=kG;`-=H!A2 zU7NnNM^){t8mw-&TE%7b%rDK9mE}RhX1=pD0ENLEFjyEx;SEK7tiZyCeCOHoB%W*5 zZ`pxbGcI;#uUL&$07c*J?G6&Ay15=CKeO@ngHq(Hd(i)|FRf&1d z2IKL~LnwPtG&3{voL4K`bhgzndUCb;tr3@tp>$p73u&0+`mf5W%AH?7 zylIF3 z$)C`Ndg_94_6Qlkr2{x|VTYvFiqc9|gAuXb6M$s(_eux)H*f~Qe7xgh=R+^s_6A-| zi@O^fpyv4iy~Pe$Ea5d7>kqIGI6r*6^0AeMyHA;DT61%HRqeh!~5GMnrb-{6ZDw^vP&Z>(FZnATGR|DHe#xNJpB{-6Ot%x@5X?<${N#0)-LGltA7QoX zG6rNMqIJU^JMN;KED@29ol4d#>FX}gc3>9Z2Cnf_LNFqTB`1rYqA{cg%jsnmjw+I3 zHpW)c{0-k)E{K{Dz+qLmp&4(Ag-}BGS<7(ECt8Qen(4&jpmM9KGq5F)dKzDa^rffK@ z70Ip!i)G~=b%Tq(2B>MD8w27gU`O;4VB~Hj{*k%=j2r6^zItqTP+sGN$=6+Oo1iJM za-zbyvc_KfG|9;-l}AE3YqY?&d8^s1h9OtiyYrHf)nv%py7E)_BjHFdelv6S!iwth!mue& z-zKCikG4oZ>6X|G(aqca->fx91#+fAXJQg{95jdTq)Ty_;|0sn&exsA0KGxw(Y;TKcxndwKQ(bz1iW|1H_7}m>;+-bXK&827YJC zg^=}wyAb@WI7y0v4tT~J!`eg;1b5cUs>p_buGW((z+Q3yrCR;%dd2VX6p+tLA9#zU zkDJhMEjsi$V~?HkA82Rz7W$F*Y+Pk)IcvvzCfJK;u{u5;WY8|cX zS!xtPKcMf`+{J7QfYAT9`PgsNfG@6^_ZF#O`Jor zsOZSCKdNhz%U`K!fqCvLpFWVqSQ<%R>H)Zf0nn?3mr4Z_Lat-)TEq&!v*_pmS7?-U zTd5wCl(W6-J7iC%h@VJv+b(u2>}T~il}+r|uvL`Z>Q`P#APf<`^SW<2*_=)7|1ouy zVNrHldk7Jb?v#=el$4fKx{(GE=`QIQBvrbkL8KHUq`SL8LWUT+Ly%@*zOCPT&UydL z-?^@5KhN50-Rlm8h9x1?HvaPJDE4oopJ*SI8SA}9yxeH;_!lBZgTZrjrPiUa(5uX= z%ZsL?$Zq(y95J_J48HigDD*EdW@qQ{_Q1^1BQ1H0WT|Nl4P)4qMkRV{bzfWiLT z?D*iHLU{t<>W_*s)#I^%Nx521JL{BW_EQyn8%^jC#N(js&g#!;R$7~D%UrP18-*32 z?CT`^+i4A?F##lT zjor5UHZn*XzwWG?;CfdZH0{8MT;QObmNPc{aMvp^#lzDbg4Si#)0So|DucU-{$R{_1^gbCrF7L^lN)vQJ{SQM!+n6(sbR3iPrI3}UcO<~61@A^#A)wEUS zd27_dQ0x3ZO(G6$YtDxUIa)T=!|=-~4OkCO^LaBJ)1;j)JuViD_Q zgeY1=BQ)d&#pZ(e=r+J7h@X)#J~inE z;YCJ(RzvYj1qX8f9488J%Bt{`~3$Ee^fiGg%>^gv>r&UUtsXE-gR&vR(fWGT0qg5_eQJRqGz^b&QSXJC~_IBIv1HBYhLjOU+f?3kjFLlSC#DNB@SA0 z$g{T$5v+(pUI>5}xJ#!j6kMBXRTDM=2m~`Vlk|YlILznM)ID#5u%=t)WQ+*w=R?G6 z`e7d~!A;~3{2{srK0PgqqBZ+buJ--cpC<~sqqSrRy#z4#nz%-zrYlT#^YQs{13IQH zEXYkAUKbqY!W(kVWtR^XkG#DyCq74FB9psnD^7iv&w=UbtJAC;__a3;3Z(UVZ32_@ zOsN}SOWzBwpbqOL!0ha{tj`0Y7k7co?ACKub<_H-ou~mnbMXeDYTK$O`#jQ;I9GAE zt;{J2{<3o>17ubwBsp0uKrQjhaVX_{{PhCQ{y5X-#vkhQxGU7Z1Om(j@DikD+>1szxxr&D7u)Tv z9IWIY6O7&LEOBD-3w6P1O?R`Yr*C3eq3i~^VolfuprD*5Q?@+cb8gb3pYB) z-d#}Yp&#X}a+vn?^yn!I zN}IU@=r!4MU%n@ROn2}9)<3{>r#xP)y%8k_At8^(6YMkZ(~_1yG#!;Muk3dEMz_Vj z=XXU@=B4@!!ZxXRuqYe4{dR_R)Sbs2d0oyGaqy(jheP(n#N+9|J#{!x+oEwE7Zb59 zq~4vTEx|H;{BtrXWXo?24-nXq=#atI&T(V;XzNC5daWPCTg~F=_gHQ)QgZb7fvuA& z1aq~D^esD)VxDywYuO#(9p4zSqEnQ|aoS!sv_u^0hGU_Tj30sFqRhMiMY$%Pi8s9j z<@g$Wxk!M`&x6KR`TisS92eEY30&I0D3>sRtt4s$(gVK9K75pCc&WzPn?e(2RRoHH zA0|X2_3@DVlSSIWo9uekA0699P-><{+b5TPNkXOcnRf>Q%|qT?AG`^N&w^5E^+?!8;Cj1%ft*baXu9I%zk5=6(iuVqdK0!8{aoh}vf%kWG|f&40;GT;)Ykv@OrNH7t_Fn&VgtCw~tkq zpZzy|oktRW;yA%?EQ8i+2hgfvC8oPrERSl_#KX)d&`xY zRm2I;BQ*jNh#-k~?c@|T%`RwVg`Bz~B@CV2-bdBCg~pC0F>z)|BG2^lx1Ku~>0veA zV@%(T-4xP131yglIKg^AR(XA=b8gxY6t@3#`yfW6R}#Yss#-HpYQaz3owOGzAm^c8 z9~uJTO9Z1wEjomq#I<@oyOYpVV~yA2-cUhL&-u>o4u(y>hpapbeXdW{x|0(TWTKW8 zmvBFz{Ep29`|^Q8+8NqiqBAa>E83^<O~ zQ0SX!4b$ZXtqYC`2_VWmRA+LQYky}3AHZ**`ei?46IROIDxiut_evLxEV+$;wUwXv zYTQ^=)|V^Mtpi66!`C(g3l zO5%#jW|!Zyt3&$8^bYPv_vddiz0}(G)XHzAHHu*>GQ+t=u@pCq5<+3ImwQ_kjESRE{#R#urpiuku*&D65`-|~ah$LF zV>B2`{H0}5a0AHoYrryOPGFF>DoX8j-w!8VRikGWRt{p)^PfxJ$8&&U@;~yP^tTTB zqx@&nNEod6iPR8jI*f-LOkn#!K-@;-Npin$K7a>3Ftu;v(Hmp|A6LZQbXxovd}7-Gqno_y`+i_(e+8;E%|?nJ#{%{fU~U-P!-(y19KRrOj9v$%U*L zt2ea`KGPk57UmY*3;?q%NNkI7ac3M8f)Py2`@Ehbmg${hgb=)yS<)q7?Gi;7w>AqS zQoo12kvIbX#x^{)_Wgq&GWj~9-2%~)an|Au6ofFW`<0?NYV513D3}nkyQAbxP2?3k z2C?VY{hOKvY%KF{=S_yHzw$kOd}Jb(5x#QPO*5!#sO0vWVrT#H#3>Y!1(YS-N)UMy z1sgc>BuVbruJ>W6tPx-2R~nJXrl$`eeSvUF6nX_DAT-Pa5%i)1VrF)LKSBSJXVqBG z#8q^r4}O+e51X%?*Jk~D;TMUYF^&{_1@O(VuMBLuspln4cexR}&?z-cZ#KkIhVP}R z0jQYcMd`AON2b(4Y(8ltwje*_9q4wFsKY!c`oh8{A*$RqGC+?rfmDBPs74ag+jkjI%=Bbz5_yx zd`;k_p7G2PbG>^$6)Cnds|7lt1 z@1eHEp7F>IPS<&h7_6Hl9e&4yYP~-+UJ(i0_34uM*+RX1o~sT>V=+@2zPs3Q<7f6O z*2Co$_4ftCM?PQ`tCt&FbSywB7$A92L&bNHv2bqHfv`4dAKBQL?1x+h$?|{rzx^@W z67i_#h6Ia4DO1Of)_hy-JBAr=FI`n0ekn>DkEv)B(8^*fvzc7ByzJBB$!QiV+8A6P z!R`KFP2Lz|c7@#BZ~PJ<4Yw?f_%V_db#(q@{}tB1XaWdK2<~*1_7XCFi!NpIr4d%} z(d$%#l!@oWZa_;1_S|?{MQb}l65&je66Qzo6x~0RVVyO`4o=pxv))nR3yct)t_3_J z{PkH;BkGNdY!AUN4h{}Bd3%oQ0dxb_P6H0jeO}|bH%h>uousup_ZpP|60*GX)&5}w zf3t$mj5>^@bYIM+<6m5x>%y zWq?!`M`Mn!{*i8MFRlBF=LJ4;2M0;>vpjm^-yhDg(zj7c&II z%OGw=3(CFl?e-8`+ACRzos&*vfo&YlO!h4#tu(%&;cN0FTV86HXP%?RmR zh_CbJPrquvxqD$KI&?RtRW1#_`&qou_3}HVu>9!2Jl$X=^jGP_naxMFPPOxA>Sku0 z!Z829!zrRCPbvY-1W15mY5>!aX9M1i6S_r()OJ88VVx3b_{3?I)6hK|-wbM1-qK^v z?N1Kjn>c$jr^^J;n!kniJBYLr?$Q)9e19%?yk|Qvo)KzXHMdHlF4vUX*V^O3sxF?c z4;#9e1Guf*9IhC#*_W$WS33J*!-zXqsy{uy^8v$i53N}}YK|wU5Z(&(Q)C%uuc{Lx zYcbmppu4d&y3S-Kove9!cU-ePc3C^Z?0+L38xu-5t}0E<^7C{radCo@jB1uBN|9v7 z!qyX(lXTV?6~zS@2cC--A_cig=e{I9y88d>Fu`7u;)~7cd?b28lPyLTh#{&s>qb}k zlJ7^LObM{&QsBsNfgMGQCwIU6!^qU&q$y)CxuSSu(As2Vs{$6JD*X=k5NpeQev8*yp=>Q4t@RhetgK zqdjJSii*TD4PARgMd8l;z6~|1C3N70uvAy^w@Tfr<}L_Oer&|mPCOWjL>E9!O}F}VzU;3RmM zPwQ;&X9^E`O%K`f#vk#D7QHWT^$MTe@@drY)43?5+cnwTlWv$AJ0axruaBL>)cPOx z?Ost*Gg&sG1?DgG&??ZMC%T!eG}EJeJyBZoMxoB$Bytg5IU%5CP3c6G5^cap^U!X6 zm6O!=KReAks9w7S8-Kw5IqJUm->c1>jbDa%NUaH}_$hH_+K=3JBDa5?gtCD4PAJJ# zf!O4e7eI^h>M?+>%|&RuL*8j=y>1v8TOMCM z42l#!*?$)e7xnjWKW#}=YW4VRrP51L4k$MQ_=6Z4nKy!#IA;tLn)9*>yH0bS5N`cs z$F9gjk4a6eKRfn`Uj67~3xo+T4HF9sq^kOjpG*SPtqdyUQZN1_fHqln!Zk12UaP?s zD~fuOYhzrp*(K=VMdoPdAhuvnRW0Q!_G?R6ZKOaA(`Ydt5d;RqlOLwMhgGKbpQXUN zSrkd^2Gk&|$ulfnmZna0cPW+WJkGTCXQLW=c`SR0(5Mk}iy&ii3gCD!CK7}4i7&sp zGfs&fI>?xwVAe3g(YUiKvucQg@(F)5p!4)p`kQowPS37Le70tJ6!$OtXLg2jx_RgD zD!Bh;Gt;Q&0HhhN(Mu8wk8wdhxzNGv)D{z?)>ZBbvyK=(O6=A;c?(@_xbI&6q8^x1 zEk;AQI~BlJRipCo;Bj9?05kb+nC$jeBm@tF^*k~(raE1{3={U`4U6= zpzM+!@}=~*JpZgvyH`CUCL})RfZ(|zmWGM1@ldS{{0sA*@1GFs7uiz2qDtw;=6kwx zuro((6LrZtRrr74oDUI@a&)wT8Dch0TgsH%F&reXxUK@>Asd_Jj-Qaq{MT?Bt-=vO zQOyZ}RTap5r**(hIUOJgXELO>qh|8d=25Ir66O2y6T654RT8>(E1%UGuht1AIlEc1 zboMng++BF`WC|&V;80M&)8QZ6&{=Ezj_N~UeSIbSk5go(uYDT7jH zBPJU)yC1vJzT!pW+pn2}ZV^5F#Z}Y+g`SC~b)$o|&pz+c@4v z3USeA$<#gmH;Iu=2xUob9vS4N%Bo!Q=6?I(Y$!eLL%bElyNg@dmeB{pcJWyj(yKlX zp?$XC+WGc4iqpCg!vYQApmtSY^^jx2i^HMDM7+j+^zMrSJ}aH!LhTLSCXg&BX*CS} zn9nJpJg*dDv$seHi5hS0`6elTSN-6-s4mgDb`k!mNy7#a_Kyw8KSI9;y0UeBPu}OI zNTwS{2AqdRhJ5VliA(H#P5Zm;EcY?_C){T8AC@Loi!H7>i2Dn2!i{zHSt-qiR>YOR%JSD87gfmnR+dmA=(KPKO z%_?`xy74aY=kknP3b^6}$<;qf6F=?XGs>*d=QBw|5s%&?{p%!f5JWTpnTAW=rloFKYO@+ad%rMjf{C8tpo}#;6Mjmu33Jw$dj z-EWc=gUC0We~aut1gJh-ltA8t;JN34SJNiTI$_dLJt4# zBbm*X6WpKg-A6F3^bjozvMXf}>ms`9qhPf##jlcZf*b$}DzXODtQZUQAO#TcKpOBi zP`TUP4SWG*Z=IF7#dNbikA@?%)84??jnp;&uZJ1|O@r3R%T07rNjr*nZjB)EooIQ~#_Bb6v3@5?l7v3x}%Q zRB)@;qV^xDkr8Q_VCys;R81Ssv?F8EKk3Ps?lfM2QEZH*8L5!P3{PtV+SyMkoJv1o zjsZT8NybB_zCF^eZ;_f4QQ^o{m^p8YRd2ulkU9TVacP!5;2F+`V04U8#5tlfN&F6; zsy9h$;tXz0_;ntJ(`qEaxfYGm#hO1%vUBjV{JoAh2up68prEqY^Do7OXyOb$3aFjh zx!_#$q6&zS7yLwsEINIHz~#9@X*DE zY4!goGFYbzNG^E{yh;fMRPkM;f}B=u^WTu93@BopgY<2-sFNItPUMz-Pkji|kkJ0y zjb}Jy>~XHj0&}ch6FIZ|@lDqgNjO$i@^6$=|4Uv>t*qU+nTAM=gH#QcP8C&F*bv9bDy(ci8ZoaJScdyW&O6L)a*Z@U(o{(ASW|AAqp)1I09?j>!bcZ-S&@C)(1_*MnXaZjCewTJZ>=W>MT3E z9%4U`_y(>ljLUncZY3tNj@(14FD1BXn;CK5-r41i=TfGoUuLEFSE>G&`SgVZ6|&A0j4a^AS(O#NK@iV}!=3Jxr$a@s zROB$Xyi#lBJHIb&_RW0IQPp8t2h#!ddhbTm!gKybVXpQRn@ml5NIFjXQ7Z{1#8qkG zmS^yLS+pHY%3HgkK?%YwTxCYQ#$x#FX0zJ`i{%lQ2APuVFb_)8p zZKq!6PE*15@FQPoI9h}7ldaKX?U?5w3pPx{saLYM9+hAuNRWnB;#xd;Qebi;x;01b zpZDMGQp4A-!8;VM9`~P4p(nIBrL>jgE0j3g?6NujBwMXnsM{$8P`*dar%nwvdgy2` z#qnataGN@c74`zak{s^Cw@VpCc^$>2DK_0&eca6vPgX%T@?or{B&rIHv07W%sYFR`z}gYuA^wS{HX3?p?7^T227b3VxI_a7@aM6)g!m*ibG0=e{@1^kn9@#+Ye+088L z7_*)q)e0VtEQ_=R7OUF?mBhIE3c9+{?7xZq-`Q{j8>9}gaG`^h8wW8u(L(au&rVQk z8+8faq#pFDPP)1Cc32~=k~-iWC;s5|u-Ex6?f$if!Vzf# zIt<$MH*z0WCly}JIV(>RqXx!3Z)`k;^5Y9dpYZqO`SKqA z2~lXYW+}j}?WUg6^i$Dfc!`$Pr|U&KqlnX zDvpv>^u}jHVmXz9hEM((Vc$+4ZA>-TcG}_t)=^6Dg-I8BVEfX+9_-m~YuK-8Qy*Vx z2sh=2>)WnZm`7r1l2CW|7TlicEbMaY&7Uda8eFxW3pV{`+P@qMKFAh~&Kyv}1Fjv4 z{O<-FM%WN#Gs-BPk-hy>uKwuYMx>L}yh_G-Kw%QJE}Bxb*>2(C*1 zu-s&4cV!9Kmn7waM7~hYiWctkTC3u%=o+N&-Fk_X-5^T}zB|CW92ih=Gs6iGoYC3Y z$B1*W)?~ZPH<7|MQv6!bY@$ulSF96!bwK|D^Lcq}-ZOi`dk9E$ruLFXTozhhYpXUb z#Jj~MsYfqde)(E-_?Jd3@U<`uH|mM1Uky{FIu1nxw>1A3CTN&Ym(sbVbDE9@T#5M9 z9@LVTC5$cGdAmFZYMVYiz~aR2*goKx`+uzXW3UzRr{35M2yjSN(+hWlJ{HQU&R?fQ zM5qe}+x^a1yewut++lLsxb=h0=H$7(XDfkIGHFwx(A)oJ$ra|s*#8pxji=ZM`qlN} zM&_yg-7@E0B;e6nb9!5ST>Tmo*BoVNkhZzY4qOHg(hqVP-<{l{3fJv^VA4p&nR=Ks z>;iA2SxFH>g+S+$JK`v#BYWR}duAL!$uyS?dmLoDDX{sOc9E8e-sG*tzc%Vg&mnqg zzsz)zd|wdw#C76nZNdZin!MKWe`N8Or&wXRYNT>_;7jTUN>A8?=eV?~Zuf2#kAu>8p({*Mp4!V6+83x}wEWK#>52sp z!kwoEdi}kTsI79(LIQ&j4Ce;J=XYw=;-Y)Mx@8tO6K(4yU2R$I1IL^{I2%A78ss4I z`;QAQ*9Ts8UtKliZo6e|yc8w9QRCPPo+`R?6VdY3z+F7(jo)+qh{S4Q-l{tk*8bW3 z^}`AelR&pS=$)>6LowO)Virky{nO-hW_AY&lp}072i31{&+K9Mj*oD7zx&7pujN~T zg4az(b3!tXrzY4Hg{3gFe>r~zuR+#&XhK$hm8}AH#qh^m*{C!pK<9}j3fYPFsOERS z@mBub)X_3yi+{zk>ZAc%5aoeO?nBB${x!h>#U2iolY9kHT>p=(w63(ziy8rAU8Wv+ zOEc!vks|qk&mmOs%0&qKy?nio!cd-};-NO0#icp|!8(_O>^f!KH$~Ih0DK!=Kz~Hl z*(}9hy&^B=^%xqdK9ZhWPDt*oFMWv(L}Yi6o&(j?fYwR-?a{tj^lZvz40l@FSM1T6 zlb99#ce_yDZ)p-n2ck@nDyJM1zEQ!4N~n_I-!vD|`eKf&xn`h*qi)UL*PlSAy5T z+k_BJ7m%T-ohW-eEna&7IzbPb7cXD10CprKB6h}!XwCH8j|%BvZ|)Y4x+mcBYM#RD z>cr-56s;%=v*>!b%hzH|!F6m}Lixrkpo&OLxm@bbJSo20+kba|g=ijUD=HKBUyR9S z8OYB-siliL1$wlayUHkKSkWxsqmO0W^UOhax?tz(gk3SVWnvG$9b6JLJUJfWI$HkLEs>D3U` zJmnjE6AT$U8m@L_ZR)I-2zJg|5#gYF7XM%Xx{}?d-J53goH9dITxTsnYNF{2CF(z8 z3J3(3tdJ9__8nNsv(OkYoKv=&$yGXn>Yu3WI2g8WeA{U?7fO}NGXEtO>@s7MxM@&? z&q2qR2%s*Y8qOb$bf_0t+upM^_e|fy%zxY}Qa$Xeg4O zN=g;yoy>nke?ht>dE_(bfy;57Fj5UV;if!(F@AbPxNaJ7sx5?x_XX z@LF>dBJcCwx<_hmc(1+L0%5rrt7qBzJJoWlRvgvAV|9Sp{~6@3VdpFpQZ8A}Hz%!< zE}DJWyo>3JKVbI$^&$Ys19pvpm{7w&wXfzA=B8~21;t0DJZ16tH^X~FvCsUVckTi9 z+nX{3+d_eTt<}>%)(#y;fps+u2m2TP_=j1WBE^CpnCkij=Y{hv@@X%bV+x(Q(3VQq zpvHfoZ}3g6KZm4+DRd(1puy*5MOw3_nz5$_vf74$rzObT}|KodX}Q(e=#=zy#(FuA`*%0j8VRs}=e# z4{O)9NfA)^K$k}}gTLX5xw+MTJg;}crrjH``h%%BD%U&pkTI!x00xUYNxxe**vj8| z2Q{2W+^J|aLai7lH~oRrLgpyn*J;HbCwhzz(&hZmzZ30;ShrS zOSTC%fCtS?BuJa{0SY}ROMU9pa+uKcW&kUK zHnMTFYTsSJU#UfBH9qY9y!f50+>9(1cq^lS#4le8i@KEmZ;=CEGC(-VC_}^EzmrYP z3`Z8`)?7Upl_gJzli1RFCY_>qUoNf;Zo5f1@S6329Ct1uDf~1a3|N#XpCD$I{j0k? zdCk-%84pz{%a@T0SZJsCaFDDLrRGb}TAy+}EyRN+e77Qfsg zTiGIGvY&O{R?25^RHcu*eseA30-kJwY)(~~(5^|B4{HqdKRi`$BCoJvD{#OktO1=0 zXpjH?fbzQ(j?+Q)I@x1tG9y>&3w0AM<;aqf%Gt2|47izp@7{#uVq!v~c#5Y>pWR9* zG`!N^bX3a_atVZimSG?QLhvxSy`l*o%zfK^y<5m$`oULWg+Rv~ug~{k zyLN?}N#`Rvq`Q@M`&P&>m&o+K;?J8-hv)TSJeCRsjEKZis z_*1vpQ6y#C$0!`m>kNbVAIbRy3>?aN-3Hd&tQS2Z@)<57rzEAS8>kZsdlUUZhw>2P zY$L#F$BB9VWZ9GMcvjba|NrqxdP)?@+xJ{k0qFZ=(w8OO?sNf%`DP-0hud|O?T0R} zzLh?=-cvi(Hu$dGa)0SoW9O75z^U!#II(|X`sH5ZtNnf$$O!lO^L2JQxnzB3^LhlR z_;?=h*EGM2Ti^5Do`Xy5RN45xY9=cSn(bZo9`eF4oBlhXC15PCnbLY@RuuIf>Oq75 z@z%|da_f28ACx9F}W5AZSK$iyFC>`m6X7MLL<^~c*|+p*E~p7ZjW8g zvUC0DyTjJHa6|z0_~-1P_hQk+a^JhKFpQEehaq#!2$Fe)+qCv^TP;ltYgfRVssIr(Rh4sk@+&%&09_f-Ph?}(3&tOAhl{fy)qVwO^C1ZXkB5^lR?R)HD^ zl-sZ1-ew-v+?Q@ca<4gXtu&^=p(wh=fR3Rnf+h+}`trS`@7oQbl!|DrGK+*3Tk_nc zKdMk_0~{}vx~=hTpRdWaxWSz3Umi5};0k*ew$F-Didd5-P!}a>#7`l?v-)x$1Ui%s zE6g#jmdZ}J`!%?<0+jap*4W|(mT!afKi4i1I zGF}0Of&*(7#|>d|KN)4_f)L{Vs^q;s>KG=PI;@3}(S(GLq9J22kr`)OUA}=7o?`F- z@_PqHaa70MC=CVBi+}C$&RbuP)z*z=h83=`7-5pwzHj_fZG+7kfOdf8y)-}lRviy0A>jiwQXhhPzh z5g?0s9>g_DX1_LkYyW$Z@d1P;S;ZvKXz24T)WYB4F%~4g_Pbdx?8C-=G;a-k+rr%Q z)hnubM1^{ffnAKi^r+wq^2yot)SXnHFDs1|Zo)f951gj0l6X`Io0pBn+baWcz% z+QrY1pUYd1=);3!2d!K`v1H3oUqryb{rfNrGDb*ti??#QpJ(HvdT!|GkhHwT*|C^@ z-45Ci%%r}8$$=oqr%jO6Xjg;5;~=Us-&-}95$U9DnL+y9N|t=RFgM<@=g?9o`v^U7 z`A=fK9#dxmFori&Y}8%`Bxx^=>L0vjirN6 zD|DwMffk~(cDamD?dO?cV*6eB9=SVm_5HQLnIY^AGk!wft_lLdVR6d3W4#*tjhO08 z1{GWc*h-Lc?iV$@6)Zfq=Ok1!6G#Up%KisRdHc3WhB=YNF6vKbf$1q=KABhFQ8Qch zIzCP)FB`rCq-os`W;Ux5qK#MNBi45BO*Gpx=(du(MtD_g47l?RnA#3eY`>n8qCBWM z&pgrwR`Ye+)E63ce6d$pEuPd5=ph;FKJNd4KiOWdSr3*!*{I6CNjY-b7)oW8O>hfm z;vfR)iz>4@#U##}pF(?D08WWrHA01sl?k|^#So93i! z@0K-&l$_N(>cR5tQ$$O;>(iKBn3y5fH%@hyK_;~u0GoijpBVB5d0SPye%bOZQm>Sz zf8KR+A%M}<=GwBKW%OX<)}!N6zQS;?=jL$>ZM9MB(x&zCnfRr6+%=k40Ork>G8Jz1)1*0V$~NFNp`LZ-|4B4G*pcS zuSPQVUyym=SXB{hj@7LOSZ5cW6tr~xOPLNqg_w1$Zgyozl{h%0I&Nxx z@YZJ1vWa{I!wj0Y$9)^8?V`QDQK&ca-a3~kFjUH%t3R`(uXG)L0yzCroCc=^L?1(YS%?wKczhVP4DhU(F(=F>ltpZd-`s3u9(i_ zFF3>q%%_s%;o@Ry{i-3sUY_XgxdE4a56Wd0+X`VexrsOkV?VmYWW)B%6GK6bkD_s` zgf!FA0?BySqLjeh3YbAan2NhkNxeI=U!M?WYdsz$8z`r`o0NUU>QDV465{;YoIu$Y z0gZ7Q9jGxh5yymF{+qB~q>_cluMZTtpFGa1Bi8Im)UVvA{QVKU_#p$fhvYOC&ma^zl>rXCPO@#z z+8_Vio4nf@lYf!%(exYUNoW<3tOQFR(aG|((oi!WsqLdv9)Sz zYuhELI_L**n`S=~X?dufYdPs?@R`?I`(_(qw0|KfY+JoNj5_Kx;jyuHTJcq@@b=Gi zs{;AtShM1Tby%vq5S*?;_RHJ?IFZJ(ty{MT>!omIASofoP% zJG;9Z+qx6iq5xEpK>3ucYw?njDF_}k^}!;e%$1{q7E-}`tF<{ASCH@E+2Th4At|^D zH7fhS(k#bJFF0@45T+lO#gJXTis}1SOlur?qcy8bd2+Bnm@eFZVo{_A`?-ID75u}a zhzf6IL&UT8E5e7cl*?6!22?5`nrMK8UIpF|vH8mK<>+e>Q>9A^)6@s8DUO-H96;fN zFawV<*YU*Kmj%(U<8~Vw8oFa=Ya8tXrL#tHa20=3VQx~n{4Fs+tBqlnb-F$)a?u#b zUA0ps(#s)X*G?YdFLLxv@{0U1kXq^JQ69CeF-Jo_S!w7$dQOG>aNS@($Kn;?XKxDs zY(2MT8sbT|ta320RG4JDw#_?H>jiS%Yy3;r^($bDFD*SUbT1z;L*(Bsrj94?VuOZc z-pJBFn9@eYGKpmc1j*vIQRV691t!-c(VN1rkJimeqDBO=sc0`JP;M{|ISv!srx@QH z`8_RfX=^;iNxW|88>fOf6pNxm2=5N0LOvnf6CmX;{EZiO9>U9;O7K2k>1p-42eM+F z)Ba*`6jv@&Iu>irSgVQfC|P~_Z1GaE(M)}@jLGEgv9j#Usr9Oz2Hj1`{+wcGJ;wM| zv^Y>z=7Z4ELpiP;fyXi1b`c!=}utsWuo2I&u?Yo2pb-CL(VE7=L9<=2VqxiY>TcQV#2ZB#B&$xq-O#5C;c7v4V# zaarxj_n4`=B-BgPuQ&tY3Gre;al49^{$4>8E5)G5Ygf{UzxUP0pFw zIzz}hNz$CgDK0Mg)bwPNY`v-@?tnqL$h#exQGM?7|s z;Hf%8Z4JpXDO3+<1od4DPS(;O>a_h|ItF{skX7xOPe>yAS2z2n4B|_qJ9_p)(bsc? zSLc8zs_^S>{sYmX->yN&c>(pYa!*N6$GxBl==+y~)1$lT6pxDZLpHg(E_|yfuCzcO z^#60cxujzMoXRu9(5WsQ>_Wcxvph539KxAUDqCettrSBJ4=gB37B_aC?sGze90 z=pB2!c>x#O=M3G#In&vBv424M5}vP}nHtzS;w(`Y^XuRV!Q#`U16618y2?t=9H^A3 ztSLPEzLk*(lh`|ZKgnAbCX=rSgT))J%1CuO;>m!v8N_Xxz&Vx0mq(SJXxCZ=zCX@B z-t#1_5VuryK6y*|hbrHK4wz>em*7cROUfrrojnyg za-l&hxkIDFRcPS-5U6s?!6FQ0H2y;KfXM*M*?0YOAF_r4OLj?!-C9t z5P*v9A<4|X0hbA2ofii?}kGnG|lg*8**x$p0$ilk_BiL zD66oKuaLZVWlCWf`Lp5b1B1wqR*Hc0-eG@4Rtl@=izhB(W8e%~ZH%A0kOu)3Kl7c& z*!Pf6A`$avOj#11g1KGZxbAh|`yHMc8OFk)=){czYX$EhOmz~sYsEZEKBG48v0~YIbt1vF3s5yXb+@KK5mUFJ}9Na?H@fG!E^ir>Bji>gAV_ zm^MiAQSmK2(@tc3!abiIc+^SgWkjS%*?Uf@)M9@zX=((ugPY8OJH{_fqvRYX3Zfdm zId-6wN&+I0O!KwT(q@#EMU9G#?U)Af#zxt5qmG{Wh0|=Hxa(+#J5}uEBJ+)NI1%7{ z3RE-WVW!p{AxGob`|pKip84sqJ6=O4V8B1oyk|`Mv!KUFq=(YHAvJ&Z-m@x0;hks9 zwfk=t)mY9{78A<7k{-?{e>W@N+44>4wbn_UG_&F|U6OBRFvrwd^Mwu;(E5-g7D zU)<<^e|Jdl9H;%cL!zbLC%-*pDo40_^(~6kZNtxcGuhK>28Uha&juwh1o(s9;c6A^ z80~KIWipW!?YR9=SNgzTj^GfXg8`(4DdT-O%HWnQS<=B&3E0=^7eF7>0Qd`uO?&UiYPccwNTcXXU-tx|d>@ z9uM=;R1LaQ=#jQBW2@q|sswDTjvdeGH{KZnCHE03bDT=TJ%=bFN9xrBT|Y67JXpfF zwP%lJuu&P9+d@>PN+^|kTl_9#awT;;>rNEyuzu8NL%M7#<~G9E$nv`;N~QUFdr#J{ z*(>219{)!2Lh|Drd#8Yjd!nyHEIEG?uF>5Tt68-{9AJj3YSy2FGmOJRcp3tN zg0y;~!sX0ga37&NlN$`%>M2nTZQuVjTAK_bIyH1>dI=s*rUx(v=sfz2X0b_q!m!n(Ka%4yXf zH9w*+(UrJu91SGLmz&1K<2uU%Jj-#tpUYMCQs0(>tziMk@SDklr|ewqkX1Vm&5_U+rj8KR(+9gBKoXolKsm648!0!Of4Vo| zT>Q$QQQ&PRGnl*PMC!*Vial=?!(ZFuxBzjbFK_bF*Dd@Krh2{%)+a>Rdp*2I!Rt{OHfjs>zLc!V0&&AED`t`N z4`Kgrr+O5CKbfv=%mYF+9=4H35kqu*(`v!;@43|fo(`?$d z(a1bAI42-X7vJ7&ngHY}?#5gTJo9oV{?erl_2Is`7cHv^>kav`>c_J=!*>sB ztS7S9@#s^;M6SCdlmNJg-y4!O=OWk{7KnM3-*m4O=Kl0sjT1KomVd;9O>|Pxi_Cd%bxc)Tgspc`K^k#BE-@!hVeW6G z(;a;w9QElUZe2*;&5|wiRS75T3%?`hN+I-||M5NCJYUUro6mBBmJ;ee?nuxYqp?r9X1;^7TbK84*FdJ7|?BQ=S;ga6d=)x>DM^ zNB9~0p9e`w*)4qg{r;M3)w3#IMzyJ7cagxEtk%SD!fPTAlC3qVhmx@qD5qC=rpHl_ z5Enl`i^x82%+NQ{TYwd zubC_Ka(#^HDzt4 z^E{Q%KNgPsP2)=t?$?M8z_hLUd%@B2aO@P$^Grojv2YhD@_oKiC!7ng!s;Rd% zT=uUSmo|iKCQ3O&_OdM5_Z3zpPd`3y#b1pe2k!`y1ET1j2@+S;6sxC;Xpu$>|`w$0`MDX@B! z5EZ?c_RDIv<>j6D7fuIhxLy_y{IKq8o94cT$+?=J6g1&XM`0dK4~>I^?V8Or<|h^7 z=W%%RBvSc7f!`dcl4hc3Ew?t@N7`fSbU+dwkUxVQA|8{f;OmjaXi9m8e)Y|*&!VWY z$f_bK1mD1tR|W5}AIRPZeBxtfoKcvgGd*iAL_#$7&X|BZm0TGqg09wLBPSa9KJn5) z;*nyYfz&X3PQ6ZZ#ZCd@)?5N1_1vz==#mVdq^F#TcjZO z)5!N#;hCZl?JD-eaXd5A4J%t);b(^I<{%e6Yj*-``k&Cjo)i!~?5@U@9gS^hg;=Iu ztocywhqzzgJSVgg!!GSXn>2#^4z|dilzylz0J|lr3hTPjbD1+T_g*r}P-ifuzaxNo zzArmwL*ydx1RCErv_)#});|rfIl$PI_m59Z5G6bo1-r)DGSW)FH9k~Z=x*-K_4b(M zYmio8p#-BWzOOpJ%SED!1d~0|bEv+EzI@z0`JzYklRxT-2aIocqLgv)3+8A|+=uUI&#V_7Pp+Gy|U-zEQ>Fyf0MBO zM2~xEZf~>?b$1+s_+{IN=3V)9bN0rzb-Ee4dWCgP%VF<VccH=Wt0^Fim%+QgD-Y5&B|>Z-j%VRj77-JYVELYQ(3l zHXoSv>r3c8BAB4-RC?qUqA^cDJyU}5#rt2d{v8|QFENp%*VFTZ#;|klaFzFwV*<&S z(6<>hYb+*A4*{M=dLh@XG2FbC-XpfRH_URbV6_-*Eb)|}T7q@u3#*f(^*1F-UM9lK z7q@g&6!n<*y$KJWw195p$=g)p?-BAK*`Df9=yr0$Sq*bZ<7)C}(fgkkVuKWO{p($h zyk4ZEseC>e;YNQsFU`ujq_3Gti|x$Yel-MUrN=FJ4SWwb)jFzVdkVl3HUr>dtxUk^ zDRm=A*}-PxlW8yiE-$#0(m%CqB*sgrbyw!R{0rtjNSer9%gf&`DO_>5TRZ6A4iAUu z=Rq?$3~{+t%OnNY0x4E`A^2@)uhZaW1z<=6Qz#F^LBm`}PlJ84-uc zhFIb@HmC-Hg`ScZz6)h^q|eg4=3V5_csRWv-^S3R zlQUN5{rA(o%ullCI#d_Z=pSxyMIAqO`xm~Diq{dzKXjyIPT`$55AzMqnKTOHbihR2 z>*V7#xI`$V+p$5a;wzgefTH2Td zTk($zS;|Uf6(!p&(en&IAjk*<4ndwK=YIIoZPwia&F@(WaPvx~1)sHB~ zeuKQKNv0Uz;Dq|bbN3+xIyY$CJQaNXh?5A`8&te!*(G3aY%6ybLHG3^ zrb+bONwSJ1KAY0y+uNrKZm^^w&e^+B>GlwgV{9y5a1bI-UIiC_6U)eRMnQ~r@4x<> zDKg;8W#&s)>JtC0l%eUTt+9OLQswS+-`@g`s(jyIX}C&gWTo4OE9wz38=G}H{v___ z%Vl4e`us22UQSc8@X9hhzr~T%z+)aU`5fa?xYeYWdCBMc{B@14%rnRbkZV60=$}Ti zoE!Xrruy*ZH!5TgO-=tFS$@>x`v6bJ^fM)^h~`@gcavE7ua)KaqztRd{RklnyCL&P z@-XyMdW^D#J2(1Jvh|HpHY*5ffQhCLII$GdS8Zm-vhKwS4<>N;fz}O0tGy)~dVP4n zxY-cCfQpaetOhs2QGGZN6z01R)?BDmkjH5{bbX2}4do*fze%lkoEJn2sQY@5ZUj(C3tum5y( zf)c*B11PTuMrvUJX1~`Z<2_#mnSb8H#p)oKilB+PMTJ2He_Qm~12QkO#7ml!^CRZN z*s-Tqf1OX9ew&5b8LVc{c^uZJ>XP2X6eo23G~p_Ke##hU@`cC} zjE*5x`c-Xhm+zSB<3m zrQZF+%l2Q(@*&9Tw-Bd0F8@f<_x@_FDmWU@roV#OlBCHyp6fl?!hjG%d^fIwoL3hH zQ8O;FDI>5J4njO?G%RBiyDJVNBg$k_{&yq{Kg%^s_-Sw(nOoOCyf1o6k$o^Y^T^~# zwQ=+L*8?dk;~@n#f_W?cV6x|eA9#!|&v9N>vxR`wf{`6XJ)60fJ+J`t!Sy}Z_1-(F0z zo&lba|F5wrqb0J5Y`R^BHisqhRV$d`uS@4cN5)N&xP>QAh;Oszh*Zy+zuJ}h3i2sj z<;>v66abkZL3f&|L$6n=Jd+O-_J3?WP!mslCfv#+G&t_+)9>7RCU ze&D$_Nwx7F+&r!i8PbEtUQ0HQizXkfZo8E3^?LPc@0K?24VJjQZPcUeBZWq){(g0M zvjx$u!X&=7=5z8`U`I$sh_Y(7#d5~ zH&pPtlONpxvLuIpv8a}Q7~VkM_C2cV7T5XHsO}XC468{0biF-$LCcT%<@fCq*2OL8 z?KfZ}&HVQwjSl11g6a!yL_{V`T6V=lj%ADc;u!(dz3GP`-UmZ!J;(N5rj4LZSMg9zz2VV z^(RCO&hI6z^FSB`usZhl_ua={F7Oc?5$ObHkZgtm{=o2ah>^W^nRl@Pr^ls@cX4Z% z%G2WWQNM+Pg+{%0Gy!_;mKQAMa6^)0lAIK{NZFa5aS~;=*TedJ_Ur`n>@=_~NnbbG zw_Y&)cl^9T_JU9Fsf|M`-Tm}}3#2&$HFPq!V6(4gaSvel?=a~CFJn1c^)A>Lw$Km! zpk>T%T%2<=WVI*wmz1}FLH2dO3g1>qRHHE6enmZCWHtOQB2p4{^gIvsw0lPFKBmgM z6n9Bvh%dcUPo(?M@aWW-LciHCFpxTJW|_v5b~`k&o(t7JgZ8xyyg^XmZDe_4%EPs~dY#5_+>B1va8 zHaH@t;S+W~*&1&=dl4`0?Tym=dc zvY-3=K@=Q8;7z-r29nYU`!6rdJUev0gS)cR`zd;|PTq&DeFW`5i5cGWQ#;$^ZG{Cy ztxmn8;WxZu5Rdw0fG^_a^Y~Y=JlNVkIo*plm0Y^|H5J5uJKk2p`29;R6+{ zwW3D-R%h(4t;y?n7c`Hs#P6?HM{hwLZhVT9T@B}+s??>ke5gS&{$wse&fOh3>N4;x zERQj*ny|G+PAG{BZIGCCiPOK(&Y85ID6>2Ih(6H}dAt4k%7>W`Z4mIk001MrSpKd_ z@1LnC_MxyNdudus!yDHaL$#K_2@cOpPg9iYH9B?rBIod81T;#uj029}$$!8yGBH^q zA|ZMR*={);G~4ER4u}IUK}fzw#JlBwqe~H5yLiDnwC)IVjP`v(d_F2#DEQR(gMnzd zso%5@mOsf?sv$8qqSHpam2BrTp0t9a?u@MmSSx7at$KSJTB5MgRBkG%(3Y!Vmij*O%Zn>N@!JBEQt)PvPA zNP@Iq=5}i>e2#_{;1&E_a@^V+wHegGT3PTR+Tm2~N4glN;loUk`i!*X4$tP#FJz<@ z37gp$Znp+Ck@yarcN4KgeVP>VdNQt+qcIyYcmNJ4VdTc0i8rlP+bS({ye1gXYcbT` zG@ez|q=C*y7X4`Tc68j&WD>4inrzc5INf2nmWnlx z5302+DIlCemlpi)_}rt_PhqwQxxG!RP>-;o$FpnjZM~FiNAdbzFzBPwgcp}3#7U+- zc$n#Yj-pJ;>ci`t!!Fx(X7p6Tgw=CQ8x&C|iU>IS@eH%IVR|Mw*H?K|u)H}|No&)i zNvuKF^$uKL`R^nW0;0UltFeV#AFpTQktA7RU{nnj=vEaqQr;z2drH71a)`s#D`%q( z?VA@+=F^lVO#q}D($IdNXuGTSRsrpR*fXdb8tCdz51ch5xlMzO7L1b( z+q3`q(x5wcc1TOK78Mc>@Kt4sqO>zPD(k*2C{v7dDkcncU zZw$59E=CE+k=Y>-Lfbm%XZvF)Lz(hJ&BN;f4i615(C?$m!C_hAzPp5cC%UTnStZv9eROHrWmSENCuKK_ zIF&hkrj9HWE(LWk75HN)Oj5$47#8s7)yB-P12kb?c9{~5eL>lFE1&FvM4ka*;~1Yh z%@4YLv(xmls>|MO*F1$iqCjI9^BU4o@m{MGlWg56vyHL{hsvB}23#Ymbr{9jP>+}y z4TD=6a{X+(YYRPOvEw+Xv7t@$i|}jl8_Y)PZr+K8Be~%vp}6{Wa~~dJtYBO}D>+NY zMdm6V{r?`vcQ>abmpH9tv<8Fy;_WLnL1s!g>bG!=&8kA#fzP&U|KQ*tcA}^Qm(&<4 zU}A0}Z}v){EEKxxdHL@|euv}p4Jwt?JRT0tD-}5YWG;r@V|uwZuekb^9&4#f4srC$ z;9DLQJ0T~Dw+JJli@Up+f@fXxWC#NrVcVSy19mUW#4yLbKK`K>pjcgLC@;wSkRJUb z2%urrAXJyyJEEnfCA4c3@@Fz}bFYjt^k*Ufmbe3Muy1>uiRY}3lp5_0G%mUcPexun znInV&*^ZY~vrF2#TZ$0TSU`6Lkxn36iM^WU4VndO-5*MiC^MTDY*9eFWOM6ykqNqvzvBlu;9K5ccoy&f3z$&#Ax-6dH%+%3SUhETNG5@yPIC;9nrw{ zHL4e@n{fvR2iw?@r-o;azE+(=8dt8o3WP7;eDgzXo?j5zjS8+hkkUrRL9z?HFALGX zEBzJ%2TWbLqE8p&TF=|2pPd5L^c9EW*e7%G$5Y`hv+ZyT{%K3>6Kcjx@TPv3;-EwQ zdsw&tqV8Qp^}6H3vKDs7?MINs5U->cZc$|sbfe%Wa`4LxY`P#&fczJJQh`g8Q(M^?fQzPBsU|S`yqo#d9*Bz= z*_7(}_HFliO)Dm0&3kYSLWBc=^v;BUADzox!V^CdyLFaUzvtV&iv7{N9wF$H^8tI> zubRh~#DYi*?~h@4YZtvxsQXWKNdL*4l3-g-0=-x^GUG!^%0*kGfO5`ad*q!H75(k^ zCvg|T(L^_H{GT5ExDOCXZ=2s}k*3;6`PCj87g_a}gb+MNYFbQ0z@*`5$jyJJEM*)bt zssSx_=5FZ)CRiQOOT;hybH9wP#*ogd+77mD> zM2B8(PPGS30n@>(#!v`a*=n0}Is@FeJXEk6lEE#uUcGMARk3N37R7QA#yZLl{&|~6P%r|tUw;ozG%#FYYA@|rN5>M`%E<(5Op>r0Pk*gC z;N6kv(!sqr>N1k&rcBgvAFeehbEUIKMqD^`j)vrgdc-XBVqkpwiuP_TXIeT@gn+@r zDdh{$gcA4oX>KmrWgX?Becm4qNmfAlY5MyK`gOfG&oNv#iQ2R`t*kyu=duSb$a7X` zx5)~zMW3o&wsI;nW0K4FoZ6Y6BUNmwZSnPv>X{MeKMP3yn4nkqKrxO1RUr^nnB{)W z`G?d9E3*gw@QVL88A<5R;?Bz>4?KOH4|X-s`=D~Z)&TYypf$6d6oJET+!Ge8sYq%JQ{655+Q8k9~lQ%BpLXhY{y z^B_-TWi?YD$uztmX0-k$wlA$8OLlk9WVE^5ULg9 z-$097j^*i~wTI`WnT9X#z&CP8HXG)PeEkaN9c-YuXO~`!-`{!vJku>5a=XbKMtD5; z)GLkXVh5pPULh^g`~H7|_gNMQf#ZI>{izI_q~6K_3+e?k@Px^VY*i*{AXw2lz2tSY z>?Oj!8%?wY%et?!SNO|L3}{3kJ5VhCz{&WYM&79($9XNzDTCTF;@8jKAEI|$Lk_DfLc`@iryUGGavozy_)eb&nIz#B>)C+-v+OjCWDI6ScOFuQwAll9# z6h3d9K=ya-fy5V+CAU@!hXTU>_bNQ1?i>fg`q7LBsU10r=Ip1+ErXpUlF%wmInH;O zHxPzmcai5Pm~#=*k#-$()N+@kkKb|fVAdg7XwSDyMW>yG7an)mi_xAh(rhZkNAx!+ zHpkqpQ=K|E>F}J*^c5Q~hfU)GUuW)F$*eAU%dtGZapWD7_)H^dQ>RU7I|^)W;veq8 z`=f7Dzq+$@a@fEG-iSavuJRgf4uiOybg_qF=7t?5p82MqDeWj38937q@(pqTKX7?n zxG0AF#9ZTkSBf^v&FJut{%&X8mV!Gh+D{`4d{`a3f^~84FgmAL70$f! z!2Tjwsi9FU6-BlB?@X3d{ffwqd|Np$Exo;~M5Hel-6|qdFq4qcEgi4=;V6$I;Xx9N z12YH1pb2e@i)*T!R^^&uE!BZ0%eVZXpH+U3-7qY4-bb12MzrY`9Xr~NJm)z_fMyuf zoxpE4jOv}<@`V!uqN0}xM8u5vRNn;EO5^jZtH~ICMnpxmwU2}A%^*})K8=DL$lfbh zvO1~MITc30U;G@dD>47LUtpRs+}Nyua;iK%^FeGIc(pgv#t(L`1}GshRv4uH>jER; z=zl3|O*XLT`7Fn^J0Bk~Ff2LUgy}9+@`>x}ruw$2TkQ>*37=uOpz;G?U+kvw5NzNh za`y0jU#h7qod(Y9P?(KaJ<>Jqi=(;*Q_xh?*?iV{{@{A@^>MP1pu}VisAY|ST5!v6 zV6}T8P}+XDR)nXx*}KvF@E`-LdjRQDp2YKC67kyfy1&TrTswB;0I{_IZ4X&<%(c>L zF7~gZ68Te5;zQU!C))rRVNg#)1RLnfhe*axhei+Ehfx_@%|AOr>RmrP7GK{K^Fndc zj=H-jIdIpt46Z{H+UgH#W>|#9{{0m-VB=l;ud|N53T>$#*H42|4n|C={1bwcuh+-1 zPBqHa-{B6H={@G4ojxJoV>=NobvdLOdUy2#^&HTy?eqbLK1zoh>nTN#oE>#pvLe-2%f!mGtIchO3I-^E2y?ly>F5W7m)ya# zFZ930`*?LQ#qu&Tnux7dBnG&6r0$mCm+}O_%nL;8rVvT_IpAou%aHA6OOtTRQV#j_ZbPqVwB7cT`pf zCU*p~8yyvwgf+IO5+LrI=xGz@2EHw*6-t26gI5QriP9&${D<$=fIUbk>mG}l{(FKG z+)B3}S-2WZY~1~{1KH9sS|2@p!-)g5L$%M!Tbw?Y9~rSC)%4d(%80@yoLWt+DS#Eph>(zF^1<0EG%b zgNM1>V9Oa>)Tp&UYh>0cBWIUT6(lYqY!dlTD%I}+U8APt3SR#6ds%iZ;xlckdle&s zB{ePM2Moc|P zMWq^8;>Rl&5`yU{xt26Hn<+IAO!aF37EhAEO!t(=fa|GH*$dC5uHjI%HdNT))Cg0Q zhF18oy3ItnezWrC_PYnUy~zcw(6PRO)6-L2u!BXGlkfJszW7ns_B*T(fe_8xg<|@o zDWW-0WJ(U%v^&-xaaLAZ*FHWQhiqTKto7)uiH(AigL%c50oATxtW#f*PI%=~jp9?U z!01n#z4H@i+TFkMnnwVLVyX+=Ijfat3=5Ib6WgBW7boYJ6s>ikCr_S?o)BHm^ve#E z?b&a!Tw!}x=X*9_w6~0`kEqs~rQWD+&{==2!YPwjEv!cf=}14_-K($RZ`GQ)G_c$~ z-!PcYG0WIG>#H-ZNH^e&0Z7umtvkiK0E7P7+p?xP1b-ACtToQGWW;re@;9G9LuUl zEYyYoj`EAA&XHQGC69YX%q=V|6oWLu`Hb!+DZi=&RN;V2W)0GZ&}dyO&=?~W`N@Ep zAg&z|T;9(mN9c}+l`%)deNl9Tx=n>zkUn{02sad04 z1>~ih5o9Hx%}tNu2nqhr2!ao1)aLThm?B&k3z=@y9jDW4>ej|d0yhza&{Q>7IDEB{ zqxF@sT5Gm}m+QwR0B^p4`{Wa#f?)O z3~q02>D;LwfW(Ek{;o3$zVliau%txQcf{+bh6v8d+ihHhw+w*#17HQKqw?s@$9XZS znI>frR&}@3Ra*u3QhZ~}L!je%1(p3i)Bn?J1eSP7#EsiDAY+qw+Sx}Pe88{lf=-t> zDF}t)=i1mcsIMNG{7CwsiN>W2S>?n*0C8`oAGg+dPp#1Z`K9NQY4>@>PIGAJK}B?Q z^uTy@eBi2G|Be3bDMZ`3KO2{XvdCY5tGGx;Tn!cPVnX4EHOH}N`)7|{2N7-P$ za7(^bA-r#7R1)3ZMDMHKZqu8=SG8Jb2-X@a|Of6|&z_&a3%>3&P^z4@9r`IS?&|;Fb!5}O}U;oSu5!%Dl z`Oj-<-vn$8<9U5N-eLWm*_zyAp*S9IL`5ZO>)FLjRcLdr;b)|Id+$T0clYF7HZBWI zr}`&qt+3-50IhUcxy2`5UMS}P<01I*X}MT_`vTTD4XK1-M(gRSfd%$PujKm4&gQ+u zW)>KFeumPjdxlFk^=;M{R+<}dU(**xeb?B@DA#ZYhggiS#}zQY!uj{fvB>XGpR|ah z9rSLO#b+CL0;Gz51tI{J_~`=>-Mb3KrU`)q8;AB^5EJxZ{6p*`97`I9{gy-~VUd5% zD)$wzj~TriSi)pk;C!r_mRe~7kxR=U-0_-vTArjMY4HZ16~>-`r4FhS<-j2kB*Vz!$&vLkan%2Ww{d)gw?dC3SK?ZJI>v~I!_&Q==@=nt3St-E8SVL8;d+5}f4uOV2jy=0)gM!kqw65loao68S#KsxFW?PYef zd3MpbeP#6zT4(G`+)cew{CcYK(S`2 zIA1_FSKeKsxERMI%?qzpcr%$@2N3;F3c@pntq@00bvh3D>CXsL1H*beo479?}t}k_=8~XEQ^*#d7+PXq0`#x0|lu=9~=O5 z5diR#)$?}YvJ~-1XJ=%FVRgQ#u{#n>OJpq&(}Q|a6cC__39$TtEdWi$>$wH$_f24n z8~A;CC@4=4UJtLYjPU<*aBFs;#sj^#9pD$Plr}n7LR+^mQ2{3Z&%Sk6POraufHSkR z%HAg?A4h8B3Skh8>dI`{=Lol>IATfANJqF1GW|01tImt^kq!zrq!lQ5GL50%@T*H4 zR~!k0TBsDJ$Cp<*mfO3jWLj!xt=>50)8f7UCA}#LMv@>SA}ABBP)sEKU!@}9r)NGU z`o`0jGBPrQ)meRUd{C;6B&~N%{FM8Q6;fe+E8$_TmP$%W<=|}Q%-3MVyU0{raP8OC zUBFv(y>sy6Ec-eZY&`LpdGcjU;Y&Agz+iI%ZXzx2wSF^QaPo_6|H z9=tkZEq(Lzp-_{BUqu%)#zEC-k|5@%^5ba3m#=min4*=eOZV+ zcQb<3Hnmwqwp71)Li*uvhmB8cA{h>6_Xe>1*KL}idA>U2?Ci&0DvM3Eo2yx#X0wdh z?4Rf17xRhFH^A}&_zC@igT8obrf8Nd#dD=Wnp{?2X1fM4e_-zhKHw`NA_A?xvCZ@Y z`y)=vyAh$T|1QW3{C-v|T<3MNg^Qf`-g}GMZFcDFOJt{<1z}l2K_Q{&s_dfgF*zFc zt>g9a&zH_Xru@GVRWBAGMK|8mGMO_e(%bE`N>k(c68qms;6*-lFrS|^%VVJrM{`r z=n}nK;H}f7B;+PC!UarTZVS*A3VYcsHqB+NB9GmMCsQJKp8EN>ZQ&=#W-R&r4I-v) z0!c-&s1GJj#kRX%bswzGOWcTgE&O|Ar{E#b_sQbeF>fI;z?c%YlGew=OL=_k+56uk z+y{O?()IuG_SVER+W_?*!HQS*t>u)U6dm^Z4GHXp?(IsR3YRB?a>JfZe7 zgY|0X%p(^oaX?Eg5?HkQF=CpByscXgbJIGJa-n6G$G;>APo6xfUxbljeYs3%S~Y`a z$V!}j#qodItyHLl>bA-#Xp0>c-e~b-w=7gpxL`s+e+bQ=%IZvW1s4vuds(t+CZ_Jy zwFt96C{s%-?BBIOrE=VESTW36xC_cB08~A~?VvMpt^All?Z;nNTZ>4*A*0PyZ#jx# z?q__!p?d%FT)be-P}gS??ujinU%4A#`PT~f;rMTE@Y_<&ObA!a@#(B-b_>$hVlW$9 zThmi-D`b1#-Tmihz&fXouMoeiCtJ&hn)-U(>88gwf44&6o>2B7wtH++#hz^Na`?A^ zfHGH38141JDWuMxwY;H*QkPk?xyky>NX~k6;G5V%ga?Bb8n>NJ_Fk6Bz%M~VcBunc z-h0!Qv{<*tV-={Kn1-y!2kQMjZWXImch&B>lP-uKd?|A5-f9j;v> z-pukEr8p+BPTZS4f*dI{M5^CTmxcoPF6f^@kMQ0I`|n5y{JrRP9DgmI+7OTGlHblo zzvtLR4D%pE;s3iFHKe1!Z%KAlPt-HF-1ujKhO20MiE~})$inCCr+P1V#zze8kNqz% z-4pg#+6e&6=pLOp#GSn&?lE%<0_vB>EU~l~8Q^abT)rGCd-n~CRZgL{XMwYq5=$D} z!dzKRtAKn?Xf7>#g^OakisU2bs0Ffu(kT9CX7@V`$XJp!*yw4K##mc6*0KNSuxdW= zdGJu%?I)%lmn~B4*Cz-tmPp$b38C61X>Fx(O6xSzvT!skC+iZz+8G!8i5L&&jKnio z&cRv1o4ztxI{H8e-Un;t(iOkKmFMD28R@$T)fUn|s_3=&SWFs=4>_ltAWz%=N6Uk*26Bu}$ zj?hfle~w-*J|h-FCK<9nC??U@?i{78?n6lg#Im-^qs80vJL+KIuFQP6FA8!DULQy&?(e-4zDLAUjE{V z1&TTarxNTlEV}IO9^ccS&*Hm<+f;hgk^&gfp3tQrZ=5%35{gDgt-ZB9>lD4Z zaVa6d_G*pT>DuH|Ub9d?WUv(xkEdTf1OC6uKLJPD@G$9_81qlMl6vR_>pqJ95)E_p zw{!e1kr|nGWrT>_@`Extn&!zp?P<9%;IkWIdY~_7f95GXW65n6$he%Y=|9EkV2JK_DrJyv3vzp7yH*d5sC-t&ORXK15&sp#9%#rCvTU!7=_rD@Hi zK41*BYL08k)ZFIZAPkYts1%GDmypi(&hyASRQV}E@6vvr2``Dej+FWnRIx<9SPBog zHb(oT+F8xH4FIm8k+3nO^AV_&s3oKZxD!);IG`C;&FvHQ^@n&czx;PSkq5#>3x^DB0|fnvT-7630`toa*@6+ef_LDRj?qt=BQ#J$|a>P7b zxT#ej14qaDWyrA|(?G7`V{t1rAO+Z;635-QucTQg8VPd8I&^uKYf0`e($mwk$5y-o zRXDbpTGrhxf{BSuoY~N>M3MtO-<3!{dGqj5S29w>+!=_x>wopF)gc{2&A2J0N5cl} zFE&r~(9)GRmaRCEn9_GuBh0MvlEN>qTIH^eGB+4$8?Q5jO8jCn!umKkUV_yr7e7R& zIiU8_uZ(RGKwkzai@)l3-Jsq>nAoW9|H2@ARoA`hPooD79Tr2^Qxn$RI%!=gk#_Hw1Kl*B?_`1dI$GCkjmpY!- zvntS~1>I@}{RW8(~blhptsotS1Y9Dh;cT>wx<032IpzdVbJ8JTCXJ0+tYN&mQI~Nrd)n$7} z-a@ALT<`IRzlBvkX+S_Ou^EL;ylGex`}tKIH7AhAYr9T(2f{RKF2+8_m~)JdDlad8 zuML~-U%!8{_#UtGBPZY?qbjV-L!(ariSYRR^vbt^zu7gULfl_WD3v2)^#NV%5%>5} z*Ae|cn^%Slv?I@bA4)-rb&hz_z7Cr3)8%!Bm(FY1`%g@S78HT809lQJOyOm@>F@ZF zxuutumego;DrQfO!y~=!$Sw!sAtFqWqFmT={5+MIljj2SOxByFv;Vibfiv@Tbec;f zhE%RXjxw1I#xd}P>_{W|u*q3ki>sVa_`B=7$WtEnqSO{qOXLXl_%{T;Le2rS4Aqe< zw)3xRDq+IYEx)(5dkJGrlx})^jpIimZrQs$Z5Va(jVCY3OifLp6WiiO)c!QV!NKkW z=Lz_9327fcej;>a)&}m}z59{yhsVv1Zd}8Mbe|7_?_*=U;MK+TL56EyxH!b9c^?ZZp9FzNysOokkSg|50_;q*qzanv-YkC^(9ceq|#D2AEo^{F^ zir!Qk5{3v@LEYfSkv%vz^d=bn&!IDOT?fap=)Jt%SSEhzElyCMfgp#l_y%nmonyUe z&7j1U>(e0sh&S%o$U-`TH>5!udvyvEfkmV&zSDD%J9Pn7e5-}+mV52I#B}}c{xD`a z+09KyzrMr@EE;Q^{YVemowM~y^?`JZHp0W>Za#-M&P$-2q%wVv=@ah z;83ADDr6m3x}xSNiGXr)U+ATzZrlo_>ZH4%S)y?ZO^}gKtZ~$$V?Wvqu}!4Hrh|MK!QFvg7xS4TjK)h2Bjg3_(0-yzzwnFTKHHR zQ3WSVh9@))Z~E=DYsT?4pkd?R!Q8F=BE= zi}j(e{jqC0F9BuT1DA9GfAYZ`QOe&~FB!ShKYrXI=n+FLpP1l_dQ$iFe zSc^3rxG9-W_oM7=_Q#&w#8Qr4{7Aji%tE|CeFt|@>FHYZzLATxv}nq9LJeGl6u3^j zDoS&FXTDTwBC1o!?kex}(M_u3P`0HVAig8&MoBCG(^IClf}cHY_fzdHIbr;&O`U&r z#{@3m_nZ3qdTuQcIeZKDG1AK!b%)*N!@GzT9NG>i0Gh7taUxm$+V{NYs_wE%Y+i^2 z7=0Xv&$tXk?|Vt-q?D0Gt*)W#(6rRlT)M#LAzQEVS0x&pmNqsv)Tb!0T=8gXsoZ2; zXTh-Criq83Dl<*388+i$M-gbp=f*v@9WY%HAin4!XSUqvHW&YSp;p|i#~hg&u|MeF zQ~6DLscQMuTT5M2hpOQc_Ue4@A+aQv?>Xp{L0_2O3Hukq#+*C7tvpDhx~0uRD_ zi6weLC;l;HEyytY5E&eB?OegoaN(#7o0|}7;jv#kjtg+tw@6K3-J9?Il~#Gs0TQg) zfK5q0b%s(>?;@9QR$F6D%;HZ`*c2Q#6OKJ6U5B~r|I-vz@J}BhTC}`AFVx#frWDSi zJ6vKdn+GwONxtTdNA0M?RRfZ;`m~Y0J$a9h=gyI~n5c+|!Erp1XldwhGAHo+yJVwR zZY{sUTbpYSd5CVby+A#CmAhcA06%zPu*Pf@bvldg!P-2Xw&lPt-~L^u>^1I+sXz5a zG7WkgZWiLXaaQr!rH`OevC%l&$4)g1gk{1ZyYK6-#dUCx@Gdd`0TRUz2A`y2iY#%J zBLla`jXcCjLASVSLM%!m4#^E=x#{i3i?`eY)7hO42nbl!-uS+s`4FpP4TOk)n=W*( zo1Pr4^(;x8dt_dNFf?QNXE;EyiB}Tt`R-3_3KaQzWfgRn{_43+???VG8XjW>TB72* zSyi{bo1|6SV52Eu$}X)oe*%N z)nn?zpV_4I);3y+WB+}e~sctu25i! z=i>lkLyB90Fjb@Pri39aEs0xW|5E&J(6R*-b_42cp)y1JQtv>4Fr^lH(w;s;{rnOC%5W)c4JKXvD)zUFKg>N{M7jo#`u}6 z4K9W=fzes{#56yW30gP~O|SRJrLFM-HMN6nFfL&n6qN^+TI0M(* z{Kw$QAP$$x0h#p%z3u6}4?F=+P}W58r$@8cphhtbWov8|$}+$xLakT($kPdw1{#e( zue?0ZDZ;<2M7@MiHUkY}U$wjbk<1Jj82I5O_=nX8W8t|ZK8T(@yI;^jE>mr~^Quxk zCGd)M=VyO|Q_!Fxa2j!?KKPKBXXMP~*gyth=!`w|7iahlxp^b9!KwQYl)^H7m6{X( z`xtVs-WkkstmVRDtf2}&4;cAj)N@^CL$s{DAb9MGQm70=Jqx|NF=>Ri%o`o}Q=6c= zrJ}@W$9j*`IQYIXDCHH+T&YNVuN$TrJwncuV&qYv*L?Sqt=QA&wyK=mZn4o{`-MDh zY^c1%+*>iJL3a2WGLzjP_t|Ki_WY|&&Tf|JpR1&hK`@X8Wzh9SRF=I6RcEY=%HU1Z@80}xJ1}`Fo1z_3xH0t}xv;E)L zefe)pTDcQuNROdD5VO=}w1j#Zf%yr@rsPb6O^1d8-~ZN*OWZ-T4VpuJHT4EwHuqXE z__)0Hv)s?hdpJ)X(jLn&7P!(oi?yB_P__#Glk5I7f8g2AMbAx6Xz6m+-SU^FyG49B zyUxGej#&FSQb@AGn5=Ko!WU*|0sS_XqFY`VjoSEPo)_;zb9uN3Qr2tVsEri+Ha1t)dA-b!=FArZ~ zG`AfZd1?!u>sj%GFmftvL%1B5w7cP*6y0p?WnaBy+qKS0YzZ%=X~@i+-sxW~2Kaw3 zl`-xt-H*mt`|?EW>doUybE8;nfS=#*QG6ROxt9!w?;E~C$v3(+JtAka4$Sx%5&>i;ocR?9U{?jL4BcC zW9e;5h&*}cpUX4?GboN18`fDfo_A)(OBQwZ#X|946n((Pgwlq~JI&0@xLS&uzFKYJ z1pI9}h;TCjez!Zg?=UQT6)+tJM1%wv2Y zR54S)V$=9*B^jR3S7T$mbm(rzx{o;jc}Z=z^(G4gBja-Id21ZUXV(3z3-^nyhq93S z)0+uFlkU~f)T~C-*oG??bI@oO5ue5dI=NxFt9SO1@8Yq9re-CjR~m+G6-~L9HjiHx z*;`OVjT4fsS`sE!>Q_Tdqb<*^urTSMh7^WReXP>n@!!3kmiaaP0%b zc%Z^V<<)mKW9iB|k~%XdCMWG4_F*2iN9cDSQe4X_BwSPavXiJ4EEqEYIC}!`G}bGJCj(^k5c+pAsghI@1YCFB^ciVm<^#s z3l}@>5|h!kLkDGDYVAIwS72-FiH|PpH`nFHo%{8SaA+C3zO?Ub_|w&$4gegTtkT)9 zW0(K5%3%W9R%G4 zi=&p=^kCg%99N))y9LjlJ;Oa#dqASPyLCu2j*!L{9 zc7Sk}d!A=xhv)pAjn7$~1sA#w2i)v$+Op!*H|+Dri*tRm;Ayg!to6M!ms1x=M(5^yXFgFY3R+o$dK()T?t0ZU1>(aMKv{_Gq%vTJ|Y zouy(q&a17;L4UWo#>A=>U#|zBrSpT6+=p< zXl0~y2<F_mZS_}Kh|MEz(KLW_b0j$~BCqFk_r&6>^`0&o(o)wTY zPNTA}1su1Hyfn|NT-s3Ni$=%)&(|ZCfTZP31380l8+um4A#b-fBS{8{Wdo~63lr5e zQL-oBB;aXNFp{=OkFYT_JIt_bWmwCos$#UO{CkxYI6(@e*q27iiZb*_<(I66E%=+8GU!mB+@D`@3t&(PPO{tA;@UA^}NtR3wuXosK@SjM_MIysn$y>NA z1uti|ymX0cmy!-ald6}^qMOaIVdq}JRbSQa$^vx<1UTbkE6O&{AV}&JCioGwALYp! zmLF$=I3l6(C$n+vuLZ+;zc4}PkuEo&bJg}kU_dP@k;NOM%MB_Un;nm?43^E#H@S{f_vYliRE8!4;PEb}#d^o|R1e&6sr1g-0vXv^bnE z9d57-MC@k!hE?|jyDb(oOOlgBAxkJsPCB(!BS|3t`K{*UyQ*GopSX*a#vkscVTnsQn|}_OU0rBK$F-56!3A+qE@)gWahL5Pf!B!&XvIngZpt3Wd51R zhk6`Vr|s-qlPn&WRW2$Ol-nT{Ew-MO2D(iBisS|8+^gV>foVo8(O)NMKnU}esM}W6 z<2joZEH$mItp(z?tWOkS9UUF}A7%q<6SQo~Sqxo%&Pq|kR#1=xGnu-F_eURe(B4~} zvJV@D2uvG(N$`?*P|!4TL8Y^um&QCR^sO~nxFaeUz$tg<>U@yH@dG=SLDMog=xiqV z=FZ#K9rtfnk_|*OS#RkEidu<+AZJ!O$nB)En+|jmok-sk z%6){D)y}-jDA9UuMy}dfm=3Z1dYF2HK~A-_b(nsbax;7r^RW9^<387s&6l5aug-oq*PTnH zqbY6E6*YVtr~hm=Xt%P7joXzC@&NLd-|b8QKzN$|+cT)dONe;@I6nZwfTRkf0L zDnETE8jsaCB@wfUo4C<}{Mn2Zv|!N@Cfpa?NVa z4`drXI6WbEkhgg@IR(mP#Ld;txDO6k$kHGRDBJ$uPpC0-Dqy~Uej1|fPSXO+&B5Bm zjzigZ`0TIs;Y*W~gp-d%m2I#e{t|DXZ=f1{THJId=*2i%fJXfi2v#}+2uEkPK>a)5 zD01Qswt*8cPiElG`PC>{UA(B}NgLKv%3{v-3)o%(lxv zrV}p>jI>OuHD>!PPi>h{>rm=f4+(i{OkOR%$WHI=%RkATgvMW1PzctB!zp&Pc2b$U z-{@oCJCp>Trh@a%=tJiod%Jph$ptyDQ+CIfGWV6=aB@S_zHF(dAaQJAI_+ug68ESCn7LN%YSZne&W%+r_VDh5zzhwd)t#yQST zjXGkj-DfDlN)rPaWpEwKPX>=)FGx^x9;!7%3_8W%#UnOzx?!KxeS8Rq1_lOlMK)mZ zRJzQd;@))Yp6*{32|+t5a9#*t&loNBPF_E&#)RkhVuE~uC^QoU^djx<9n_}Jm_mQo zk#;249X1|qvvLLLV^e(C8kJ(RoEq!*4O7@_$@lWcq<1*JGePNHeA2Pg4>g&{E2cH% z_j5L5R^!C!>F8_^XUPkKf2fZH0zZUecJIdzjZoh~{IHf}a-tcd`Fn?z3Rzq*jtY zi?ctIvYX2Lf>etAAq^*MQJ~mkk9&Z*=$c`Ospom?gsxyoX>LARk9f>Trg|f5edvvk z8(c}1fcSAKfM6Cvx*;_6Al>p!ZLsERnt$y^^-pvVd>Uok>N4!OQ3PaV%cKKv{hN(9 zcEai&F7|N!-E7cHBh8%l65Cw4n1__VNYj#ksgsy1ZCxA3#_ff)t)ZZps~_C!S0&i~ zsaW(C)(_%GjnE)UUB_0}Px@FakTNz${PR?H)Kv4mGwzX`+$RfIzOiFeYeJhcqjWo4SvZI z8RCETXpo!!dzK8_p>Gr$G5%|9ZEb34@7~?Mn_ zTvi-@eM`$c#zNLFOwTX#8vkF)-RCJ?=Q!P{QI0y~mI=LhE#l8-YMgQR@Y~jehJA_z z*bG_ZDB7U@s;pkt>aQU^k&p5!Mhmk9n{;on$x9WdetpGi-}re zWn~p7H+yb%eXl3$M?w`<^qzWQYq+m(3^$2o7NZM4C6UM~VI}idi35+j-aS$5kmi1! zkQA+*RFE|{;GpTgylte|FV|~WETe}z`(FgZ=~Woomo#$*0{@dSkLRQY#LRLE4^FgHrR0W z(8izsIJOVS@Z=u+ZZ#96^c1gma#`w?qiQ+6?h2kp-QJ$SwVWLHDf#nRp{f1)#>UVX z0HnGdF6_aq_TlmGHMw0T>fZvmqX=L6v@bjx#pb1NLmfGUep+haG!f^vw=ac`7AB!U zVKq?*EFPfgrJwc*p%cOZnf#~x&;FPIn{Rhn8 zB^`1G+R+J*%4b}1{nmt*$B>uvC?jOw3q0|7f^J}W|5&O-IO^KYT%kE9)U-rw2(4T% zU4~bF2Gf6#4`y1@OOa?C&LSx?viUYN(!KJS`QIw_ok#z~H_S=Z;Jy(DD0p8idR@=F zQYK%f#xj){8mUL|lxiGb^G}NATHI_GVbUe&;>nQ_|95lGJ(Yc4qM_1l=y472!2btx zi2uEv@uKE27=w<~?_)}@Lbu7h=ap;5nAIR6g1P-`Xd?S#)!<#4$&-}`Pw z8oOUoEL9KMjBaJn1)P6Oe#Pt0qQ_cxujaMp>aW@Dn7qpq$x9zdveUinGlzqRI);|o zp^D(r1GT7}a79}}YV7hRMQ%0hEnt)2S8LT$Sm!iwYPU#({8uvUD{G(kMyU$go!?Ov zwSJR>M=Sul}w$iO0e2^coB!62WSamF3Xvk;w_bxwtdtWVkX-tR<_guG;#1${%mFl7r0JjfD>GYKaE{=WoW}+!&-42vetotG@2)}e($1}fEO$;mIn(j%nZ7p% zP8zOX2vyXjkZn&cXfxal^K?E zjhcUb;DxW#LChv;k{oIUC#RPWzQhDsaY0LpKr$g*VFg8ra627v)V$n|3?<)?h^6oL z4@b@VqjW2(dA~D&Q9;)if=KMqb7j_tk0C?G%GdkL$<5{jwbQC)yNd-$wT3sUAcri{ zIlfgkuC?K-sMWca;J4@ps)5aN&8bnfaH7p2E-2v$zvm?GX$m}tT+8}QEmWHCr{rpb zF7y3}O194%6Z6qWk*mJpPB3>p3%f z(PiD&d^kp)3fLvqIn~bSeun`t57=c~oEp*oj>L(f1Mi`}LwsmNaMR z+AVCY_s_SoB(U=VS7m|pB*>FDp8{S4GI<4l`Sm-LapO>+$BtEemA$6We%c62H~4RkSv!|mQ`Yh|l( z{I~Ex5XBf`*d(Ku4nxMrey6+WKycus$2kt1Q3y=vFw>6=+>t?ETr||j*A#ZZ^eaR{ zQ&+jV-fBJ!o@(|jFWY+9_$T?2jo_P~%(DqlrF+@tBt3{3%`wXAjhj(vbd>AD3_s5O z#AU;!xw0$-NRN72(>HfuySP7@@a(lY+U3vFo2^=hpa?Q@5Di|dTOzBw-k7Lg0dWz8V!y$}>KxLaOL@sYoO(>U8oYiH z3GqY6xt{CMEX)~{)=AJn|2#Bcf^FMpKiFoK^+@?~nT}U|v9d$H)$!XW$iYz7KOkVG zWUDS|H2nj^ChF@ySdgHqRbyxaMUa`>-ADSuYF&1yCZYwno!^W!>?tKD__+T;TKccJEQjSdy!1 zLFku(O^RuIQ5V**uk!poAjuLuLNK;dGp}ELyU>#Rv)&jA3AJy$`}1u*@hUq##NS(M z{pZR1g2x(N@HGnk&gK{pm08*iRx^mbpOnxzUvW%V+oE`Bq-Ts`Y_m=qDdU%j{%QB0 zILk?`Q7PrWUz)a*O)=^Qj%oJZBV<14s?ERQp2ffwFE z{>$EI)ct7?v#8qw{e+S#1%+hMfv3dqXXy6XNYNF=>L0C9FE2nfZEK%WU$4`j`k#T| z2E1%r7dv{&{ za0cG5t@e+ms->LV?v)*=?uk7-I^BF?y6YmrbWBz9|chA<($YiB~H9 zf4AYetk83rzgk0ogLC{7Am`(Rma8-fNoEN1Ojb^gctkdZ)P3Ug20@PQ+(9f3b|O5J znZ_C+nRjGk)5>*PrM>G&UR}4}4;zb1iI*N%u7x%G9Vi+YWr8M_TsRFAw7T{aPd9WJ z>c794*(rEFvvf8hj}Rixw0(BBH$i(VK{ff%XMr0Tq+u+2 zH|)9o>AW%xLYm<6Jig?^a#KyxdZBlnM7jM3fPp>@xs5R5*JC%*@!}`)?%eEL-`iQN zE4@IY{x+th{DrWt4mYJYYcJ9Hnd^v*V5GmQM9KyF|9cBpG|KVMW&fDH4D*roU4)(C zXDvJhsi)9G_!m4?EyTgWs#~A8lKZiKGrxcTj{3gXk@Vtu3Y={g($NpsBUsQon9yi4UR z%{PR&KQ~f|IVR!ZYj`tE5`Xq0LLTj{ z2tDe2@cT}NNbFYouz44&Ej(FMwXAfj)e8(!o-l!&6wBPs6{v5==iSM9m zKG>};@DA29GyQc?V%M5+xXm>1~W8JNoB| z>XEkmy+Z{_$ZK1Fz?Gj&s8(#OnOmy4)wg=y!e+Z5Qf8vKdiP8tM?1zo0YysEW``3XC4FfuTQiH4PTf0>J>P7w!vE7KFue+`p+xNNM8kJoTP zO(1jm+f|4~H zU5XqvJq6m@+O-Fu(n2sXCWp>}M*YCrLNw~u^bl*;X!BL^poFpsx0eymZ_Fm9QUL)g zH8o$lj+7e$#zN5B4a6t!vEK}#L#{Z{~5^3Tzh@}cz0IgIUoCM7qtS4 zTG8J6^^DHryKwQ4#R$J>)Sfyiu4k;*KcQy;<%8Y~jp|u%+uU&^qlT0v2ZM2XE4s~m>K&Ipbi_yP13uza9@6@b`|#R35XSV@Et&Z<3XVLhu9hS7B{%U9ErXP7ZY{8#99K&TfH(j!UgZ;Y^ zoCM|2I5$=^7BzrKGXJ8~cIdPQpoMj~o0^*PcJn1vg+6?^rjnbROFEz>o1KL|#AQR- z>#JIizx?q-9DLPF4Ej+fuk6!uguPcUR}?cx;^i{@=)dFWeoocHFp#ZCx^pDM1_r}*{H%ApIX|pLyT|Q%$q%FYwQIJ7 zUykpeuaV?$LKU@3h%WJD4W;?Uxgx9-e+yb4Mbb-Pm9)it(96 z)oMofw39I;9DoxPm(Khz(DbK=Bv`-V4_V3r@$UlN1N#XCwx%PEb@-*ZX8?DjDWNWS zlrMw#c=oZBp5-BQNurQLRUu~ydgp;$U1%Zjt(k<`RP3BL?~Z@9E*&DCm$CMW z))+R(Rv#}pak9kKTHv^Qx? zM41e)>WV|oTx&>nim*>eJp@`XYxua@qhoX1vXx;Uds#807*8eb`OW*}Nh@oLsP&ds zI8i>F=!&Go5FZq#Xw0~-K7&_Y!_LMkS}@wAxnd8&931bBa&@(&`Ov@W2evu(?!dR( z$Ys_@|CNC?#*hZx%O6-lEe^c%z)XHo^W(+*A78GvmDPCG;Xf(hA?wHY@&Wz|$RI)J zN>K8{S`5FG6*}KvD^RYr127EK^{>%Ep^wH=40+@z9-uf}Rh<}h{jo7eq@4#qO47(A zY=gr#Vz8fB+S9f%dbi?x4d}Sr`UgaVKZZ6Bw-isIy*NvUzNB(Nqov0%j$uG z-*r@%32EaiJ$+bnpfJAB+qbxEpmSqiJtI*hKqY+isW~^)WXmmhBllK+{b$J+A4;SH zW0Zd_TSWTrSKZ*D?gKS;xS6XvAmE`syl1#x`x(>=ut!0Z@Fn}G4P)OmuXh<5@eY@$ z$~gSz8y6^sX8rZD*`)5{(@z1o7BtY; zzn2p6hXcA@{qZ(5fBCzQ5_uAJZPP7p{kZl1v2NBUe;Dc-t}CmZy$V&hkTZYnV7r?3 z8nRL*jJs9s2wCjE3L1|Rga zgGO&2FPQtmnbqj6bG*ydx%C+RIc`rk4kPN-QGT%o&rzVGsv{dL)2fH5}jhWA!Tr9YR}vm8Uge~G&8%#W77kf@KhGc)NmIJ0l(4)buW z)^o$Gf%RokNXM?%4f#d5E46`6;aM8K19d7RoNmD=YiQXd~AI%WSa7C`+Tm6BC}vXXSsdCFKl-Ux|-~j834imdKG^d+U?w>^HHy!8u|^ev<>?zmY2o25K?=*abdmz-m(~&=Kv%8 z`qeuAg7ReXY915R?{>w7eywEh8O<>7E>CNwl=b1qLBb{HP_%LK%Huhi^ z?rJ%qH~Vu^oHYRxDEd@;Vf{*{=U8w5Mf)6=h$4b_QZ9a@{?7EekDmbi10murg|xNf zmS$fV*Q`!jpLc6a93rf&xa1_`_BG{c)K8!&mLYB~ek`@XDk%=unp+1&<7SrkKW=Q6 zv5)>HxhzET{|^f_XJrH#wXda_v-!*_e9jh`vrWgFRT$V1)X#oCQVLv32%8 ziGl(G&6>DdvV8fqW4Wotn>M`_J%|5UVqoM7eZmDn%r4XorpMjBB>cuDmiFt%mhd@^ z(#Q$Y}hO-)4Za|vF=Yq5Tf$v^HuhnS{8*b0{W_6AZuEo%*k zNyh%s#L0c^JTc}5=fZELj#Bo+Rju!OHg>FD8jZl>7eW6|AEs^;n83JjyX5Fi=?59; zk>-@Zn@6lG9iPnR#%iDu`w7!~)PxgK_dEpk*1XJqZpI#CR;k<;owKGTsV?E*J{fgQ z;9YgJd@f8~;xI(aP_w|Za|S0#Rqa9R4_rz;zVT;eR~8= zb+gI%D8Q!P8(IDGuiK^oxJwFycJ;nPbwZw%gwq-Thmzn)h6#h7aIuFa5p%0V8#`{P zXz4i;0EadMJv(j{S=;+3Sx31gY=Hg&D?roJPy+5rl6MpkIkXzW+4CgUZ4HT+CpL`o z%0p@KCG4!kU6auqfdj!)5t*m$9D@$?5*UG7E^9U(AZtqpYliOLB4n%_$_Gn$w8di`ijBMsi22sHmu*M{rNXftZHS#Yn8kG;8Ek zdrd#b1G+L388dO}Z6Bpa^qu2=Va;-^m}V=3wbuf(Q;hYVfl)l@5aZ;@#dzbFzG_kFk(tQvgva^LrU57qX^>V47Y&IJ86|p7D z77kE2bxBISler=(HDm&vuxQ|Ww&)F-0pA`ZOlKctQ1p_o;gQg+htw23}e`QUnL znN|#FXDS`|HO&m$p9_DjB_jlbKF-HD@+#irz!gz-eO`nB>S3&wb5;+X zYMj!zrlscvRa#6ChAS>nh;xz4X z4C!3bG7rD0`K<)J@eXDAvsMfQb)S~z@_7aW7cTu_9lGJ5i?ga+YPQ` z#7jwy73W>n6SV6Y0^BhfPgE*4KkR)i)?Qb|V&|7$*NmQIR%m#U*;1Xne%cf2_M8XI z%IIXW+%)fzxt=HJo+`hH=c?b!J;^|_4tV3F<`g_Ri}sW8*5Jm*Onymo65D(m)tW&F zG(Do6PW(+>k#TL;A6Z=yE$$&UU~ znoy|6Rn(Tnsufc02I+Gjk=n4$p4Eb$DkcH(nTKO#@<3LaD{jPQ;TO?y#}rGE(DjLx zTvlIO-J{||UU0!$9tlU_h%KVdn}>!~_4HCLU!ZiRnhY1F+*9hLhCSWC5ZZqN+*Ss@ z%4x&eWWs{9YRLM@;$fzw+K$c%YM|&2#s%nGzpZk5{HuQd9FVHg@OI3oT9V!joG z*ba3-5}d`h6TwTPHudt{DB{sHq7cp4ytx z*q1kkg5u^SD|MCL`x}1p4=tW|dX`9o_}>;0v1skk&`=F$Otr(q^0i-`*Szm!v@r&c za7}R6q32LXlN3^8pKL@Oczotx@rNF~7mu@T_lW)I5Yem1&`}$ z-m|r^z@93$DDUzAb8T&v?aV&|Aq3qtFqm!bMUS^1JHz>7Hv^3}7xKlS=h5`R7~}G&t__H zt6}(tN*DhCqDhkEUgE-jIDWOh5k;I^Zw zG5JL^C+~`gbu*r)q1x{=Km~1`jfbE9QoDcTN8Hb8&AckwBx1_fF~<}vj~MjS)l-Q- z4`Wrc7b;nPVyJ7{yw=K=mTF;+(je?TIoN=zUwWh3m_*4>{rWu5y+Na$9GOj+RO8@) zZIY_$NuCFq3x7&1DL!Za>pSVX%0JM~MsJ7ra5!HNTaB)g-6d130Xe`xlyxaso2k{^ z%>~w?)ViV6oh)jQxFVIOdhr&z1=`JspH`X{8SNE5d$uFhN?Vk=z!W-&GO?}VEl#wJ z-w9HO=DA`_I&}oWbUq_T7kcV<0HUVbjcYV5N$80R^gu{nZtpzB;we@v18Kc5?~v@& zy-9gU2Gbe4Lzp1zK&89^=FO4&MagDlqBMBdDLb5!)Tc)cm72#C>ezA>6%~b|GdN}! z<{0N#PM%c2qOa{;GB{&r9C{dKmuOI@SQ#S50#R3 zErc;owhIqvk5Ouqt#{(>@JS9KkQ=Bg{T0o6AGUffoZ=!C7?{2Oeo2gGBVFQaa$B2* zT+EIJ0|NsWX~2Q{$5^pJd#dK01x{)L-|jI%VjWR!Tz%B4fzB)F1stea80k(JF8pCZ z+U3E^%|l3$=$+yu7FINc5x;qijIsr9W9@r{HBozZ&}Ngj?wlc?o1vPG9X0ZC6M?mC z^(K7ph7Uh3TPErXt1%y?l)GduyMITgqT3zABW`4GSF-5}bcECYw@$-rHgl_zWBU4r zl+#8deAV@NO?PNsoV^WDQ3d|zG0p&_ALu&rCU*U^D`%LXovov8ViC5*yIEZ_ z#k8Ytrk+XWSaI^cW_d4$();O7Wim$KIO_)2aY*uwg6h7q6kI#azb~{pqb+>fm->@I z-m`bYi<0)pUGIGWaYgrX9jAnLl4?XB22(qz#ayAxQ6rx?w5tNUxTvNpA3FHpLq&c| zIQu^@sT(vcD#wQ%&~)cmG9T)?SHETe-sg?ef9Cr%8=)4-NJrHv2@P)-FvMmmLV!iW@p8IHi^Ve)APDt; zk>RfNGyUzy;B4YdB&3@fWSNmKh|qFe zI81dV-)RtrBQDs4DI+}S+eRgKtfaZ4vxemT?U8yu@PcZxC>W+BrUKW_sxeHp?`<-5 z-@jijOtn?jATO9qc^s?_`&?)#gzFN?%ViCPHQ7YEo{C}jLY~=*jv|JA% zWH?~3GnFaH+KrYehg8D<)h*; z^~E!L4aA*CtE-ir)V$!s4d?{#0QsKgR^x5PH8Wv)L=6)(LS1e4Ng!J;v8Ot}8R#bE zw`}kJ=yo{8?(^$^pVQB5&|Pn{Bz!Y?=`|ZuG~Hvv#*}FuIBNMzoqZ-i~Lh(R9ccjBCh1p zv_6VCg*eIt*)T!%VJBw0qpFu;t25wuvJO%)v<7DzvXh&zW%3|W%CTnfQsZKZ^YefUysfFf4#GfKb|nb%jv#wlOmn2V8^sTO7S-W;W1d-W z7VKCTWKHc>xB)y8@jJ~p9^>Dp>=$UmpBL&gK}$L2mOA-frn)%ql#ii=?Q$MAS!A$3 z@uwqy^8e(PnT`>zaK)NE+tqR7R9dy{;r{?5?CHls$9%p9P4&d6ie!U@q-&n+O|_1& z36F?NsW-`@*xtkx31jC6d`hv+a7?uIAVIL0Z1wNmXu=#UJ6+=D-v(V6MBfn6+}Q(z z48F@rg&=|ZP;M7PQp~{)h+X`s zA|yqZ-P#?#d&QzIYeTh!5s%MNS0Z*>-#bME9tZeeEkw`5QqJo4H=%HC9}K#GMAw@k zhkaV7Rm(b-aTYv(tl~8r?J%EEz~UcI~Cn@6-?Ng7cy&w8H+KEuUkKJB@ywVzx|z&4|X(a4pIe*&36p{>wN z)m!BK#_EQ;+ENm_V$vsSf01ep5K9P!`>3 zg)w%H7eRcu<36BtX8`0*%{vb#PkLsYtPQ6b2QTLdbb|DJ|HDACLSGS+)V7w-fA7qq73}6#oAU~UC3jwG&*9TGilqfqw z>6ROfdGDZ4m_hKIP`T2-5@`c8)p_*l$iw=zNqN0<9+^JwU2FFY6K6@8Pr}1_?eeF+ zPxqOVLDqY4s*9WuCb&t#(ER9w@F}r!+*9w9`OL2#%U_s@tO8DdC*yo=rvKn+pg5%t zVy&nVB9DKyicYs}HUU*c&U)+K2bvi3$X#;a;_{fks^Myn3F~jFnUc|k?k`!Y;D$Ym z=0S-yDG&gldd|s?wA0M5s-LGGq)I+8x*AZ0SXRP08I>Dml-rWE&-c|dhlyTi(kB(4 zW>d@*BPu6iR1nnEp>Gk)`$<3c{30^7=T?76ExK1N*_<`g`*m+#jf*t}8@c9QTGsx| zYMJ)8-9cXh^vlKP9+bRSz3i)>ok6mYRSu}pdMoP%y+Q<@51JA$ra?%}n9_nA2lU2( zy6S##jOXApVvy9jN%+2~6sppAz1xGLwLwxFB!pY+Y}JewOjHYo&RcR*Z>$U$!#4ie zp=HIl(n0fCTb-(y%=2h;w>vP3?dVGSsLCIx8O6Uj>@f8OZxcS_`5S#f_XjD7 zsy1a5A6B!GXm9aIlf@X_UR&K6?#1PMnJEWZeTm@%@dm~@Ete=rSh$TfPD?gz%W!9A z=0E+nKWn!Jxf^fVlf{k9$YR|C?f1*UFM}Y&C8gf?y(k;Ax~zA579e<^#N1z=pNHJU zL0VRCL3moBLLf$a<=%xCUQf-vALi-ajOtWUvl73PO)@qMfgZpPG`6XGTO6K$4R=f%loCf55U zXrcyE^`L4y^fFH2Cx2v8; zWZgv`K-d5`X=drUx+vi@&)M<~hQsPr711?}%gFwT!!!t40JpzNk(^}Hg!qm@e?UV+ z_~PRHxK=lR$!yQi7NMU+@}{F`eS?gRhBD>G3dtS=c#E&xHE_Yf2Ye-4Htv+#=ZrV0 zamhzEh(S^fZ#~@HP78x&8b1x;Y0Fip<}bm| z&zU-O_z)C)Z7kON%yLTrZf2893RS9lDMc)cuRw;Pg;Xnx|Y=a z@HhnpS^0GDu0ao$zVGUENMg8GX(v#%u{he9f!3eC(jan5f>eeFKFxBJ zb6CA4hA@L42T^5K5UC`)4viPy{*(6(4^~pD#O9Z0ZO==ifaWd&6KtMBqAy}S$aE3G zH@l*S5a&kc&1e2z^Bi1DqLHEHT|?m%h2OJ$52B^gjD0qG8LFZmlBNuAu`yBEkLPTl zH{IRDiNAe){Z6^Lsf$%U3zSCJw_B;PEgtq*H%e*SoWgY8=p08)x!z_(PERX)R7yYYX&Q&SG?0)WA+r5;8 zndM8=mk3y{mEzORQ_oxr07-wq+d zSdIbu`7JrZ1tlEMDJcG{B4f$R30HoAu?4QQ*_LE$gCo+jfy4@yEe>;NwM>fH95LQq zinrd68eJ*f^~$5y;#Ik(ZdcI9usl$=NiWCJXP|BW zXKD*isUg-s{#a82bZkmY#0+jHhif~!t^<)g8|xT8JQ`~kSZz4=@08RRfEN8lIU98y zUR_~9rX;=GhCjWZHk{pafwcXjOn+Nu%vOm_SqS-fJ1id z-#&DdQ1E~yr#}NZdGaOx%ysCE1@tuV_OM(D$A@%x*uRGbWK~*Mk((o@Z^GRz2a(;bsIjGyPHJ5gGH@Qp_U6K^p@UgxSylk zE0uW=ob9&A&HBdE)h6OCx<()?=)*qlm>b9b_3ot}PH<45pak4Ly@z^J#p41N!!CLQ z7!N|$13A;r10-<3u!vO_7Un%67}fs)I>5FWZ!<0vw>ffhcVB9k+&dqr?aIDgK>ieb zuN*U$_{`7^u2$p}k=*kg@R>@*pd=xf@?{yN_Kl6f5w4QQ7)^KTaSNS;prmgD;>V%q zI`rj7ZzcL=srC$1{DM(gBM=<|)aRC!@-K>cHoVrxk8jeAdfQqP)uq+sSiFAZeB65Q zlJA1g?6_8`XCxa~0~PH1+}K$)k2^X#l%JQMJo0sTxR!&9lcrGAy$!TC|R;gvJSEi8Z%PavQ(BfTe7dkkahGbitNi^UQ2ncV`s)P z#{BN#?fc&E_#IEQ?OvvV76W_+B*xAH+sBW1hkH%B&y@C#Ifvk(3OV2-N5A648ucG*Zww)B(udIG`%=95%=TpR{~~DH+DY zuxrnxpaFl4QN5JF8X{H8V!=y(^-3M?QY+PfMtBEnOH;K=O)oB$x~g_5XC%NiP2Jan zmQD>R(+W=13Qn=H&7s*Ad6Q<;N(i&GCwHG`EDFxlJTbMg6uJoMS3q{|N2YC0pV2s| zIjD)RB0uXa=Tl2_I-M-5jGGFIQRgCrXJ{_tkL25#o1Z4UbTv%P!1zmx$6M;J2^Lr!~iNB0CwIUfk$}0VXe*r9t(N?rE1NB) zQA?!9Z;NKIjM7Q7&2rd@?f%)Em>r9+QslkMh4NgzwU9kNdS{}ue)Tsfp^BQk> z^y^DZl|$*L#)Thhu{}|eEW#HqHn0135ITqcVNKv$~G>iXSk;l2jE=oM$n{t2NL(RVr! z9p0S#a;O4O-tOB~hwBA>YnCeY&&ZpwAY6FAwtgDgqC|C;MkEObRCBj5$vy3VOzFoFSI)!;!ni{6T+<&MEd0D+6Gg1<$Enh4F!QX|=`=$)md&Vq#O4%64``YG$y*pdFbZ#O%) zT35SB=Gll-WjTT6G2Z|&9S3XX!+V<@x@CFC#fPrJ8U|0RBYyJ34*Nc7iC{zq@$VNK zQqevg1I432_Yk*fcsYV0A-cQ$Ko)k9X_lp~B_~dL*~Lis!8EyHiAGHHFf3nl3p_4H zd8m@EE_{T3PlDUuxy70B&PA7BhpX?qF<#GDoZV8uD%k~|HNByAiQvp#7+hy=kfyqK z(RJ8-&$SZafjlbNr9}jc$A$&&QBz-pVY3`C7@sQqd%O}Jz~i|^pL{oq4)k3Hz|4Cjv9uYJ$iYdq}Rjv`knzMfNG z+#Tr+?KrP;t8FQ;vy2URMu>e$?R4{PaR*uo5qi2(@+=p%MZGIgJ7W<$8-(l5GFV)F z^XfY`OIz@e$c-!aW~q0N8iTzj4nBb5;C9}YO|FkMe^&rfoF)BM;RB*b#XhKw4|1pY zrxx}AinYbp0=t*wVL()}{(i+t7FAy}aAC?r`$1?u<g8fsK}x!O8^Jg3AX}I(xG&Y}uH)lGPUt~x`^~uLV302)p|3>Z9Wn1ivn^V` zaiN6ysg`LxvU-}seNk}YS?aW*cFjHva3MMk7%-K_*Vf9ExF#GnZSk9Kp(@{8vwqbf z2HXGkwGw_`o7~C)fVSm+7WYRBS!ujrHee8x&Sa1~Cgz!0!?M=RZ7u<&3u*8OdLEI0 zlz=mp#zE0^D?O6~Iz1Rb!z>2LTEcDo7XO;!i~yolw5qK(W2~p3TOBO;^QHZRnxYpl zxRW$3!xW(?X8d7Ty0R`LZE~7b`mg%mNe!A)ZjwoC9Nz?^5&ERO3lk+i@{5UQ+al!` zAC=?XcGvSVv_yU{B9RbRJf7*xRl~s0pb09p1X87vJ%|uERkmqrSM_W;*`Vh~Qa6KH zNbb8gP_8!<^dR@pex-Mw#>`~9r*e-CBD58M!PJ;A_du?}$255ABg&~cVn2PB;x%C6 zHut}_!fDzDf~+&N@F<J*2K6+Bt72+h$EB(7d%yimdKDm-uTqvxk-G4K<9#@wAEsd~!N!}xpG!N%mu-dA`; zJ-|SC>gmb;7VgEK6(B+gK51&kJez~c z|0*iT&Cc++v?(sYdFv$&oC^Vv(sr-#tN`^=x`(#552~o0ARu4gBYax9P4^7uAJ=&l zbi{Uf3px`P1s8jq7W=i(*V2aH&yy@iZ$GYEbYg;msDKI6&ksSaU+dqSGBn)WT3EO% z+cc<*C@`am%gLOA1dl<#(g8;yPs8hiqLD+KkzA)Xw9@lL40tXPrvtWFs0aYVo&kifnQefRVoR3wl} z+okpv<|hZ>n@HNOBvB8@*Cb|kBo74)z!K5wFXTekF8T zgkvShsfsm??XTTb;5*1@DR2Lx)%x1=(Jw-YZ);qtdPqAHTRVNfv0KGFB_P1R(!7Zf z8AS|DQq}6Y)~CG8L6NKdZOxvl;aj^D8x5^3rdUOU8#+h_8VxB7X;@9!VJX#TFD^S+5DN` z{B4JoT~B!vMbddhnW9vCfxHHYudqLu?`3AlUo*YpE$N|IQigdke#2&M2|y)E}nVeeA=lDt2?4>p{qMG^R{^!Ro4Y(xBES!D>>;_ z)HSjaW+|C#rQnOI;KiLZJvBqQkQM4vOMQhG^SOOoRZv!3Tf^QZ|8n}jAjpdnkoo0u zrPRC$y{JBAlM8jnTt73qKjr3FOyPY7#b1Ys?W_f$(o z4c8<{X}wI$Bh}VNgT*u==Fq6y&3d0OEuEy%8!o>qL$&%w^Q}J(e3QPaUE$GtLd!h5 zTrgPrYAvc|R!5!zwMT?(qz<#w?mH385HlU3Y%V(fg$rsHlJC#0eENa4hZp(;I!AJ< zlr841Hp#Dq=*|NK6ORNCveH2^sLoY)Bie16T@u4iT=bi2X$-MW{w0kFs(v>0T8QPc zw#V7Ci9*}>Wz+?~T2@zW_s{UV$fnL^Q^;!AD)0Uc=PNB&3zX?9{G)x~CbrHdl%T?pAmfX>aB`TPz z$e^~5YgtFE>r5P<`1Ol>S}hJRy|3R2pr1#OI1gaQ47xzsIXHn?eN$%AH`5D})5Aj> zUbOy!V_?u%U=}|0Cso zU`B%u=hj?Y==`?f`gjV;W4>_A?;`!mv$!z)!GBt)PE!2D_1Ud@LQiN8B|=rv>PGI_JDhKAbC)ZI=Q`tG)fdGEm~eO znlP`*vzsZRZ|fF5XoWHAboYEiHdXJL;%3LQW5?0UUgC^&uW^)dD4>nIonW zv%LNLKCy_Ei|+VVDtnB_c+jU}`%^PxYsHac-~!o8JGtP-H@_ESi+d!>+k~SzUt5Vg z({_;5Q)nhk-ZX8xj2d+vmcHmzt{~RZeY&Od@1unri3;>h0+Q(^P`n_|EzupjX{}rh z?~Lw^_j1u2rd)I<;P%P!KnkO46R%q3<(%H`K+hiU@C{`zHu2f<^OszHCBdm9LyUy~ zx&M_#)Bto(%?YT!jTSYHTx19;I_$MJmL71QZm|!_hG|T@QXE@f#_gFA9w=LtSYGLN z1SgQ1 z+VjULvy?blgxvjE>AgE43M5HC*<_KLqPg-^&u_XZf3BFBoBQdPuS2xMKa`v0SxP@Z z_kd*_pQq`m2lU@Ggy@i62$pWb3>nhMDf2HABmF~uf4PVl4-68KmRc$C(>8Kuk`{y} z58JG6!+9JHTqdr``W#|rb3Okip-&=;b1@1s5(7N97nUhZ@E1%_R$pDzn%NPlAO^!h zu9IR%df9vOk*G#uF@2Ga%5iQ)#2N|9$wfvm%%$$f83tNY@NbIN=s_rO;AKMEDe~9nWXC5h#4x!A*9jGP z(e(7Rw9sQ+D0g%p#6&y#jiF&2`_ud*r*wzahuR90q;TL*!$2|`h$B4R@x;QtQw9yD z$P1WPy*X}_xeZ_ak^2=&8Eb3x@WBDu8_w7~htHn$-3-AoR~9$q<4T^Yz3r1eKN@yE z9-;B-7bg_}Vwo@}0ZrM1>V0Eh+#hYx=LUdw_yLs(c6(yRvEn6?12*P&H~;4tO?`D8 z70nB=m)*891siA`9UI`z*vo#^*hUnD%Qv7>YWd1%9F9BPevO1!+8UJ%B@CexOxM46 ztn#X?VT){U#~TkWS$VqM7b)>XqIl`cZN7wdc0OI{SubXEwxXYOM^HLBBvYv-G4AQK zv8yiXE^A~l9EG#i0KmSz;7Wj@p$EHQ*I;Lzr`w^W!JmdIeDFJkwcmyASQr6<@(_=? zBS^ULZcYq>iOT}6F+oE1RNdeDYBwza9qmob0_WZL|BT`C9gKT=1P>0aBRfCnHxHdz zPHE`azAX3t2IrMmP5WW#Y5)YOP3#}6nq_f5twP0DXSGz?Ds07n`T6sDb;-Pj#mB9y!FVUq(~5Hk$64 zWGcycbuO3<2$*G~s!uK%t42un=D}d%DWI&QUQt9MIyq)?3PVC|LBX0A*T46LisQMz zy{O`KSK($6$@fJWj-`?`sZGafIw}r~)YDyLX{N>=3o9B}#(2a;FhIAsh^-4y!#;c+#MkOyFq^kMY6 zGC|{4EYOICizezGV-WWWd}~=ZCriZbm3i1MaNs!uJR=WqJnq}r%laM%z1)k-=#NwXXY*XOHQ zESm`rKl*+y+p!hNrGUolbMNS>33^SzU{*txzlcWZRD$xCLWYD+#)lN%T!1Op?2_xW z9fW>Q5n{su%Pjp8gahjQL88)&)&QFk3%%gi3=N9?N6jZ+(r{hm0K#0}chD2fE4;+Li;vLpdP~oby5nkNn!Ko3J(n?( z$O*=&^Nfw%ZqjglNxWu`FTQE3LQ`R@F-2Ss)$8bCGZBazu`Px`|4Sj50i)NiG z@9*Iki@5h<1}?JGi46Kg4#N)5n~;(leT&o>z7Z7uOsp#a=?q+0V?J4y-x#Zf7xIm_ z(Lj!WQQFP`QLrM1=Kri%O>XDZ7L2`oa6-}aqWF7{mF;7aR%;- zGda5ypyJWYf$X3L257_|pXD<=9BFsg#`*k^>p-IlWY&vE-2Y^vK1tHI06F$^^5*jd~ zZEjj0xhJtLXn8YmLJ*{Dt`^B*imQUS8Q?@Vs9v6+uvIflh|4DWrT)+h^`2+ADx0)3 zzh#jc`OyeZsW}RRySGvq_iin5<>EBHHZI!Z#qw&F~~g#UC~;uTP~1m!Z)Tg1!j@RTKTdNIwAk=tPA z1zEeVxPUh;=znl`xA4)0?$ivaAo zicUrF$4O>Pn2VrT)v3_{#Vfs6>F{BwY_QK-bUOICgO)L1P%TB4p{4vHDIQ97Yiwp* z23Q?HPeI`ncE6-iBjvA?0z}LU)ONP!ed}pL(r-iXBO~?0bcNnSre@1Q4--<`Ilo`$ zv)I9AU8BUC{E1%F3}HO>h9$$iLdScyBH<~=k@Ulorh==BBGg+8;byG=y;GFE)4V=M|Un#YqNu58T2a^QRW~(Ewh0NILV}bGcf{*6VKf>)H>vjdaTpv|_V`!9(JSK6{`O(@hx+!I$E#4^ zc@IwJR$sJbYJulaodqYb- zC+S(e$N^LQ7R9vhl&M@)j!*F(2543uGI#j>0Y0I$p7V5=qv+`O+Tb656-Ne$H-#bT zOHl+kQcF_ecC+xnzp;ji2UutN)iw6@q)nu#u|q0)QZQ?Pw}`Ru-%ZUl|N=_4c-gL!ZxyZVRex{d8ii>>{PV@Rw$KA~EQX+%87Qv|gZq zA?R|hge7O1_S)Lo+`FtC_nuhg*rEpujepT`xaIlK7{0mvIik6A-CwiE{QmBLeu8)u zu4<->Da5h9=eooF6Z8)q0&V-cGn0B}C#WtyFFo-O}no>WKgyLY=j^c{s> zJQ|LBzjX~X2I_R7WX<%-Rv_`sxt!WcMK8nc4>`+ucSN&kX3PxtM1~f2^lyHP#Cy^Y zW4h~&UgbB^rYbJ4)%_6MOXP6v$9671X60JAPwW)4Cq#<5l0HTM3w#Bc13Qh@YyFri z?d+#xE;dz9CLL0qiCZUdF}U9VCF

=H|Q)4 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

AC&QkSXCcLNv{a5 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

;Nk(#Iy9?$qoT-*L=et@Fd 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 ZrgEo!sDa{KOA;~f{@sUnW$r|W{U6bE^f3Sc literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_left_white.png.meta b/StandardAssets/Textures/OculusControllersTouch_left_white.png.meta new file mode 100644 index 000000000..4744e3c5d --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_left_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 88579d670a524b8d9d02d71d7d46b0e6 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: cc3a8a94050f4ab48bad01fe37bbc2c2 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png b/StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..db85975070aef9eacb6e5778e611b42c8798fff9 GIT binary patch literal 10409 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 V2?vMITYn}r);H6;bI9@Re*ijIchmp? literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png.meta b/StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png.meta new file mode 100644 index 000000000..8fd0ada93 --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_left_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: d7d721035cf74060886e2b3ffe3480fd +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: cc3a8a94050f4ab48bad01fe37bbc2c2 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_right_black.png b/StandardAssets/Textures/OculusControllersTouch_right_black.png new file mode 100644 index 0000000000000000000000000000000000000000..775923d90299842521e0d0892d07a57a5ef4eb4d GIT binary patch literal 371462 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

MR!5yaHrr7s~hue><`{$@b?Xxs-S+!pxT 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 z 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

Lz>Y=Bg!{W>TvY}qlm>6 z&>~0e29+Cn7VFhNEOe*=eE}HhhuDy?<)**uY4+H0G+M+rF~prH>(_Z0Y~9a3Cv%3| z(3Wr+^)=ZQwxhrk=(qA1arqwMp{po;;I1|3{1zi&Uw;9Ckz_oWaagN~eaNSZedrO| zI;;&4fhUkt8q?7s4kF|#R6#tth`C}7hb!s*Ch*^7*meI7%Z6B?>1=pDdsvD#3=JNfuS1hRXb6s%={o;V&)^tA=J_H1W-S-vouKH3sN=W)bd^)p`O(ZG+ z_4wC^dm?dpmyArwVd)@DlOJ_3de=U;NMt-WqIzbg5Ua<~4Qo@FL03E>l&g>F(E=;< z$|{&>sRJN8eQS5Wf-5kUE+8>L#!ClHEWQ&$jX5NsQER=QvEpq{<=qwli2-_}LB6oC zs(s_gRlwv0Fa$0T66N3*B6202LU0!3ZDso&S3Iuv{9ghRF7!Ho<4$T+emaL5S7jh} zUvTA?fm8_j(C+02Q2~mYf+C->KXS4647?wP0riQx4gq?;<^df6Gc$0S%niPwZQA+Eh=sOkMfk*G+lbeAn7AlwmYQxXnN4Q3gh)6jtv?@))FVz&I&`biQ!t2kq)(hvnwiDwB1CiPlw3jY&o%$^rN z8ns9asMHkDD6Z)f+rlC)XYc#47|Ce&`Fs;~e1Tt;X3TIEL);M$8guI8 z-jbWXQ(*RMcgi6`1m{A|)rS!?>M=;Z7U#Tn3Dz1L%^{(q7>v1s0h_1b_6Wv;4o}!R zFoCH)*|_g@_9kV0m>$Af&*hMy{Mc2uF6TxK$~(~8y<0BOEpkQ0?5RK6zR*FMTVy93 z9uAG(0h@t;ha*c*8k+PVlv)kq3+)w@8=Py4cB*SC4a>yTsXD zaxl{CNsGl#ouwFYFm5*v_)U?Md&Hy4VfR&YwockkZNax6D+cr;mJ15v->c?@w& zri+vg8l^{nCSEK6BqhqdG|9>`#-T$c@n%(-n3mk^3iD=r^W!eJzmtbwqM&2JOrZ6? zYFMjvDV8I&lxIl!HoQJN`g^Hi*RQkTkjsyYyv1%o|BtHcj)(gHDlhU(vcVat9>51s!JuGFO$_uhZKw+tjDKQLN@00lQvvHqmSiaH6Xt(iprH9F_J2c#$aQoWdX$Nq`?@Owg$ViucHF|@gZ*3GwtK8H* z(xUa<$KdTjW$EWc;RluVw< z`qAoa$6vor7{A*;t-LXvBpJyhj%tIQ?VvHrLJd|1W?tCW9!ToSczJ4mkqTf*`MU3G z1nI%x$li1Oh#+MGsirN`0h)-YJcqeX?zo|Ke>cpw9>VqVZq1(dNFb9uCpaerP^41A zx5}AkDP670ZsnaNVrkxO=dp9xDJkKwWph#@&HWcIrE;$)ExCOLabhYU=-*~q%sLoa-9rT2V=-1`kmiG9JFC&T;-io~Wa zs5@?1*x{e9EY8&=hm|;(PW(E&cT#td67`5{Z+xp z`0WGrTP-FieOfDHQ1AY(2-Vm6|I!hIt*0$Jnr$WpBSog$Nxx4>TpY{5R&4&EQ?MI9*@}Se!tR=!33BPj<`fN+#QQoo zNC*0r75?$^>!4@as^oUAn{7H09bj|Yd6KB(rA3tHB^D*O7xG7W$ek0A3ywk- z;jEekTCdV)J>E{RmgNgS_fp8Ll}jNmi?^37U}y8bX>z>+t~9xbGtZKseXk*@1SE24 zpn7}0x}iAA`Z68gfq@w1`kTe7zft%nWYfP|0O(6w2D@zxt&qO1_K)m%Q)f>BiIXj1 z9}ziKzpTxCio@4ikI%;H6&I!KhW4S$AS}E{JCc#~^BP+0RF#rQ!v_#R2-3N@hIi9` zQ1(Xo_cFsvW!dax6e6hzg&Tcb_%!C}EM8>UH?Gj4DsTQ%!q2&$8iR*;>Sb04H-ti} z2#NXWzz~vWr;Y4z`yMg&b4UO>sY7RUTe7bvkoDGbBrtC&_l{NF+#3ZmKICy$7@*R& zsNH|u|CP}wnPpQY_iW(+k#s~;afi-vhaXUoEccxXl4#co_ST)D+qZ9MQ?GgETT#xn zP2ZZ3eB^U3Movq=;|R3_Le}g&2x#|&!x(ek&@yWWz3FQ^->`}G9+ zZMqX=(UIj^2r$WwYCxjKWa3^N3Rs8|i7iU-lJdud=Pk=#^QO?kzQ!x@LTiV_J93aX z{Gvl`1r~K|^~jC_xMd0)Q@&T&2yrD|VVj-skzqGd9{Qy@8yDX{6uujkfYSEM5=5Lf zS18-A`Ow@nzVQVaW$tHizbV(SPdb8X<8@4&<9!Y_j@^EA|; zCzveIaZ?c1=@M8)>f~lhfypT--C$-Msx>i}kt1FYDm!n@lS;~jqSR!+LHIg9lzkYm zjl8;Q;fen_Z~b&5CFT^$|J7r#!e}pnPFKu4TPC`^X4Wn` zcca0D)>9?>>RiZ|tT&bNPN`6=+`gI&X(k6eo>b*AOL=2&?|1@?E15WyYIzstv7mA0 z^dGoYhu(u+p~+N*^cvHCJeh81>4AVOHP4p6Opu8!i(1F=ZPn@uz3@2(`y&GmJQ-#j z(RL+qr9a1O)1f$a_JxI&~iIQjD_{`~YBH58jOpzILT?D2v0DSvRmR`xV&aHA>#zEwJPG2;f1v=)+HBcXHMJAXEiK8kpI?Z6TKR*g-})XH zOO9lHGHXvYf)Wlw_)dWb+`k8)l~!A;5qOiOl+7n&W3^nhw8a284v6!qRABFlRFETw z9YOG77^mPnW$n9>3_7rG64zGKAHKw}HB3@gpP&rfwcEA8xeJ$Hj#}f2h9%70qQ4s| zMBB*tu4+HJf?Q*iZ~DxzFBhhCoKd(pVNLbN#FIk>i2T%hBs*e&#G)pRj`9||&!#p> zCIq%(`=g!ts7uax8 zt_bMStr!Zf7N_}n@pTD(magZd->v|$q2m)dFmf)*JMznl95ak&TfZ$wLB##TFGrAd zg+Dfzp_N$vLe^dW?5cTBeGQ`;AGFtnLHUo!tca@ia!EIld!=u|V?_}31PbCfsb4dm zCZBcVw-HRxIFA4tJWp(`HZ7_lNsX2_qz^oLvwSS*cna`?0S>hLK z&uR_?Cj}BG)jLRsqKkz z>*LrkaZ(<*t}*cA9kx+%HsWr3BPDv*9}1jef0aR_l6m~kbu(@~rtf+b3|q$(VtGq) z_eeASOk;fTwiRh%la71dwBj!s0@F?~2O+}sGWyxObD%#kZTjexl_5Hat0Zz&>mcmG z^nT_l9e6h_*#&vdvUFCJN4Qs2m9>J!#-x4v#WJl-+eLDf0i~&bJX{0CXQEK7G&Rqv z@tL7nIlVO6IXzE%k{q(`GbLc&fcbTSviU)=%y79KtqAKTWF1L?8(uG!Wr~Qe>=tVz zA2t>h%TerBZZIgrHjP;#!}zQp{Q4g4@UG)TQ6c>U{-X=m?^iUeEQSCwBr2bmPd&gQ_d0QYXMutM+0-`P_qpb3YnH5&>G-L#0Ae2{Wq{cZL|>2Q-h0;uT)LizeAtbHqHwo7a`+3EWV*m$rup@&`A?esVl%&Q z_I2Y)%i7OKb4a>hJo88Wg1u0<6=+t6(TL3Mv*s8){m>ftoGd(%PZpugY9STlREVTfpuy&V z@{Jl`u79@UlR`az80M3e%4)~_wj789&&Tn$3=%hZ{taJ1F{scSX_WABZk+n4Zl?Y1 zj2G0LZ~A2k1vp=Pmbl2ql6JdK;LbI$#)O2W5=fjX|F&j> z^^2vSLkTPQS_c!|d`Zcm*f&mCDPEeQ&)H{oJ-J<)1W(7mMuWoZo`# z4_8m4sp2RmJ~-Daa+;q(jHXNSx5;5DC#C&pl^{Nu1xPgCVxMgn7ndA?-GA!3QBYU= z+3npnK~Q+9vjX62O7#3WCtshdea~%5!poqZ4*(kR+Aae!66lvv?}sD@VKK$N*sm@F zvd`-9qL7jXPHRF3y0(wI-Q?9jupvZ}4s@e@he{mG>!w%t$XrPl5vdR^zH)1dRQo!- zvKcA3TKRmgeAnIdNLno5;a$(xL(_~LoHCD~WywF!sBfEYIUi~mA-fcnnX$(_prH96 zmqa2j5`#zKBn~gLwXI8v07@QqJQFas)&}XaX?N@* z%;`I-Z{eL=u4sf)@*Ei|z(Lj_j}9T2U*?M8c^@hhMvRE|{MLt`BIa58l9Bp%^noXtD;qTNu0+lLh*6I72GpVQAqk5eOcdXHyVCs@kjltcav4 z6ks`3uIS__dq+lv2?B)s75F*je(N-{P z&tw~h@(eek`;L7)U{PT_re>?NoYkpsG#7eQL zAGyTJ2D^W+r%G?74@7=rxS;zZ6*9(!mCWn(ES@JLg$-Yt=VHhYnNMPr|f+5Nf!V=&=oNaN~v2FKr%x2p4s@J*{Y*UQnQ z1GZU%P6IUmS1WCB(| ziMeP0_(HMZ2Z;!}%79HRO?y!CppNaxo6B=W>{O$;{F_es*RqptoF#fErX43fkgZC# z*@tU8E_Wg2?~U3)w~9EYK0TsCUMH!fJY2GIkD-0w)fbh~yLg+9OVMTf zZ*pb*P}1>ZQuMODapU;+XEL5Eg#o#vmD)Aa8ESHGa9*DZ3JMx0C;40t+1HkPhk}lB zSW(xrMe(p0aOCv8kf=CsD_PS0eGPxJnAC}ANzjioi3npt=M z{$w3CY29AJJ(xc%&1GPexOv#Q*2Vv|xy3Og#sUcxZrnZRKekK}wbyEDP4#RT5;Obf z+!FvQjUar-7e@Q@C*r2x(7U0u=)6Phn*&g1Q}`%Shd zY#wocpn;O<7Q_Rv^^R*|@%21PNRR##H*+k==;VJ#oiNZg)0^=vS@#t;pRoK{^P8Ed zPB=kIq&M2zPrGYz7;!E#g?*Gypk7oE)4_;n+Sbcg7@O)=lqQd#lK;seL+ea{mIwXn2>D)LLlB1JM%Cl0*K4nA8V%SuQ#eYwCJLxES z;l4^OnyKRtW9S}Aa1e<@e~msVk|c!{nD2T&Sl>U-aT802>+foQJc?eR271thHU^IE za@iN>9d4ZiJyUIZCJrqBp)|;)kk(A^lH#h;-1=_=du-vy>TxZC8Zj+LthP4KA@Hhw z-kX2S0%-voX}=fgFY%Win52C46_cRGd{qI|`%1eDBd`HIHAeCuu(_H*GO?z{2L&K^ zygwcvG0V$VbgEB^7AMMj``aF=64+mf7vsm0B#y%6qrBmL+))LA%yQKU0b8uc>v*+W zPVJ;uIJa#csAg+H(ny(lJQqqPMY4IXWOW1cE;6=i!NBs+E0wI{BysiQw)c_25!y6B zXu*+B>pna@ zSR#SKi@`3ZlhfN9+Cu?Q=T5|T2@t0k@X@}&Y0cbw)jhxPQb#*e1nFqAY#sdxu0FD%j0zXt&668-{mHTc)9n&ECfpd*a0*DvVoY zOXHJQLGY7*2OSKEmvXQe>7{;)+ce#%s*KX8%AYS*w(&0>$(p}9UA9%)wy`C%o+vgQ z;4bkma)arqHq{F45Xppw(=Xb-kCM^0ToaR@hV;LuiNB`d6x$np)AaXT!%6`Sa$ErV zlM2aI9X_XQ^5-l|0(__8k8NFaof0hch(6Xw|~&>V}E+FgX}zM>O}huM8=R)Bg*;frp=1HNxa4!iLR?9@BujIy^M^{(rpH~g8s3@~)BvCljNEvoGk zR$u{!v`K@%JU-)urUgvviyy*3sL>yWSwk}m1XSVB8h|_e5IQ=_P&{f@5}r*% z*x4346R%B=`Z+FSkSf!j*?|90HjZ3e?Kn|WB}ZS(snp4 zCKhvujqOUgGRrcBCf#VZYCB7qxt$fv5Z}zDL|B)ak$&+R9hR3#Kn)V*Vc4k zev`hA%D^N%+5d&_vCpyiXB4AxLUqoFKpPRNR|MOiMzJwfUjpXt{CsOJLM&H0&*HK2 z0`9^5!+Z1B&x>{XguO&!TH2In^eJ#m1vZu^Ic$(5@#yFp7N=G0-j zSPyLDmTB}tviZC(i?RL%bJ)S;ccR)EL(W|=Lm%jO$*E-`2!zgo5F#=BYlKbt`vJiL1F zIGD*M$QVvk|Dh7x=rz5qx9g9?ct!9*LTH@*X(jeougK;sS*xdf zGdM@L%Iq#(jw?1o1D5Q8N;_AY$xGKHo3E}e&r~V*6%sP@?7(A_n8u7Akptj^fuv0C z3>v{HaDT)CrW3a+41duP|6roJkkWU$GNwo`L;r8f7BF~51$CZJks?mIiyO8x%!sdY#*kH zk07;^wJ7|n`mHVCS45_E7X4PnlP6DJ<1gVOt#zN@ZSd4l8$#&36<*fvxWcz~J704z z*58m;a|mLA*gk1JPunkw{0FRHIRQ$FmyNI&8op`rtdgs=juK-&CP~k z=bk2<+N%tc;QQH`R(N))d2+Tq`43L{N~V$EcBBxU?fFE6i$0WU9GwDDtS zUq}Xg^y2OU%PX#+zPacs6M)&S9a9M^i}=^w((-w)g{S(zcv~hY{iPJJ*mQ1QTGXLBD9vvdU%x6 ztjQ#C$m|mV&Ct~0iSl2XuEVCH$>ogj2jDNPsj8uYXE6dX%p-J137P&VWJOqJE~9c1 z;*b6_a6i|)_N;bqH0`gSzp%YzF(d?ffVIPV==IC(FJt=P^%It`e2T}DbfoB3t08l- z4grjq;N#{EMntLi@u)<$?CCRSwoSi4-gWqb6Ts|+vDOmAqFWa4x$~@bH|!!pX&%0V zK->S0D6iZnp3p=^R1b^o<{ZhPvh&(P3)-dg*XpYNz$OznM{T}p1EG!s;e1J!TG-h# zcF$FJw7X3|_T$epjX=s>;MoB&9+;OQ>k$9}U1U6qCqBdKd@>7m`y(NnB zJ;$i`tsC!QSr!vIbigM24lI6R*RZb?t{vAn;@nH~n_wX3;m;CgShFJ);7FqQ}2j$Mc5PNIYu$3xr5#4Pl>FjBX`p zSNL#dj^%`GI$dw5GI}$@zoPS25AXF+>$zNv_GRfPkV&;8u=V)&{a0R2UPp}PD_UqxY<2{E zkcaz^fp2qaTt*a2EkXO;gw6A^WgXFH6+k)&`Q#DOUzL8V;_dLw#6XWRR&kTZLqZ66 z=C}*+o3K!;UbK#T9hQ0!-DNns#<#F<&vyPO1|f0wof9MfRUjSyNKC^A-zQTv6%(BB zdGL*Sl&nX1inXY{5nI&Kme_9fUs+RW06H9|`|yc2 zB7aCGPiT7~d|<~6iZNZ|(>j^QKqEu7aaO0kz0&k#xVeLU$`_U2cXav_RTR}vIi~cU zA45vwrkkl@zn^0q3fmb|c=oBf?;?LgsHv%XsJERV?w0bN4y%bQ*$tB>?IWCUiMzu! z1!xGx?p^k{;lEnjW!p^}t%kw~?jiuVlfbZHJ@e)UtB^yNb4u>@rt9@eqSS**jE^__ zwd#G15e>H3cM60c`ui1Qtg!IOyfvMj?j1tXlv&w0ioF~!E%3Qe?aXWkw3nf?{!AXU_uJ62cqtg zNf*&! zaoRiI^I^?&z3;V#MCiF;q5+*3Kog0`^au@)M<1j;(9T5ta6G4z3dFRqe)FgG0(1_D zB+20WKtl_v>uQ~LhnIdRb1vk|l*-RM|IULFu<-+1VfNdciw>I-5;NrV>-JQTm<^9; z{{92^_@`L{y?gmd5J~&uEq@_tMSGo;V%dE7KH?pv*ziRv!2G)E1k(q}^m-btjP5I% zv~-fqZCUKCC{Xx`wF>SwS#-Rh2Qz6b-vds);qKz=QwlgUt<|T&Jw+PlW%hGy>gp<2+9WZ7*7l= zlVbMj@0dMCPhEGS@~Wll%*!KgGG8`)t#a?;9Pfxa@4-mJU@r0~A_*oTs>@8@v{-a? zA%l!`#APq{{gVGnH2{S>%naNQhVhWp8Hk#0r~VOOxStS2_Hkcut!F@zaXRk%kd6XT z*alF2C%7%&I)CxLg4x$@B&fIM$xcq|Wdx5#5$rQ{=UckyoVW+5lEk{B;ELYSyHNsK zDiHk9xW%D|KbI~Py6*f6ydxR{%p>V;xBd;DL8dbR@9$I{&6G>Dbu^6Aay4sRo7N?3 z{v8vq!!R<_xb~CYb-lWUOL)yAFOPgh??3jzuVVc(y?Wlj0F%D$9rbr|PLO?k+xZ;G@x0%=bR^Ex0DqZWX|+3w zjbL$%%kq{mD_g5l;s!P`TJqn?e3GAk8?!t&ki8!v-!w$ zvwOYg&FUMkGB7X%L$DDLcF)#NIY4%a$!j?)jD)Zy2;W&XyX|re|0eJS6Jq%fx3@Qu z*YeD_S%FIoYWx4|@fE{9ShoH;gw-Zm9uh~N)qca?6>@lJXJ25Jg)3W_eM!HnJ$_>Us2?-gT-4I(g-}4 zdw39$@Oi=|@XfUhs{ay(E{s%U%T^U^y?rY$Kg;axGx1ZBgS=1MY=cSZe&)~4+CcF` z@||9=UjE`4nl?We(;4Q;JqSBLnC4OECP>-?s9^bUk!lF46#?1scdPy$sm{Jd{b zOnHF;6~?BtrPjuTLmpuMj%S%b;; zvupVs^GNzYG<(nOitA{G2@j+{et9UXG5N-U9K?3J4UuXMzNarNufBvFapow(974hc z9SDOrov#pyw1O+QU;Tj~Njd)gp6ZhEbL2wh-2pETz>Oa{`g>$fPH)<&WOR%C!LBX) z+={oSGjUn_7wOGUr7Sr-GK({Mbj>J%AlNY>*IpV(p~&=wcH4}A=?lo?Nh~lpH5h>1 zjPbzoAIH_Kwm(<9^+EjPn^@W2teM$J_A`R7cr3s74R$!Vxx0go8%z?*rb2kU7T{?WC3n?_32bt!(td;ax7J59Xyn^jG3cbmuo92uJozd!~d zRUUwbKP9l2IWOazR$gsDl|=6%lkMiE)c$`4OgcTF#?BHAT}}O0WACkRR+S8IP1|e- z&$dYpCgiLZulIB%{?=ZQ9Sy++T*VkN)6DQT@3oU2)2OypUiM|mBcSQ2OT)DmBFg{`CpC?(zx;UsqhA-2 z;i7M`!$m{W9hPbK-z6+}o>T#1qIEfA=1p!exxXv(YH!aR3s+p0j#LkxeWyg{h`{#n0pX%{55K^R)cU<;m`1b|xXwwQ;?6@Q9T{=v zzoE>JhgR$C&#_po!?fnswtc=OV^R=*$46>lGPc6RzylT1b=O9q>ZtlFjA^90r^)?aO;`=f?|!cjVzE9x zQLB%*GUsi`pKWgdjAU}Be<9v7dt-LLW#Z#c=UVjWe$|z#=J3bo2jnK6Q<%dPjfr5Q zRf6ZjcRyozc+_wUT+4yucE^G^=&zkm>l;p<(Bnxx$BG$2Hr@2qP%8`jiQnCNSSw|Z z!X3b$CD~kHtWxm$Oxy;O?LIyJts&EVi%gh8M0%m5p~<}*`(8MoG(=^X#FEW!EEm?z)jR$y<8z`8wLd57yxrBb+kj%w{qt|oB1!Q~+*kPB0-Dg*t zg0I(neHGMMM4imm!hGh}?MME~)w<$?ftSCZi@MgdF_F;x*@|gjjhzzG`BJwj#)}Na(#6xfSuBh@xv45Hb1`->En@Qa+LzLp3M& zSK^Q>e1_kwuWKdXM&IRA+lpW^_-#V>ru1gCZ(Y9s>46OdWHk7>uuMAV`UO5+Lqlfx zVqDPN1W8q~!k7XFppDy0C#UN6Bug4uw~gyQ3&B~dW~nVBQ%=K-7jfK%tFdkl9^1WT z$y|WMOi%;t2$o1n`G6;iuFvSs-ThYxUE+diyb@yfFY_tqM_>z4$L#UCsIujxQPN61;S&0*eve&L|c!{ zFIp#-V2G)_48hr4)$*GK-%y%K`w5Sy$6BC69`-MN!)_k=Bbk;5x^LVSJ^$_#?Tz`L zb1)454{wW%a{>J(I>T`OK@RPBqJesnqhgLV$W#XD=2|q0RG{7Zc`bg4ctWT?5Ix2G zV2|SCZYSq#7zuEOeU|hhtHCFWu$kWUDSC0RAnhK}S+U3z0UV3wPG^xr)UHqi@ZslI zLyb};1aX8z)mjt&VU+n0%K6WzgHTSxzS6N*w_fLdw5myQ%hmNJVg3?+DwrIis1o&F zQoQp#iplY2gREIf%V+?0UM|6HIHyil;WyeV_#}cUfHxoddZRy z^oHPjd9xPqNVxoN(I}yL#TQSEj&wWcvC1!mfHLg~l*_)Biyv-zhUo@_GOIJsxf*T% zWlE?pxN|1(>l;sa@`euJi}u>UXx7GF^1QcI(Ps%Kdu^Mu_@E7GTA9_%FO|_Yu1@+Q zWAw#6!A63&v=FMHk-C8(uVITHunt-@riaQCf1s z$n8t3pG)8EYfaw`=e^V$It_ZRAuyu$uc?$2aeS^}g$Z^Clts1imCKgcV&sEW=Tupg zMihfI;U)^le-I#&QlL6nH{7(qZaUB?p~|`AT73+&HJ^*^`K#BGE+Oh_RBK&4y?@=+ zDi<3O98Pw76hIXED@)8#xV3!)6^VJ*mE}85Q(s;8t1c4MFBpA~zNYhN$|d4nuV)4_ zyJyOPLKgZDAB~R;i%d(V;#)OUM8Wr0OoU^&7ca@?H;jAWjC^!tNC64MQcMTyI^eAw zWA7qP?Kd8ZG}`4===;!stmhhU+GS)P{vdr@udz#+%lpd)br8GsT{QE-#xI7dK~Ws) zRAH`sBibGjf+h7!283@qzPCcer081EJp2*_lJKnslyD9Z9FhLv68Se^7`WV0tZzJ6 zj4+^m5i|vgzwVk+|F!hT?O#5erU$K;Pb>8!-4f8^#}P=JMZTU6spYTCBYb{-N5R>*HS7eS3t;1bUF3_tXq7o@-Qt@6t!WHupjoXk(T5E>9= zKY2(p94|xWhvG7USWeh=SPT;F6NwKjpL))V){z*6+2dPpiIe$xXXv||^qbSze`hI3G_mUDAEx}pY+S;CR+k9`kv9F;-0n)q$PU9rRG+k2bsl zt!^?`z=~cCkk3(6x+QyMUgpe0n`th?mgE~@`5W8afZ*oi#VcxRYL`JcEUkkmsdTg&2LUCdTKrjDVDd(}XOJK4Urct9$wz?$B6d)~ z2&c4|EU(cly3#1(0*iCPd&ViSpLb>f=Yat#cqebCN8Iyijf9sbStp`NYEA?lbBqUQGmU=Ad%optVbLoP9dEH?M&>X>oPSVl$&z@?In?;-rx?!hJ8Z~kL_UEFLTd33^oI!H;7u5k3jcho2>EO_&^=?QM zm6#H_76-B-<7Hk-AnCisrTblyzVm$q=m>?!;1wnzb-KwK!9VfkxKm+5?Y@7+R1!3c z7mqK}5{cS0xnXJ6GEzdSFd@tdw;vJ|jEiBSvQOl$d}}eh<;`-aYV<2I16tn5X!CWQ z^})C41pY}$YggBE45j-)1FN6PHBG4ex1+^4A=rEfV0B>WxD>uq5yxxzcmewb<=hmT zSNs4Lo^B6JEG00SCR#LB3(~#v5i~s_z1`Ae+k8l}x=y(~CC{|bAXESTEOpTEo%`Wv zd3j^u*-_XzFyJwvczCZgqU|hoX{j?U^gMQ#4}%JDU|Jwd>KU_9@Vr{dL>6sq4ng|W z*WVLUuIob~a`1A2ogsMzq|daQlw?|5JVj6H!%MldJRBtg^4`Gz008R=%i-uEJFf0u zLUU)(DXO%hZPvIRTBC-#+oQ;cW{ zjWari3>qM8M%^f}6&skKhXk=R;1vM;6K=W_-wf9iBBn}?%&>O*HIlBtSrN+beEsv_ zuY@S@qgc28DV5m*8;c2WP}+<-A>_lF6V0%!F27EVu1f^lr(bmQ-wXXfAX0Ljl#|@W zTI0{P4(c@CDOJ+jKs|+rL1lwXQtFc+{2l~n0unR&hjqQbeQL2%HweTicAdxC7U&O3 z$F-*J(v2ZExLt9~`&SrtelM1os(WJV6n%H6yI}U!g&p4E1OQ{3-1oWo_nDq?u8GrH zb*@j5OSWzn8R&K)4{C$?z02RAKbLM*89;#(A?J5+z28~y_-n0#xA=;3-I|)$3ha4Ouek z9vCUt!>@<1>m5j-A@Ap|FclfHwMAUk1}Sy76Z~GYR3wS0^&ZtNLy5#<=YPTfcq9o*JnN>m>+!|C(mzCSJk#>P95?j`Lif*alGU ziWxO=w9ZHMT&^U8GF@{H9tv&0DH<<@^LL(m3uvGy$5<^@T=$TDss0Pqdy{xP*RiB2 zqDjSGaakg{co)+%|5c^^0Hb&*-_)&5gZ7c=)?0cmm)yzb1)1EEK+=TGbV>E{pQYsq ze?hg)5xq;B4m#e|3fshuf%}v0$9}eJSZV@erjhb_Nnjx-b3u-+V3?cw z^HtcE@4X?8W;CB-j}0d2`%x(8o~}GX!JByU@3J+J=9+b0-&-WJuQ_bl?P@x6cWPd) z^!DWJ!+v4Cfn~Rl)8f0~ybfpUoK-vQlzvorrIXkIh491_}a-e?N=sC z*cvOa8^MY;se8*63K|`jZ_7Bl?66h=JqW?t<@T;}6TLHHyi0YeiA`q>M{0|QSNn^3 zditEnllT|9*OhNbx|pE!bc2F|qBmbDP~^_?5B7|GdCVolEsT6MgMKnJ%fQ(Gg($oV zN^wW{lUG3A_XGwI)AYJO*J!$A8i8WTXv*5fLuU+yPn{mzy^qWUcKMDC?t~Ij4T#meBj+# zW{S3zbEe%7_V@8Ay!$6x2_HXPzQPH=rAP_tXV>Xvwz74OkKA2i3HzH9}#z!@8s4Me3anImMAEDB_EskGH{%K9Ltq-P8?2mr8|3`FYd;1bf zF0E&}$D%#~?S5?Lm7CnNpahChXPV7%S=bFKf{h_}G4wSG=C5~@!;mkLEJ)K~PAKtS zGPF-kNB9rcMLrk{UC*60zP5vQPV$6zKe?YGmXf+^Hlo?{9NfOt7S_m3RmtW|9NC+< zZD~VZ#=*U)gDoT^sq45BFq3C=Zky4q7|=`$c$8s;gOGj2!=ymypK8~S#T{B__xpPK zCu{Qdxllj+@~iMJ+ok(t&LKN;m?$L9LbRIXv{=T>^M{$gS3)-G!`mJ1O&Ukzbc*w2 zGe%q=v2)lt36m^?eHSeX(%z#YXts|R$~ZWa+Xv4@wo;zgc`v+(zDWIL*oyW5^B}q) zDYy9?xP*4*UGL4BmmNmef&HmuvLHvsV14+0GAUkxokWP5)g^%vc{-Qma{AVa5;!6+ zzkziW`sK!nI`e5RPi1aIH zH|nsxUzuVoq%Io}j9^aUAN719Tg7*$ni>deJeIP>L*uy9|KxT+8pg?BUA;K#HX%g8 z%F4|*rk;W9zC6FmG$_i&pig)8^!%yy7>f5hkAtO-pT9_sWcRIpSu#`S`8CkdRr_ve zo#c}`KV;UfcLkN}@Sk~gw9#-_rhW|7k&jU8&br_Udox6{&U}!`ty_0j_n*Fzvr)o~ z+k*hc$N2_hf36jta7W8BwJdoIIF4e@|^>)kVfP zFCkW-AQ-M6N`7ZV9W!gUm8^h|IhRvV8lk_)?(%wj7s>S@yBvgsDb}>xK_~!uY@gUO z_A!l&5sw93qK#MXcxWJ(2aqg-wuQEw7xs*zov=)gfD`EYKMe6CG%jEltbIN zN@$14mSDvU$wW(CyyFZcTa-56K*^=-XO%&j>;u)L*XX#XJKHY7iCoKNP1uejX-Al<&O;8>`^ z=QXIM?yck&X&207xJ~3VXx!-Pt)^qxRsQPgB%Mo&-eo3x!#_?e83jM$e!L@w-l4%j z-iqeN%b0KS?IU@1L<1*ZsVE|1jzO-Mw2)!Ax_v~u8;DS`Z{_1)TuKR0WSm%DHF6-S z={We>oO>^5BTe}#$tgy5)o5fANlk64@`a27fFW6H?*e>=XdApCgfX<~bdQekDkX@W zKKkO~7&}}uWHwN?6&d3ZYAU4@I`loN^9UW{*Qpg5t-ePQx8rTdVvG|A5ZO2Euy!(b zU9_&*H73IGZze_#s$bRmGSVN_)&SV;yz;S8I`SyzKNG_UxE9O#;4tw*Z?o77)JJTZb0wv)sc{I?&DzSK|Bn~}Kp1*Is zbG+@_Q#wL9V*Fj%5pCTrN(Fz=oE0AHjG|@G!V=+&g5cZ}FE^g3Kc(#AWzytkPncM0 zFdl8;VN$)NB)GvVQ&#%&RI1GP+T}&8_x!{4#NpR1g3F|vS$W&x%73I?2m0~COD8b` z`Z_gISZ|@?^82HiQTK0#eXPFmtj3|c)A9FyZ1o;4vN^DA^M)boE}(GFtA)tUzgh|y zO^AI!;FK*rp1F~`C(PWf$AwYcS7Y%rc6~O(`~qA&!kh<<`?zSn*W7)I{|i1iV(L#z zNkW8m)n);`!;o;oWi^X;BW()at6okO3BD#1zm*B)kz4Gp1A}ay|B-%mu*c>hoAg&c zSJ)KT?8oD}&YlqI*AZBJgj`_Bv3S-919bmP5eE;CJUSp=GdZ!dEYq~#NS*Ym<(}YC zCiCF(tEXF6Lz~8!r(CgQY$3S-CJR4x=Y|fOY8-yPi?AuZcs3r<7i2yAjpH5LdTZwgXZT>0|m-I*<4K`%mhEA}0py;N)&nx zW4{z_()Q{nk-js_)F_{BD-Cg5&nkP;)FJeNj8cM4Sj|asF#{TjBRO9X7E&^#*IRwO z%bS{uNip8em4UwxoafC>BRw1w|L|s3y=Yk~v}fYPw)6z>;K*-`4H{P+wS}9-qH`>m z%_}MPG$1>iD_%Z3Yt=^mIbNy{={?t9M2+?XCHT;qmbJpMDTSp!n-sxs6pCW` zyBPQJHw)=sJG6Z(!zE7s26yAHi`OTm+`HzTTRJ8Pa^9Cd4a;;Fr*VcVy>n!gh-`(>^OzL(-|`iPF-% zCNaZ4o8_w7vQOR57$yt)Ch3u_Q+lPdMi@VV0Hlg2OC2iYQ~?#e!feqQfVM5sEeVcX)# zrfVG6jB74CJ_V4WS-|oU-Cpee&aMVqGo6*8))XS1VKWiQ6!~H zKw<<$N=XIjQba(cq+tXll#mvYQo0f8R6sbS3OXwN(Ay$Ubv+i}^S zvRg;y5>`IB^}KPq-*S^6KlSF7S6ZSU_Z}P1s;o67I)oSM$|p-sVZhsqu0I|qv10bI z{D#9>TtMfUg=}#c=(qB;36en3|I|&TmlWhNUpl+5{BlF`ZE{2GI=c&H~+n>^KaO+$X}z!;@EeD}>2^=0Yh^PQ?1N9%K1nEVSUB2AP9hFJPSI{s%>6 z)79>Lsw|2apC?cQmq8P*!pS^ysB?Cm@I|}FyG0Z63eKOqZytWM6pW-9mggNh1DF=& zx?D)LdMEA{!2RA-UPJ51jR>u{!sagz`_)SVDnk7U#$=Z-76xPkgW(r8QW zoE^?D)rMAYhTCkA+#?5k%rWaKgi6!Goy@ae2}kq;F_w5O!~hMEcO?yDH7X{WNF~z@ zhXIHj6;?oK=Xrh>>d1(S8* zkNHLHgRIvEfkmJ2`*b&aist!Wti`JYIJz>2mFn*4F4HHs?n~O3#%#T-LUvgS?JDo; zyQ9W8uMS${?^YV2G@t7arwY|StG`R+Z}1}cMe76VMIDhUe%b80BZm$8mB2-eCvG5m z>UJMe9mKN%jhcw<)vf1DJDlyrLgI*-)=66fBvyRugQ4Z`(`)iRpH9u6AM?6RGK$s) zWD4W;E%ekkv7yNKX*>1H0ROpOhux{@a1rgjCjcCIZloe{>)mjbj2Jm4B~tG$9rz*GSsKysO;(kI%j(%-Kl+;{p=A)oyp{8 zy^XySAFagP$g^cwx&G@Im0>|plPZbl>YzH;#2hbwXC!*k?ejrm&fxsVJ|ZiDvm~uN z-gqb-cHRzumjf%>5h3mCMYhezQaff2|0BVQfQ}xn1Z#86N^&`{7JE7ow(aI|C%eun z`-Kev{;$T~GMK{CKv{HR_ocyv-avH}S8TjxbLct^(E2~Y7o8o> z&w0T0^N~2}uJNn@%<<(_QpM?@>KGY80sosfAG=O!mEC9 zw=~LooVs*8AwS0~;tcJK5>>WzwN^)5c6tf0$e<*(^v-uZ+4s)fFX+!T<%`CGYt%9y z?KfcM+~n~CoQ>X0a+1S}(V$fgR+yDg)XwRRX<1|G{HNl*Wy9Pp9j<0G%klWGd-(@d zT|SnMuU3La9`D0i+ASpWOr%>|yKEfF`fhsWS~rC1yFNY8XLM3xVI%=1@cw2GfLe_| z@1b6((nX|IgK#b@udr|l1|Xi@$z3u{ROwT^_NhWz@ipRg8<^*KKdnv!cFKs_i?9e&OQ-sILC(1zJeyj1eRjNmxtXCE6> zj?+1jgw)XewR+x&vy2id{mZ9jgqt<@ZRyYRc>;3H)?ojBhvBiW*$@$kwOLsT!2Gx$i2~XjT9N@4#*z7e z0Vg^QU9O-|!u6>zlOGLS-=@roQCAgsZM+`|19?r;rE|1 z_o%rCmWqh#IR9elH6L-)&aF)ITI3(_)tM3QliMw?-l4&#ORX{mtkt6dwk-rc2#VW- zs3km0icBd~zjl1<{er^Kvgd$?t8Orw)k^>1Jr3YM`H29=?vYN9z6Esp+m|KCCpbsT z@?&|U+ll+t%;g7_OqG%eQFq|W*6ACb1$=L6%*U>}?0+P#dXMBH4hCK>vVd?^X)>QQ zbnWz;?R_Dy#4XLhMLX?#yRkWo?jMTgbGiox56&@FULh7s@op%hJ+*%u&+W(!2FDH# zelMCAe+o5yI-#)HKVu~&<8sZWGbsd8y-2|2_AmnCYlIWLy9#ME`~44-~hkH37@8o7TTiMrjV9`7EjRnW7U ze#`BSb(403z=?TY7ZZ5oaH)Xwpmc6YDYY|3=flX91(9)WF%c0_F8rPg!r``RRd2xo zlXh!L5uHzM@DgL!0DNbax&?Hw*z;-Yvgw{^K3Wq|$Nu(s`1jfX>QAWV_i z@d^p(bD6l5+?Ey;Ow zsLeM_%bZWC$uJhIDg+6ovEL_`Dx6==H2^9y&ZW{ea^%jm>zSLQDKERS=L zOl_sp<|KwXkMLi#%hz_vV0BP=iOj+dd-m9!o^Z5esS&`3ENrl6 z6D%l?H|Ou`;Wn_RZ?@@gU&wMnk*X3VZ@V41f}Yprikq6sn4so#JCuQqc>46IAUVU} zxxz=-gv>C@FK-Kf`mh13_$c870vRpASjWHn_w`t}w2|DoQ;B+_9O?l&rGl)xIU>fW zrkgLIZo6`dm-SU3*Z8gVGg!7K(q1$+iN(#07Z33aFtUF6Ln;@sp&@H9O*YGmVn?9K z-~W9Gpd`GU$pcxb&I%cI@e_(2FR%3CLs@FNnP$bq1I2)HJq5m*>1+`C2mKOg#v*8t zm9&tosZ!b8_sMRb~vqj37c0C={4zfm;s`NVzgKrZ154Otf{rEG?<+VO5Hz#S2C+xz&1mVTz1X9bz+;H{ z{>YFpQ)r@EI`<~?4%*p5C;S9oyZ`;oJ;Hp+wJg^}_8t~KTIq_!c53j$0lboxSgFf} zS+h!z;jwcW9KZ6G_=s1CtNJQO&f`D!D&m&U#2sJc$GcPz&A5COXXB*pE+GLyR$J3Z z66EUs_%RO|=h}VjQ_3z>Ca9!u4)p$y(JBh9q~7yaEDbe^FbQn%1$mI0BlVZ(%d4ea8RS zswmhI_Cc@QB5nnmU0h;1{jqr<-SLA00!^7s6Bv4&>sf+!{21tGWa~!U`D8W?z z!kbbd?$t{(@lB?D^f^or;Hi;&A58aFCb|z79E{Ab705k11a6L?8-Rxx(&y0qmT%m2O}P6OQcTI*C!w6&dJJ%qf@^aIEUtA5KT(({Y-KB&e~HvBtOs^@s*a%vsYn#x1jHW-_!v{(s~;34>o^Lb-4fj*5kXQZ%@U8BEE6i zi%Dm+87#i}H^u~c}NsxW-#&HQR==bdZI&p^hX;PjDrtSAw2*8T_uFDmLTPq7o zV}ks6vr$BJuu(3~0+DT%LtZwNAmr`s?cd(63gITKjWLQ!p1VG%IECEUSp1ZxICMpn z?6-_NzB`h2=LPf~$gNe95B$?)-bR+*Gc;tl%W;nM+Pd~T71m1+1J5w*fGiz0?S@cb zQDPbtI!vx@H*Q=L%QN|kMRI7UA>y^we?oPy1LmTmoR^q1*OAEFmM(*#2K>X0N`D-O zFt-@N-<6|p`2aSC~w-9HA4i7LmA71ZD8r2*2=!yrI4*SU#->3anOIKHF`~%ZwZ+}K#_5|0d0wK^cz^bMk+C{v4Ii~t@P^b5w-+@^z?%>XOF); z3|eu2R9blf<9L7lzWzGSkbtZ#`L3@RVOs0MQb(;1)l`|6uHrESSPGTLO3YImjeb&M zF5p}1{}L=qWsL^-Yyeo6rDAzLF-8m-x@@;UGi*V3ywtz1hl|bt!Pk=N8{8|`3!9BV zl`JFiQj1F{D;Gp)qzEv->a~|*doB;k5+a6uRl#Ni3g8t88MB3Zm7E0)A<*%_ljF$X zzg4=TT9#jt2h@u}25~O=9eE)>KnFA1n;2P=BRVVayev^ zs>QK1JTijPsH-%U_vCZ7uU4#s_x_jh0ifYa8H4n5AgMD=%FR@Z(NYCUO93IfGut`K zC2e6V1**`dpR@|BskW^L7rG$T_ER?swqx8qiqpm*xf#IaP#xJHzSwou;jq=~$!&YQ zWxs4o-d>?cUYhk(wf0H2T7Y8f=D?2dn;m>&~Vp0If4WvfL)#!U6JduXDGWvb5^JW7p`lR z0eJe)$EabW=RmBSz42Gv^|zM!ZBqy4dyjdgii_KM#@|Xc>s3&5V(;?p<|VAD&P*jn z4A;vBoTs8v05!cX0r`^HkiVa`U-`0S16!5xDWLu+_lEjIW4O&0_PZg3w10@_% zQmb|(d1Z&HisgRGisQROnNibRqg$zWQ-OS!5u9xP=w{fqTUF~N#6u2Mqe{01PzWTf z{MtgHy{LPl+5YK*{)P4;F}zhLTu6une(w$LjC<%`y(2G3AbVPuG+i!h6OaG_!3E21 zSf=evaK@d@%ptxfi=5;9Ov3f|nLfG)vJpam=rr;@gN?nJ;$*vZ)YCQCEb*aA3HfX` zjP>CqZP2xA!=iMAkcep7>VeaYmE}i2Hwj7SW>Y@O8TTD~kN9&SX-cc)KClN!g2ly`B=rKIxHxC5RmBO^+u4M&f4p;J1}T`f}us{bAY226uc#yNy4q9;!-5T zblCdoyI$RV#Xd7~+l(u!>D5eg)qZqtWA|OCoe!u_X z#(zj?P-O?PlLE{8c0lMqQ+k^oSaa4n-JO#0+|0J6Qmii4w48ROH+Y=*;#-%s*dv%p z>)OiuBtU7N2-{l5%FH>q205>GY<=e{YDupEnJb*>Arh zN)t@o?MNItC4F9j>?M;9>TK1Q0f4V8>c=7J;u>zkjy#cXtM#FAAQ1`%@j5Q)k{V0g z0RbOEg0^!LMkk|8UetX#I#_KDC3Cv9`sU1uvAw_m7S0o=agn$C}q8| zjTtuCniydTMJ9=UfONuH$D_q%4PW`7kw$I!?K~p66DK>%WlB9xr|LDe7e+H^F9zyLS@IT%pNnAY)4y=6-v~-yp;9m4%47d(40Or7o374zR_k!;VG7 z@9U9)!3ZJZ-N{+RCe2MNIUdpqeRS=^g++i49efh7(MEgG$|u|{05Fgq7eouV=O2t2 z`G6eEal!@!(HJ(5UzCS`sF%NRrK6E#?=#j7rsdm4q7;&!e3bD#e_4QlqxG3^XQ$t; zZn}m`!^+Caggr)EOnB2h61|_S<~DKDZ*0lmVb!d?<}p*B>+=(ZY`(O3gJ1D{iJa*A zpmczD$&-JPyT2qa_%B^kELB*Qks?+7_(c-C9u`@F+SQS}CaTFA>^E=GLY2OYIu?UB zFb>6qR@F6IAY*uWc|$-8lT&_zAO}y#{PE>j>R`Z|^)B@QFZ|~?wwtW7QoD_nKQD1- zaI~i1_Ad&7I%e%zf%$LZ-jGe#INC0imqbXMCj?0tTKb$5 zc19`eA94KjOQ(N#K&O0C%Ao%`a^P>a8IIT~`JHlm4?T$Py^g)`NEE>%0uMHG>e+uA zxtm4kO;AaA^eby#RBFKtLo4ROtC54!IbF6EAF{_3c|JY+j}yb`<&zr6nEvhH29QP) zY#m0Q!Z+4)yIrgK)^{bepP+*h1_0o;2|)}WGh3jCDrBB3gVG+u)gM&=NeexXC&v-^ zlL8_9z9jUr>T8j8kG@ezeguSj!DpZCV*LZ5>T;$%E7oy_O>M3y>K;d3g9ea?S?F+W zSqd$$AUUBS2Ia(cCtld7TX6V}Vu+D?efjTQdwh4ad)2}2y-)RvTZiK(-l5(g1CpppPO5Fb(zzZX8| zk3GcV@e-YAd-8q2F9HW0U6~Bg6M*qJDfQDvDUes$Qi(kM1JzWnL;jFaC_>*gtjf%v zh1bapkgh^x7WFJ;{QUj#X7unyN4Qr4m~Cx1{c#x{_3d{o#X~j?vVnkJl!4FextM-A z?y~LI@?%l<`+DqHj80F!pnUZ5q5XGLJ`@cN&09tiBQ4BFbvtHkHCutHs*XnBAQdwC zCthKTYVuD^yfC9z1iWWQnYZI0hE!Ux=1l4jB}8hRBEDho*>`uNe)s(xNQ&WTSFWVZ z2xI;ai46h^c^9wO6QI^F%~+8kdUb;9d9r*RHSXzLtGB6A#ZgP|a_%`DF#Nbuu}|P^ z8-GQuOq`#^*FAuT5nWJ#2$;}r+H$Oo`D4tLM7tkrcX|WTSR~%x+cea9iure8addyU z+d=5&oxFeRHpw~&uTrOLu-~;1e!=X-^S4zz9 zQ+Ax>dS6k5H%a^3IukSW1OyN$x47O)REdme1wcyqZDrkfSI*--^ZR=2Ty?buy`Vnl zM6$jH-iSj{`VV2ILt=z4d1@fcd9m9u@2mT~eAo!Ll z?od}=f4W~OTpLg5qyhgw7X=O>$fGkEMoA33B;s4E(}5$+IQ2MNUMOZ?4xq<((={IY znL1lDqiVe@W+=~eECrH4=<-xK2`X{cY5X>4pbqBHojE_`i<>33DxY(b|6{cf5L8I* z6ST@SbK9m$IOaR^yEH*UIAA~B9pUAExDWWM{caM~h1m@(WN@SrC5{1N`*R|ZlHLVtb)N_%by)M#_>GiD);IUfc> zhLt;ZrGq+_w4hq^a=kIHiTt=WAIzSnv}Vlx_CqjyEH#Mfd5QKc-48H=p%tY>6{j$!!0ZO$b(|tet8iR})<{rk zsn^H1{yu2A4XM;`N{DDI)IRZY`BRL*!LJ8`1c8&N%66_`~BUA8wbU*dNFI_mULUj z`NE3iE1p|b(oIXEAc2B4s;P|;_*F_mo4_%I#yFsv14@@*EWZnE-IU7N(vZ`YUZVe) zD$qF$G1V`}TPOLR%J}xvDgZNEofRA@XL1E7@EyaRthY3S7N@$0SGmm9B+nD z2_w&h@!<~cj08t?`urCdsF@OD>y9mVkqSes^;yY4*d8i1^6qmh>-fg7gn>jfk6r_ZQ>@5G=wDxydjqP4~2%_=V!68uXKkbc$#VOF|xznwbB{R zuL$fM+-xG~c%NSEaz6x`7wPHt2weD-?(T6Pgri>X!HCT)FOj(dsUZWX+3(j3bsaEA z$RNq211!P-`4aNvT#o> zA~@~8ss%DYHLIV#Hi2@~bT^aLxbs8;Gi{{zeF>cx4nR;(D0iMjx%EfxYf}}A4A=~p zWp%koo_WF&Wl`IbTbo^_@T*0vJU5dItHgCQu{iE#&P%jJ52F{;qNGV}2>!GRF`#3+ z5Z45s;9$)BwO-of@GD(yDNL>~XmD@28xX*v=GI!BE_uiBMK7>lYIVI1ePx8|)S<2O z{G{q2*3I|y zZB~}*UVsfLOBg66sU22I$7hP8R36$Lv}c8EZcGxiR*q|jjD5Rip7N~c?wyYxIQ{9{K;Y#LQvmYBssnDdv4BQLDv2su z*Py&!aDJbGb}52W&qnk|Y*JHUTi4uMWd)4XSZVJTkr6rPkkU(sLq18jl!i|$CU;C! zo@JP_%-$JajB{OH1VNC^bn!JZ9 zlJ49a2(3iJ@V2Ei3cxz^?%^F_gmkZpiHW%ak_K!jaMMIwT^iIifn03KKn$1f?isR| zj7zk^{uHW2Xad?F18o*V4;c4B%%LvG1N)TZ#zvba@z3Zq{9-~ReI$Vp3?BR*U(C(U zk6S)jZTaH{ND6Dj;ZJfTI5;pUXiDZC==hf3C{vwk)-vrD`jmZ1vXz??Z$=*^ z!cPc5p6;<5+!SfdiyOsPCYf$lV(yIkexDSwsbBJpbORxqu==@hq)SrkerdH- zCg5%T88JMTST(kL4Oj3H?7hCvHcIkMt!ZKV9PSMx;`5%OG2fR$fIrnXBqQi2rD+pA zUAA&LglXiuzia+ly=*Nn9zH|PYuq%^A8$mNmR1L^O4Q%>?pU4YLFfGaeH=Xsl&{RH zsd~YE&edgCKU^XCem9j%rwr7~_(Al7W$x^L{LUpzY>s&5S$rVE6YUlAUDIyD3_BB? zQfgr{<_k2e=U(p44(HdX_g)Ryz5J1L7F{~v@8fXM&>iQLLZpz-`A#5a2=o-c%9 z?&`Wu&WGV}p@)z?J@eDPgA@h`s=NQyJoFKi)4p?2S$x$^bz)P&9Ql>wSWX^a59KBB z00p!@t9>Eo+2ce@OgrF|c^A5DQ>#i}n7134xw`aI;EZI>i@i<2=E9q~1t9E5(0V3z z!uD=C^OlS4MF_qC+TB)upOU1fp*d9BA4KVMRtB#eaNv}9)Y$9BAF+;p>!BkJ1cMCO zQn!3&C{lMYHq*9^HfSZ0?l(Z%0nC4WDMf=ySBM?Uo}y^P$M*(~1D!s#Ad_EglaM92VqUa}k%I+o09nd;>O7+;g(tCUsKIsM(h8?K+5Sfzn<;t4rHgv4k)) zKibX3_@*TzWIN-O? zUY)kuvO@?PH&pvu16%V0&1Cw3c)DxDw?PxwpKlF2n%@){m0v!Gtl@*3}1?Xg*0T3SzWgm?>J+ceY(#h~7X7%;TF zCVp@C)9o2yoAi3gp+%(v|_t3m|E&v$ggY=!rxK?)FZQO=r)~=`(9yvK6s1FyNwg~O-yRtet zUCg*}C9F|5`uqLf=IPV^JYZ8?dMoWWl@TQRu+Ki#YPKZ-3LWePYwtI<&MFT$2GsK{qYQA?Kyy*cFTPu->mNG-AUE#Hw!-)%mRjvBrQ;bLeZ zdwJcZ3*%Cl#eCJ{%v3H%vWruCG!x+Sf#~v*)~I~Th&snP#Yo)rFFvGK z@E9^a$0;Q1TQlN0xloVr0jjPnAPUlmK%(>mnvo2rPgf+4_Ybg4&QuI{r{F_={6fZG zwzh=fmeGP1k+G*T)3|0xp{fwjYdMMGgnnfJlZydCa1O&3S3g4~n+7XTYy_-YgGC^Q z;cHyt$co&GB3seesxL@dz^mrgQGWdZiuGO0lu9J-7sjV;(g&iT!iNllX{mn6q_(y; z49N#%3Q02nt92YkUQeet#MV@ji#|`o`X68Re?}Yn;Q)89yGMptX4}*nlgBxbns`S= z^YG?b!?n8k{nnn4$9vHpO%P$!Q191oPiEv{hMFDKWG*4Lm59Dh7LPgk1IhN0k?K=w zoc8~S;G)$z`jdYnVoq>Q4oBk6tyIU4rXHN{yq-h^)(yoiYk?G#qI{8W8+vWneN`P2 zjEa5k_qa#=XpAXH42T^8?(>=5ab#nVpG#Gb&w2xfxb+Xgc(^-(4?e@z*^9J@$9mN? zStTwk{F)$!rGLt+*yx7^co#+(Fsk|Iw}MPg;ox)-9>8owN2l%alXe*2t*wPm>F*5?HA^RmjPkTO{{hPWy*i)%kpx>hICIoVa}!F4puT zjt^+p>V$WbTz#|(Lm(vxk5oEgEzdpK?xz(vv>y1+F+Nb##eTPsuO3qOEZ3cGI{%0^ zIV|<@KaF@S@GyX&2!BZN^3N0_tZ029{?6-cX2L*T%o4AkzRuky-MbC;n9GbmyTofv z2C8TQ_6LAKX$l@u(Z4h~&IPZ3m1s@woYmy}j$KEavj*p$t8$DXJ7?3X_3mEK9ok$X zUJ}uhEn|QX1BU|rL1?`<9OHLbZ<7Qmn+cK`zBczt`r5XIH+DiC+#0&;jq^>#xf2WW zho45w(lYyg^T{!Eh<$m*DP?SH94JAjQr%m?Zl~rndG2G6*y<)6nMyAfPn>*WsB`TU zeeFr<59S2{9ttcLVv8bmg4HAz5tIy|zkdm>DtufUfTq{2V_>rfJG;ID`RK+~%FB4E>Ou@dB9 z?M@D~ga#kDE~N^AZGNtAl~+*k4ea%vCgF_UlB#Kp5l6rtu)e#R94QCIdNbj1-1ULl z1T7hs*57&?T)YSOcWrm~3(;p-%1RO)x*4}y9|rKFf%eY-4=EBY4zZ*+u+<-Y(`b5M z$F|OAmxwXrlTt+ol6Gg0P#ZPZ1JMfp1vQHm1uN|&*x&4j56*_TRRyrZY<#5>FX?Oe zlI>u2_pf#(CU*Xlg?YGqhM-~)C;r7dswy_Qxu1#wHO5-JIy=ha{G&%(d35(8M8+%M zLo>y0-BXdu$!cw%`XnAEee(4JMh#)3Cuz((nJWnW6x)T|yS`*Dti1#?=MvGC98ZkH zGly;#zJ7OXsCP7T@&LF53WYr;@;`u^WY-6P#4QhS81{PsoILURW!aihlFw4j=56M% zyEmqLQGm3fDR&+|7!=+ks#ezd!yr}PaPaG@Jx-KwIMT?(Lk=}Ad>j9b_F zR#h#Mhl-7xuUG0+2($Cp;5ATLCNG!ug4!?_Ig3x>ZMK+!;H}ygq9uh-wBfRYhXhqf zGw=2ku52-)!~`jg#3jCBzmQrVFYfT^c}C`96Y*NxcXiB@k3;Vc3QAY#3mH zn<}o}2w39H)nH$=`~c5BD+amHUOgCEXNGv0vRyw5#toxTGX~my`fWEmWB*m;z^&n4 zBySA4u_;cAfp)Nf)^{anj&jKyw@+3K&~`v#As;tk7;b`H-o8oWhdc%v(H8+*(Pndj zFCCW7S!$mGx}diJ-B%FMaY#Un6vvMVG+f{-UA9%GT?`)7OdNoNZS(hWtP1`3z45so ztp{T82n%mTf@UHz=Rsyd*xFZZW8tvIXQ~RxYEe5?((#h{Dy$Q)Yb)*YlR#7DUR+3W zgUMbdgwmVMhKo6`pJqmg1cEC$Kex_c9#TGNbSM80`vPpSvQsg5qcftRYt_M2wu7Oy zkuto%mUeYFG#uTpS_Y9Z=2(HMxEnDE)H(6b=WZOmJf0-V8ct*B+!CGyi6 zntK9x_h#-N=EnT%z74WWgU0U|c9{NDsI%kE#AW+VFeBqZYQ3@ri#a16%#-}V`L{(^~Ex$Z7dzC%?dCMHr4fYgVFMi=3I z^FpmzbiM7OkJjX%(;zvJF7km-3zHJY)0S(yGZFaj=>0`|frZTtb~nAc4qTVl{Cf&W z=ee9=y_mK$A`QIpbG)}MQo6`PM;V;I-}Zm+c^bQ(>B_Flj74c{ueR^Jst6zggZKfU z@kL_+hM33F?io%ymwc_}um{V76V;olmKg0^lbAxuvNBR;KY+0^fNlo?HW-v&8{}SY z5JKSnnnlWhCGKa}u0*7+cHeyjP!uP}ktxg%3l!z4AN4Q*a#c6u+qRaLGGFFL9b@5# zTj;=vnTGL)j=qY=AcLWjCj?X@R*buT6A96NIwd~cUklo>GDU=lK*ql1)m>DDI0?P^ z^VLg}*4_J~vwp7iBtNy6(oa4V{nxJt<5ub$z33y(Z3We(m`ZgYNh-d1MkxL$SI1U3 z_LlND=o))1XRrk=#jcDukcj3w6!vtH!g>4hvom9)5FI(U8Nce7_ClPQF_roSctGQv zzDJJPmZynh=$HR`B;YPqPLS)mHATGz=}pxIrq%P^2I68BgqaI$yS=;}HMKjOlvM0j zi+_f9wAWvG14>XZ6+O2&4^Yaf8Qqd0{)?UWj5$*pz4Q}BFZllJbn3wfukzdrZPaA% z^P@VmDRR4op6lF8o#)?)mXn})CORQ0_`PsM_eW5A5bxV{fHHTkx6Lalts+{IK6q}f zy)_8-w`%l6znI5#N)F7A`pH6!X}bCkb^z3(UeP`M6F4~bEWLc8|_sxGP+|GtfZ!KIZ5nK;(7 zf;PpUiOfq08GG`xuGj|BO~hfOL1L%-*qx#IX_b+u`dBAT2-p#xfi@zv zY!9vh5Ud`k%Wl;OCsG(ldEorAv3=U@9cW2_;xICi78+o*$5FLC)jWesH^1A$7F!-~ zoP_1am;(!%r>LW(MJ=~EkCrR%>4ld*f^&EL`^Fx^A{1>KlW9b{`^#W6R%<81-o0>> zpno9`xrnv(>fD_Nb*-`iZGp#5i(5NIW`@SHEC2xF+3wTXTNwK_Y&M*OBTskq#@;*l z8M`vnO63Nd{xdd$_RRq+#m1Bcn~unp%AX!!`d5J+DZ_bD7RtM{D!UVRRV=Wr)m%Kj z$dq3i`Q(g{+mn0rQoafMAw8w5>cJ{&0g?R$JzaqA6fhKKDL_dLLxkuu1oi#Q-9>0Z z#4!wta2nZX|LQRyf_#l`CU&!~lr;Cs0l+(m`uur0f0^@!kGTwea8=W#>VTx2o(7=?+{cog*ork2 za)WXH9g9G}FD>1g_Y2K)vVvrpA3Pk>HMDzu=!r}KK}(h6TrFmN@<@L2u*;X;^Rd8* zZm9T9E9m>Umhet^QPjK5#*H|;*(lus0K+*nVL`Ieh>{>g$gNZZ{e~5kWczmL^c$E> z49N*ij^0eiRw!4XQ6{^7X?v$ig()!ms`Eq|hiHCoK9K(6YqSi?{F1s8cHrZ4kw`B@ zEj{3QPI)2KZc@8-+l4C*iz%m`D(ZC^ma*8)0DtJ}yoT07y4_-Hw--s&pX~7?kxxt1 z$o-&`COSUneQ}?l5$yHuz*KBuJEVk__C=pNLZSRYKX%-*v(!jFqumw9bCD`}XXy;5 z+N-|Kh?Vu&(dohMB$-2d~$Z)7cnH=5$C@AW!#&7Mg(IBoNf)UCr81Yu`mU-t0< z*88PRorZf!k?t{qe1MiQnb&LCcQ?kf^v;LAsY|^dJbwx*q^hO!7Y4n}J|&9ja{CFH zwH$L;u#;?u@JluhhNaFZsO~KFb$R4dN!L&mO4a?5-duH!-<^MT$J#Em$ zVph!4VDabtX$(rIknCR$ATb2l+gTf8YyLRTrGD_l2tlIWX|n3CpWIq|`ySOP@;Za* z2L!>D*DeedP`ECUR!`}Jh{VZpw36s2so_iItTRmm7BwZnu%h$g#y+V+8DXd%9;@2U z3^#Z)lECPo8pzoTF6$0BfkN7CTFgoQ|%a-N%>s}l>^zOB59!s|v3e=EZH zccFU5OP1;ZfB6;`LWA7_RZ~-Qnxm2aTw0$+Betej<7#X=|i9nko6fP z2-t~BzlIsQf#fWjC5!WUrqxUwnbc_;+G@-0O+Dl0NmcqIAy?X=`{zg@;tQf)8z4cb z+U>oW-zQ-K1_&$v?0o_sgs-p~rMWrjP{HzQSN5Z`nTe-W&$InAkb+j>K$0_SU_|e` zSFVv~?dd7W2tL01VPu1j$mkR&GJM%}-Stcn)p!QTIW6SOs2#iEY^L_7r%OE-r{=W)%6dm(hSY2P5F}6fwiyAyhyD$W; zi%r^6p2aY31Q;_=T`PofF5M*EBg6hH_%^ z3hh;!mHef-Q&syFBp;r8>8(8tH4|^Uh2V_0JjnBiY4JCEhXv)IJ`^~z0laL43_fHI zd#Lw8F5OkSY^>o}Cy@yZ2)MognZt(aLSyITTR;Zxf(Xcpscex-A9wXw+znD<-XBmi z=MfYZ4sT;@hA=UiWTj@H)$KhxQL}Th0nJ9si?Rh0OgW8jlhq@WV8*^d`?l9HUQ$)g zemFQdDD}&M_7nXDPomaX;NXC#zUB?JBG`j4Cdg{{YU1Cv?p12APg)L7@>pI%q(ShJ zf-tix?HHWVXrLRdtekXwwqq$RwXCjWV>X{>TJ&Cf*Fq7i-uf_F^P(b%=}0GH))CU~ z&d(mKq}_moBkH(oY;Dk0Gf#}e*JXg<6)ME5vf^B;m!{+C&YyR>%?Ybn5vYiM@HjTE;g-H)1+2WT=w<)speofun0m)0VmF^U~1^Ic=mg#?453dabeag4pIt zGQ;{Lv6D~wHMPyc>pckbOW6q%#=vW6dYgkt9`Vu7dCqh{i=u!j1VkJ`#LT@)75W%- z6|fCNyFu~XPm9%gH8d%Nq|l>{w=4!1@o;!)58P~%NMv6;1wow3IZFzsISZskbd*Xl zwwBFNj`!cE_;7mRpn2u@;BC5ih+#=%<--PkAXxJ5V#1sp! zd-u0TMd!>>qoS};WyHUNH#N)u>-WF5)()>wfoL{tVyHr*E-UC!Kux6ZMHoS2B7z<_Jz-I0#C25Gyt0?cA zhb*17hTq3p`FHb#AA^ve2Qw>YbV5{le02Johg{RhCgVa9XI1%>G7 z0KmZgF$7!gtMaZraR9GG!DO-Ow9jVyBna7r_|LY0N2; zW=QI3H3%row>44M#ABh0x&M9q&#pf$l(cnaekRt_09Z#uB)l%Vu=z#nz-|EWx7YT| z!nWe4T_af^Z#^T$Gjz${mx<0_z1&)A^$dMn0OYPr;jXQGcWIL!#kr^A#y(pjmmzeK(D}^$=*#~5<3;VEK^ViA$a>?aDnkL^BL?MRd zQ$LviIAA=$6iWqE!9O{GkOof$)*$t{HB$pyP|j0VLO?)(DpIT{1eO(b|H0#Rx0S+> z;i@5|INDvd*z%dJ-An{AzrOi%e<=exrSx>eUYecM?qsp{lUIw_yke5fMmlhU;QgeW zeaYhX5HYVlk1i7!!23_S6TfUh=rab7Vhi`?I$y!W-mq#QP8<#~waI}-JOq?ZE+{W0 zch~r@4KMG_(@>=8`)0ZA@a4B{2mS7#_>pY}A)>^Pu}L^TU{|0nP@(jzooC5yhXPK@ zVcGwvI#~w_g{H=g~#{s%AmHjg={};rO{b|d^}h8R_VB5%hq%F&mAKbk{d&? z6ZW+}Wb+O3DDjJ?O3aBYM*^pSLgWGt1J~=DjAuspr6X3y>C%&?}UE$A7oe^hWJbhr;$(H@a zDqPC^k?A4%?%(9LFz>~RMrY2o7<*B@G{M|bCMynSQXi%m(1n%`#6`S7V)%Pb0}H)2 z?X2Dlc(2W4N8GNCI47)`Ta)rbW6y@97xYP@aQLAc_pk!4^s3${lM7I@#(wbV|Irlr z@wq=rLtneuWKV#V{mBIPRZkDs6lg1Jp`oK&Do&g=axoNmHcM@DZTi!rxOAR{pSA0~ z@9PSqQew_P46+yqx*bVfUufk~5e0mW0jPk#kN*Mcfr8|7gIeH!8!*oAGqV%uy{Lfk z^?t$b198Q7RnkxEytP};X{;~ri!3TTqm>;S||O|L{L{l2V#=+h21%)&@dtj{O5~r$e}u2 zY0i_MEs28uR7E`;TheIUg2*x1YBYjC6?jU;pOwBto7_Aulztj*VT;urRQO+#_vQ0d6K~9#%27B?PTiJAN zkrVCHM4Rrugx*|2rtwNdJ@Y*`$04i5Ns)|2_jI!@6sa!vgBT)O2ChE2O96Wryh#QQ z?}KM|s{7Qh?1*lVBYK!`{HM*>!EnEEyFQNYTQI1=`u#nLVC2{QXCK6Ic=6!5xmgZ- zxo7Z3Z(MBhFz3Fb^jDs~9{@tzm;o(^WYX5TQZ#6vpOW<{Nv~9}hMy79MEIHg0`ZN+ z>)M-eu&x%k%r5^bpAtBE=o#(LW8&*RLL<;&H$m^i(0yR_?Z$C~^jUkt4UwM}V z$c0a6)~N*(3KRuk3EPisOXnS2LgD6YEKZ@Q;xmMV+246) zh*=gqj5=%U((?%zYFzE<^+!W4aKGyng6qhR{#~1*@BgP!2`#$$@!?!iSIq%2Qw_@7 zhz4y*hIc&yZ9I6kctI(&s3jZQ}B+2V}{l$U|0{!*-A_xoQgnU8g)1|O@#04hm~%mk!`d2!_P8}>n# z@*hCkv_HnNK1=y_AKx%;lL;gY?wti(twwDO1XH9qp_xINH1wLKh(R6{y4KSlUJz-C zZ@OQQI{UVbf_t_`iS17@5?slAs z+tWx_@d5lXA3VqsfQ`U2H`Lpua9$#ePrilU_V3CQyztnU(^*J&+V_y#UoN}7#sIsy zi@5zBws^W{w|`AM7#PwaY1RhIDBx(+W!)_x0ajQW4zR|{#TvGZe?CF$uk57uW8{)(`_V%Idi|I9!G6v)JAivZGDEuHMky* zo->Lq7Nr9K6xXB#+3;PTNt(|R{;*&-bom(6j?+R#P2JQIC+=!n;_`s7NZcw32Q<=l znc%x(*A$&Rj>K!_X>AB4_AdD(es0Wfj&EP|pmnv&Ij)`0`iCg2=3lLWwm=Mc@`uxH zpDgDU^{D`M!9Wda>`iN$8lcDc0h zK@45WxTF7cpTu)npgNSELN=Eo6s$7GQFO|&)3c_0B66*kAZ_pD**`w{h$ku^jULR) zwTwstTDCSQMvyoK65afKK00g+S5_^9n5bkf6BT@|Psl3C#xL|i(uGCtIHNdvFu~;^ z=eJr3z0$m~ld?7-0{(>pVr) zl~Sg#%=}&}c7&m{!q>bK`YdSyC#CuRFY?%zmUUP_d7Zn(^a;;rUhij5msFA6^df06 zRyXZSV|=m*Bi!KE|ozKHz zruup#8NnDbGGMTvGG^0}0e?N=AqXOa1FLG$xs4eQ?pDx?SVjC=6Po0t5(<@qBMk+uHW`^Yya*1H8|@XP@^u=iWhIQTF9rbSZIj@H~1(+M{E; zc!uMvpr7!8X1|kR3#~72@1~J>$Nc>u=_;2n54=6Vjxv~i8F?Uus+rxiKWF=YhqX|B z+E~Z(tE(M45AxQWhAsG)kL^iJKZg1_qa*Wk1C$@^ zzmTAFHzfn!(cI{+az}h`=wtRr%~YOjvp1uy=I4f_)8EKOZsC9pCVxNbUlHvAJNLLO zuWeYO&5u1hD>L(d@Oidb#|-4jdc#7g)0wL0lIMtlN_XoIP_yfbXy&qdGc!NgDQD;TV3fu-tW+mV;O40GCT+28X2an8S;G`aFbZA)SGSP-0Hd?FCo z8wpIr!dNm8Jqy4%!7iG8b)6-G>ShN|Rh48!w|HDl(i`6l^xmO)(DlFW#+IhJ=w&aM zJM_QI&81MwRet!T@n1LJd73()Y0HW76IM<(hm8)ZYynpi9sjVCbs${;4 zTxFoCh4v5r#oj+PJ9fEV4OXvx(|={z@L^DyyN=i zw(($Qx?C?Coc{d69<62;palCXF|a`|O|WOkDY%O-%W{9!N=8_V9q~$w>2bWX{Nq!s zI-fq46=A!3BIlx3oKsuEk?NkMC-%d_Te+`dn5QMLJ&)PVhk|(D_vYtYp!`mP$xJ*a zY#ghqhn+?9*I<{St>l8QUjRbv&>c1Z!Rf!@rJAK?99KP}3p7^u+JN{)BU?brsUy&iCg9^?v;Oy=a7dV;Ij4U%$w(o^Yj zHShS5Z@0L9bFY88RbpW^M>5jcu8rVdn!QqSf9r1(a~Bi^ob64I@A+}cA42G`Fq*h_ z>iu}%p8JD3KPYE}ZBo)IHlEw4AOt~XufwpDLR4Iwb3${vyYrx)zut!};FT-DO8t;M z%IHm5BkWT0;cBu1--kzB0Q#ZzzY`D7fa-~p?-WD>;QVBj#wFcrhuxA)pk*?KgSQ^Z zz_DrX1;PK_8E>C2IR{1JlTW2y)=cH|P0G*CZc59@8~yYfqMT3J`6-A4(99-|7Qdgz zgp)(A;974V`TuB>K}KGVmuK$@Z`MeF`0-15Wj9~Zg9q8qFu^+@Cz~rP+I}c{?hf>| zEPQE_8L*CeUd!nCBWdvf_Z(`|54dEWobDH*dZ@JWVF4BSlBsupY*uBeR|u)@qwvwm5Ya89Y6oLY*DrZUm0=*+55K-AQ}s^sLW_AI{v#uYBzJ)lpxS%(-I$ zf|e9Jy=$KZT8Bvm)cxaekCT&Ij!uN~WM}a4@%d`4428-GYE8&=AI|Y_xjft7BJ9`= z(sY)`=5PPcojYHz#HC8_>5nq2S1>2vgjI%Y{_EogY}JB%N%vl|Pa$)4(|aA9>wt;=t`N+pG{UCAx1(hLPf5s?<}SHz-Z#zl1==#5RmS}H z%tlISg&_sjIK3ZuR$)v@I$g@pjG^S;LMKekPft%rTa^%{=Yr;DtSB+tq~EN0tvURg z6j@?kHF?%*PsOCnhdWk9u4yH^EIfFB=+Gfcah-(W_OqeSbXq=q_~4_!1b-`%cEPJ}$D@P06Dmay4ifQJLSy}~66Ll&~qN8XHXNJOusBHn&D6_kO0 zhhoV_7X`7%`Od4}FOX*_;)aBJBdY&HPN^t^kbrhy4WaC89lqBRJk;OfwzG8-zc&p29In z>lz$DVf3VO%|UGbQI>*@+&mG7UJ;q1c$uv%B0?_71H+mBa}3_}%|?9L6x32kk}Mq# zzbo0FGN=xkM~;}=TslQCTZ-cNr7bNI0Q zzmWpVw*73a*zZ-J_shqH3J--KEkvZFqr>+}ax%>SKbMKExgO4V{yYVeX!)c~cBiRN z+G}(B$n0_PXJ&Woi#@b=B^`9MW1y?-aUrX%S4BHo5-CLkP&VTYJMAj2pPuf{=RDTh znyf81LU}A+zZNu(#r@KHZ;26~qFrnGUq(w*y(CiP=y}1NttGuPmSb{Smb-RiyQ_>U zYqZjT!*SOBXj9rFj&&>jmsmiNgp?RvnViREA9$o+(J|TQ@=_Kf z7`bqIi8OE}hOkz3_mYF=+-Du!>Z*TyeqP>zgX-!fzCFEJK1ZOkeZ!!%?29#l&5eC{{wQ+WF~f-%{!Joo?%=Hvt8z9gf{T8Oyg~63sa~O zKU!XvXy_wXil?X3Gxu42o_RPxGUl{D*Ya+?V>+o^bc)>XtSh32{eyjSl{?b*&vO*oR+qW|_r>)Fi))wKitW619g8`?ZeC>E{?04+voH7?1R z=`AU|CBaG{J)~QoQ%vuzFK0a8ZrkdS1UH86!f(7by8=#5tkB_$Sl=-PY6avwuL=G8CEwBZaTND zH@+-5cl;oj!1!!e>u$9YQOObpI&Ga#9Sy7FPyLM*fBEe=rgfY#xoc`ke?KQuAolrp z_gPI`dNsx|F14CqoTaR&_^bOBi`xXPqV@}?#(nz}C{<+MvQy1+m_P^N!q-;h0bR#n z`cGMPB~3Tndj8Og{N46ALEM!jkatE9G_NXCmk#8OJL_iS16E%1VgiGH=1Z-0`&A9jsM!r(DiVzDNH&vI)4*K1^jXlq+P^$K+eusFq7qu`EJ zSISu@!VZ;YC8L!;6w{S?rbk7=qMoJVT9{<)CFw9sM-!*6YWXUoYP?g;T55v@Zv~K?V3Z*yJ}q|D8l4mqemzB*XRwTf zdQMX|L>cUUo0EkS5It;E{KrDij0|LWK{K!!AO*WSDRT#*vB1H{Z-D} z=?z%&4X*|*zfo0p&>5rjUp~#sfjZAInaPg)EMQdOB={`;H^bi>c42kgLqhaoeB9$; zuV{zJ=;5w+PVhOkd634Ba0fHrxFt-PE2d{y-mzjG?92>9D3R~u6`B(r6LrBpF9vCz z(CG~CZgaFMQzmI`pXv-$&=IOED-JW1a-5Wn{5OMyLCu=b?;$GomNPGfQI&h62hUx4 z6jzrl;jFUMzg*Vqt~O}8hhyTZ7Lm}QC?esmrfEWOIwtm7;1h?zD%0DcC9kKYrNtwL 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_right_black.png.meta b/StandardAssets/Textures/OculusControllersTouch_right_black.png.meta new file mode 100644 index 000000000..075d82834 --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_right_black.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 79338e6fbf6a499cbc03c9ef0713849c +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1be673ddb388a774fa86247efa3b8fa6 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png b/StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..0dc9e7e95604380c4f7b1a4b9583ebed73434e5f GIT binary patch literal 9887 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png.meta b/StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png.meta new file mode 100644 index 000000000..272565893 --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_right_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: a1d1fb0a0afb4b6a9fee5061a44272da +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1be673ddb388a774fa86247efa3b8fa6 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_right_white.png b/StandardAssets/Textures/OculusControllersTouch_right_white.png new file mode 100644 index 0000000000000000000000000000000000000000..9a998e31a2d41bd62627c39bd6498eac4feacc67 GIT binary patch literal 365320 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 z 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

>VcbRF`=&!N}KbnYmddV%Lvr<(5$9y5 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

moyivvC%LVqj8nmd!DiL*z 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%0ARvcH)5NXQLBr3P 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%0DuXMW!O)hf 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_right_white.png.meta b/StandardAssets/Textures/OculusControllersTouch_right_white.png.meta new file mode 100644 index 000000000..2c9b8c178 --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_right_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 1e279e30c4cd4459baefbca971a4ee6b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 825930e96cf6c294a83b5bb3e44d8caf + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png b/StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..fe68eaffb498640a6ed512f7d4d53d1e652b4469 GIT binary patch literal 9703 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png.meta b/StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png.meta new file mode 100644 index 000000000..bc0e760d4 --- /dev/null +++ b/StandardAssets/Textures/OculusControllersTouch_right_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 0fee8474fc094b278dfbd2eebb08d2dc +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 825930e96cf6c294a83b5bb3e44d8caf + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusRemoteController_black.png b/StandardAssets/Textures/OculusRemoteController_black.png new file mode 100644 index 0000000000000000000000000000000000000000..d4c05c6efd6edaa5cf98dd3ee1c4e37c5af75655 GIT binary patch literal 47896 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 I*7oH81Iix2`Tzg` literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusRemoteController_black.png.meta b/StandardAssets/Textures/OculusRemoteController_black.png.meta new file mode 100644 index 000000000..f6a0ffad0 --- /dev/null +++ b/StandardAssets/Textures/OculusRemoteController_black.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 1a84db7688bf48a9bcc3b9e2d8deefcf +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusRemoteController_black_scaled.png b/StandardAssets/Textures/OculusRemoteController_black_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..57ec08693c81e6d7929c87f67fd4bbd58880085d GIT binary patch literal 6251 zcmd5=30M=?+CB-3K@_5(#HBLC4XjCKvQJ7hKtMo|RYgT%l1wlPNlbz)RSDFJ7Tm7V zdKFPouGXq`siIadDY$k~q!+{$#cQ?V0<}`KiuX)FtedLC&(RAjPFFK0jgx}1&ZG;;PdQ3M)c3?k>~ zLbFU{Y}VvBb=EvJu3?WKhxlj6pnz1;LLeEbDSERkL(aC#mBD+8%wr>V7Rx+2JAgV6 ziI0dvf(#}S5pl&FH74XE5}b>PQJgOvi||oQ!b2rIOu#`g87h_uaHQj6!_!O}tt>_v z(s34ilC$SnEJhiRm!6)^O&4$treq$5<2VoH^Z0xY%_sA;0>gpr4FQOYDcqek7yXG}At*bmpJd1MNi zO6o0U$cuII8s``+2J;-lTSRv*|Jwo3wGk1WXLPGeYHH^ZW=rq_Xhw%ay5%;_?f=v4>O=7E;cp);Xw%gQ0OKD&q@eDF1y5 zRA@VEgh8XzW_D$ja`@sn43!D^GCs;dC2v?EkTryb=#g2YmT3*9R04)Umr5j)Jfl9D zjdTWAHi=9o)R|#XaY0I5GHHfv=>L3SU3Ui=QVb@jHndI9l^zxp6lF4Kbt!Pc95W#h z2@4JqW4Kt%;d7w?JBnmsdb5SltI05>oDC^lolYYY5qum|V;BdMNF^LXDim>Wk(T6W zM5qMCFdRq7f~6Q15W>epP*fR+^6>y%B4Q&H zretB1gQw{M*^9G#O1Wq*MWbFzMI{Rf6Vq z5TV=b;$n$ZV+v`GB27`c3=-lHI^MnzPbE=GTDu4dpNb+6qrN-Vr}wb_W_gNU2XO$k zpx`eHhF?=jli98s%I8Bx>~wqVV_}7cF@8<6s}!%)!LYRR^HHI+gWtY3{Xf^Jf=$&F zS*XqoQ!BHhq{fo-JML0+h`o%+2z9$@YAOjy4ZDM^>kdUd#;aXq`W%vS_uI3woy}~} zTG9y<8ITOa(M{sVin}B|@2z?p^b1H+7tM`?iGToru9dU3CPOOHnV^Wp(D5+WNG7x2 zD$-0W=)n;|JpuRaju41seCg}*^uKUKM|{+C2z@dMn>O#y*g=X>6)x3qP^pUGU|Luf zR8mX~^IC<91R|7>iaG(&HKp}ujy#;optQ(j?<7PT^9&+MO3E_NEdAV=>vO2oD?T8k`Smk8YxO}1OlOi zqtb{;4lWj`a9l)+)mm6C|A@N(r%3f^j|AhRd|1ZFl9ho#+8SgW~Rgiv(9*}Mz$bvUdNG}PQk%8 zHnJsmd6^P>9+*4Wdtp;e>n``z;*qRL2y;ZJFOBW9%rD2dhT*#!VBx`Q>0@fF+hY!V z{qWJ@j}JHYdA90h(St|$%q;!YS0i3kefQ|{f%?Y_1@)v>eKdg^@-(qI0s#v>7$6w< z(iQ!{Cm_nv$_AdaE!~k6>)RY??sNrUC{6-aiEz4ZYqjbgr_?XJlA*|?qf>O-sz;Vi zE?pNB^SM)aL-M7<4TXpOe((Vod)-Vc4PnI(k=%`$74Bl&w;m|nt)mOMwx&~kuDhgp zWfrtBU-`->f)bj7bM0vASvS_fh@X>7XNAw)x+#3T@1ZfJg$FW=zm!+ZF74-t6oHe4 zll{oCm8D5_7Yc{X$M)3k_==vssN&eC#Ub2=Lkz_-Q00s#CUFxj9?>_xu-@E|cKxdy zD{yqTx;3tx={)z;g@#4U`|gz%;>*z+etqhqXae`}@>#5qA#>OE!Z(wdNL?hz6}2s# zS6rLkHpbl}n|CMk#9TUaDDe6iv-p-(<~?{kSlQpS30nqQ4KK*}fm(f{V9Gmp5ecE4&uef28^aPU1}BVak^a7zo3k{DpKWU7_fD= zUt^y4o)OU^T9dm~cB}2st#M{z-^@Zc>Gr&*q6^3Rc-K4l|CE``ux10{bfRA9<$QIe zW#2~C>d6D#7aX~fIyKif2)uAm{JnX)*Xe9Laz@#D%WR@Fzp>4S&3svO(b4wd?RvwW zwjl|u`x!2$KYMcQ$JUS~xmP@<^aqb=>yxklFku#J*VkU)9=rOs+okI&nqVWyaJLP0 zwFbF`44%2=c;jgY|GUPAJjaA94wFWM8xCmA{ibKh-wc6px^n}_O!_<6Qlc8@_ zuB2_6SFG*l*`VrC!?E9$teq#mXVGuU!AGY`zPpw=Ssk6j-Kvu3G$tgJ1!UxNm*%tu ztoFc8v^csSMQgYA2UVF%qunkIL56)QJBAcMxoW$`6X!FX|&hV+L=s)q8 zp~AQ^dcfGybqRj8$l!|QO+!6gtiOTpLkjk;I6U=;{zPN)&d8Z`QoG-6-s&Oq`cYaR zH2#)qOStY+OK)6+w#7s{r38GDIbd-MLdA;Hy7=hXUw__Q{?pcG?*Y$x^}RNuS;7RH zX>}u7oQ59aXVeU1l~><)`Uh^^S|VQo92tshyWB@yL}WYNhXkyhdhJ#HX(pZN51exg zYIbLS?)7qU%i&*~Z?!~x+LS#L=9Ltn%oqBja~}>`Tq!n`MOO?79XxW+qMV2Ye^~~W zxLR4)+E)6X$mXC8iFNl6(cjP76WLt!MAdu$#LC|vZ2E>umi3s!po+jfNvY_JiE9?; zZ2wUh2r68ygLoz94*sy=yZkigWbC&Ov|cWXRvNmE?y^y~+au;|eVId_hnxl5_6ZNK z3o2nKgrMocdMTYL2NwCQeNyjxBQ`|1D8_@E%z;Z?cDo)pQry<&CCp-4`A#>5eTq*x zU+8`E=|Sf0}(F_x>4YMZRmtf=}b$tMu*-;`{btS`DYfkEdSb z7x#Nfi@b&J7#pp4$~6)Zi~A!-Ims{g@Nz7*|$0)VeRF+dG)K7 z;xn^3D=cdCG1@>#F5s$*5= zm(q3Vd8&iwXsoHcrlnp|)lVY^=H~si*RoOIqo^AZ4U-=$R$0$EANE4W33AA(uJJ3s zmaq8uTG|@dB+eG^DGpDCM&1`WV|#g67dzXoGQ7q|KWDA6^>Wm&an zyS~5wc(oNMU9EA&GVA9~ET(MYWxq+F#KHDK!}%{KOsh(;yg08od|~MG_+ap@yLFl} zKjVXf4lCYo?r)_pMSMH-`3X8d1c6< z$n1)Ho(ttm3B)77(F&M=Y8!yY7!MBl&~0BWX)aQDgZL!b!XQVRY027H2F$`qAN8sm zzy`Gr-yVhK3N(aXDRS)xKDLf^YXb+PoQimyK)Na^}5I&RzDi z*&&|RDeKLb@_=>6{!y1Fz)F}@G^f!m>xB!@GC{VF)S0&rQQY2Gq*QC_&oCUCjJxkP zo!JsH99g&&I68bYbxGn?2efVO@s^9B<$2LLvxfV}^a0n;9B7vTDlE;Sj_&MV0fVg=lTM_dw!w2x}Z!5D6-r ztYIEQBCA&X{nf_zVx#XzuwTAdzp3{qaEoRuNZnujppT(SU}Tu@AkO# g)b_g!2LX+Vo+l5S+%A2x2*4{Wc(QVDU{dbC0O_5(#Q*>R literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusRemoteController_black_scaled.png.meta b/StandardAssets/Textures/OculusRemoteController_black_scaled.png.meta new file mode 100644 index 000000000..941224112 --- /dev/null +++ b/StandardAssets/Textures/OculusRemoteController_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 2a7a2c83727048328357b5229c8a7d0a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusRemoteController_white.png b/StandardAssets/Textures/OculusRemoteController_white.png new file mode 100644 index 0000000000000000000000000000000000000000..b24f599ff9ae37abfc318e3340d962d1e5b49741 GIT binary patch literal 46755 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%0D2D+IR+0 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusRemoteController_white.png.meta b/StandardAssets/Textures/OculusRemoteController_white.png.meta new file mode 100644 index 000000000..f6a9047d7 --- /dev/null +++ b/StandardAssets/Textures/OculusRemoteController_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 19b274b234be448ca3d264a1d0ab377a +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/OculusRemoteController_white_scaled.png b/StandardAssets/Textures/OculusRemoteController_white_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..8d5d38c26a3f62b3f38ca721bbf2af71b3b93b81 GIT binary patch literal 6184 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/OculusRemoteController_white_scaled.png.meta b/StandardAssets/Textures/OculusRemoteController_white_scaled.png.meta new file mode 100644 index 000000000..caf7a2634 --- /dev/null +++ b/StandardAssets/Textures/OculusRemoteController_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: e533daa53f48459bae083fa9973641b7 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 2048 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/ViveWandController_left_black.png b/StandardAssets/Textures/ViveWandController_left_black.png new file mode 100644 index 0000000000000000000000000000000000000000..a0fd6c05564bcdcb5c6cc9ecb32ea482be6a2c2e GIT binary patch literal 355933 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�vt(v82vV>Gog&Ia!Zpv&^ia}{~e?mshPGBwh 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

V> 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

|Q?O}4&bwr-4i_qka!$|$bEKAO7? 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�O;9!TV_h-5drSM`7ZyY$c#+PF0aKyAh z=m;uT#Ybbx7cucPrXVCLQz3bj8ULima&_W|yO3x!hyfaBD7Ym3KYVk4c zMTj`j`Q;oWvs@wVZv2gYO(4OZ4V z54e(pGneRp^2^bWEn()~HB=jt zVHzbTCxBp4B|WucJH3I)(V)BDPffb1h+&na(H}y&QX=1${@eT54~tc zlN54C5FUuzM75>N*q~sTiUJeV^i=mCfTp~ZZ~h18%P zx!b=W1SD35Jc}m*2uh~am=4XD)w~TgNm7o?G{cL^qRdWK4dRPdHp4uRUU>zAmBc>n z%rE(<4Estx$;|pt7_$Zp9gX+ z6cEWk?mWUOx2zC-epu^rKsoY?$OJk&H)GiXX7apgN zh)asNRqzMN(SP-kO}s z*nMY<7AFw5IMm=S0Ih&O){`p~(w%N3*=%r`Wu&I}5qR(-iRSLZA!3rn*s>gzmgN$mYL=#{bf$BUbVG+9d9RIuGMQLp_xv;M|xaL6*n*=d4jd{&cZ*T}84#L<@8TK!Ny zOde{p!6Ue3WOR5Qkvs*`P}4Rhqzp4zWN{%2fi!7FUbxbCh4r95=1FQV&=@f989N~fTUA>rSDn%hzmq#lu{ z92NRumg~1H{CIO460(H7rVctB-Wtbe;uw)D_0hX1v0el8-`ogLy{nQTFX%-S-xQsR z9zSGzB}y4{jEYA*?<+q?*%b0JnE zFE_FH_&5Z#m5@}k94g`vrSdRR{)VMA@lfMMnY-EZ5qMq&N0iM*j z2u2wcOcFnI>3oHyhz3R3d+`7lNQn+5P48O^ z3cOhT3F{XsJB~n>gSZ2IHbYc`NYGj?(E% z+sXV<4}vtHVAL99E0Lp(>X%k$a4xL>AFK8J8FkJ6=xgn&B%3P`U=%0^s~L7jW8~7( z0{rNuX!*OXWJD30eu&(TdOR{btN_)-)l7dXu`%~CS}CBmGSfra7JkeggIOw%sFyp; zEDd{6(m#z$0;PG{Z24181v%Jbq4GM6@!sV!M#OO3+|#7Fdcx*qgI{{d8lN6&fv$X$ZnRyZZH`epW<>1+jnKv0EqZMJs&cpZDav*q>2PlmU2S zoB0k!{;oJ0-kiMHCKkE}&l1P34)<0+%p9J8?8A0t{9+!|6@HC${>_vdw;%8S1h0DL zEA1B`*NeCM_ES^b7n8b9N4f4ymGQ4FBX-tp4t0i!$VBX68Ff|`xo84~2^p~CAxFsAm34tGS%dz7+fl+pd7 zrYaI5>&29Y1TVx$*>nK6pEpw3AU=(9z$R>l2Jx@~Wpi(MkPx0PG`2%v>9;`L_xXU> z-KcZs7V$4N0H8cCGz)RPHd)fCBooV%mDTAqDUc}qc_$wtAv#yA22#D(!e6m44f6V8 zmpnPLvtni_K*K$phqG0`3q?^(e5W0rKu7vxW1;_*0iBt$e@^XF{=UezvOYR{m4 zm@~}jWHp3!lciv4t)b+rogG*{Rvf$@dQgQ6G1L=R>Nt8U4eCt zydl^38jaF0b2}^J)L55bR}U(g`qg-0f3MSRz+Ho;J&}I^DH11774$D_dCD#QkzYEy zS;&0VDE{^D^9_JD0}{rL+9XK<$-Gr6hpNj*3}5_jD;L`*0E0?!;-!DG*6JkboFq;s ztwHARSpd{wfLf0TLS6c`v9h8Y`rvqUPT^-qZVzIwRK~UeQ)jTMd@!Np;VD2T&3PWg z_(x|@PZS$1Ri~<-AtGgTLj5iT`bMyhz}f+5^{;Bo6AH6TqV{Vkdz~hMnoF#bNv@>m zNb2=N4(w3Jb(DmbFKd>a?hWh;0ABP}}*%;;Gjav?- z{X9$c#1~L&R+Q1ePHU-kW$-#`A zI#@8_L$>)WFjcGkn)z-Vf>n?NDcT=G3%`t^5#dqfQh!Zpf0xU?0lBk?EN1~CxILl?Ct9o zJ2ryq^Bw34Ln3;-3}=oJ(jEfbkJ>?2)}uZ3S*2edBA|=Md|K{-xX&Z8o!38Dq!kD4 zHc!KT{0nZe&3zZVS*<<+2?wd3v2*_WxW{u3_e)2IVx8&7k+p6I8BI-=el)fS-qGdz z{s&g+yk^<0jWJp$kWMjl$gB-~Wcw-s^4O!F7<)~rW&~vKRP?YL<>S8uGU7SVkVfMj zr1e?KdVAi+Ru77UcXk+b&cK_^xdW&p)@j1|>`58SbfHu~=GI2!D9=Ncj!E!-k(0Nq z!UK~GO6SH|)C|J_f>POC|ES3C>+!BmgyUUW;lCZo)u5})OA!pIr8XV!?nbj~kSzt# za)zS_}qHx)LqY%T3DPZ1gqkdxs!0=2MdaqD6@1n{0_T=(onLyQ$XWL#z?OCj= zJ3;Nl0jAp@jLH=GSfxD^oLq_ApIv}x86L#)dFOZ1>leWiC~Q&qqn>IWy4bOoTvEiYo$H}<7{i42XJkfC&aZAP*ELADzGvhFQ%dWc5aslDenSN zwOE4qA*$yF!1rEsECL*q>`K9-U-dn6cchvBS|NcX?28Q>UgM4(@9+#Q3fJ5WfGFNknQr{b#mSB;Gwg0sy39X15Vyzhpa_k-8{oSVka$d+U3G%dapzPA;mMf$mhI-ecTmKeQ zsCPPNbSm0DWOtn6wi&eqUszTo?GcE=RyxG4zC;p0#{8#?YiWcN_x(PZyi;xdRwz^y zK|!GbTtFm2eG}b7aIkG2bPBw=Ett-+h*qro@j0TIce=wFLkMMeai0CHw`SRAdGcWh zAizaz(x0b=I?H`}F;JO?a$GU{d##LM%&*olu^53{YOA_1vwU%;sJrMr(?`hI3;p6zYiJp(L{qPmxt^<)rCZK-WrE%HYef9el0*vbc)jv2u0j(r+2!-rC@T(36 zfG-l|8gY^Wvi(s~5-(wpRwof;M*W=c-T8(3p)}iK=Ok|S;+dhx zT;VQXyMMu)Qm&rJVys|N6jHH4dV!a5b$nw;jqbPNK_rZpRnAIrPnF>Vipuf>$N_E>g_tBX)sA9%xL0Wogo)& z8Ptvc`@)W~T}~QV3=f38*mme4P1*M$LfsY`O)Z%s&{0ovbGo*8_fT>=B8yOyY=(Mm zhhGcDH_!JV8l5(%=)HB2Js)xE88Mu)(S&ow8Hih8gNs_&9iUy5!y0(CmRRnw()#8$ z*>oM^?)VFx?u~*ne|Z?_fYI`THvR$7O4I%hPpP6*<63E}XF}9&mkDc}3^uAg=VISw zbu?vZNPNuCNCR^+2ix~XLQN)`d#fUr|B-ifg1mY^u|i_R3|3b)vq6o4CC5lL$Knnz zYzl9*Ys#Z0j=RG&uKazV-}0Z-P&1#GhS3+LN4kEPB61scXRuOuFwYI1L~n>rR67%P z6^fC~0C4iGt+bV(EPK`-T^%o}95i!%=-d@^?Qk<>nQ*hvY72KYX9)^InHS9B#3ZX( zzRT{3R@FzD!oM|v##-O7ziOdKIPNQubG+;HFydH*txm1>{iLMXkX;Col@dz0$v!~K zl`Ar3chCpF0J%KaSW)x9qsy;}ty5h-)X=JEsoB`#42Wp_sdEE$)-jBaGNn6^nqnP_ z`HT{pH0wbN+(fmLy6O{_Y_*%~dccMD*OM02X_fRwy0^h z2h1sweckx)Yz$b>Z>I@+%Gvf3l#ij=1V~9rWPk=EeM8ykW00WBJpBG4XooI5;HP0l zapSFu+=P|W|5AfQ3WL~th3vFTB^9dkafACO+qh7ZVI~fWxBM!1jEay%B{ZQL5OZ*F1=dhwgVMqUHeO^3BUOtfX^& z^nh1fRMK9vlb?lKw<0=X8?I_%!Lxhj95o#xs}dE6Sy_Nzi>fnDR;soTf%#w2KD>NG z`y0RrC?k%Q7;n(g;aRD_S7Hd^y_aR-N&9_cqifD**-Q6vZ-E(vQXorA6!k zQjv%6es6WtulEAEyU#a3^ol?GNDoz7ab$gvi1qfeAeISTr3`jCqBcyZ%RXOh{O~lC zz9Y&8=~kC#f2D;2bEh=m#w(B;?@^NPX(u|V-!**J$g6}Zd`g}?1r@P?xELK*)qJS6 z?#uAr>va5B-XLt>3Gn4MdqXes8_Z;7jA*Xvo&5Vz{_?D2s8lv{vJNo|eSEsvz-WC% zScwm%!d^YGke({tb8$21ok887AVv`_^M1j~e^92}>|?%j5`$E2UZcDCdj*6v`5{wM z^!1eGgAnWf5iY*8hi-;?zI35&g2|W5lQPo>Smt3GWAEqr2QY-Gp|J)HY$!tU1`?-P zBNk5gkaCyg>?6-@(&VAAIP-F=X5nakr1QIX3s?}oOA-;RRX8TvrO<5J z>{(r}-=%M4@E{`XHmWK={LYsFlL`MJnm`RAd6@S(X#NxVT-h9JC#SxC>WwNX_mJ?3 zR>>o`j$ak>6*1_y5c`3|;C8~A_osI3KJT{kZ{!RC2k6k``I|*WX;bV{obQ3WfT08G zsJsiqnd#@|t}|7$H8lIOeZ{y*-B7*1EOV@?VNkj`hWCgZmIY;Ay*8W5yacgydq4c? zGpH`1{&H$KVdaxH@p}`&6C+@?k&3TO;(X*7vAL z9kUeS)qe3)2@&G7{a@2EH42CDFU3z#A4GQk=q!fiX35KmLet*2xA5m1 zkatWDzo?k;<&>)v)w^e+**be+qik2^6@3x4#ySUGAZ+bVt^%Exf=&Z=!sZMeN~id}FIrQfJhz zOKdIlXh=#@tN!Xlf40SbJZnjQWAtv-n^6@reT#;xJ~`d=LbFHeZlDDO!P|KN!O==jjj>GN9MjRE@|1Az&)iVno0E z?%el3B+>ySQg&JLYVNFAVpDze55L*v*(WQ(u2;+1^0H;C$Y4hVLOga|P_h!Udon|S zv*VbI_2g3}oFEQz4B{Y4wrHYRRSt04o4xOEXF-5(U>UHMA7{cQi|(9I+Bif`S@q3! zfo1UG_YMm4eE=LxM(vY{PWKYCtJBjDrB_KP5&I2FYG`P+Uwkk*>J6EmgJ*#&Ke(-kDjX4V6{L+`^!1k*TihPZ zpAfXt7(&b4(!0Cvb^orT6LxOnn8c4qxxNOwR3;IMG3H8t$mbgA5RHFCLH7pHi`fev zx;;L0{eY|<-JoR)v>~d}%=NT%=**6%#VjAn%rs%wo3;}-B5vu73$04kA89ep#($*l z?5Fs29=zo~=2Se+O#ZaS?7qn7CEgQnZTFk%mjW6G4nkUnDQX#m?>z-&B{RIi`XakY zdlS_@FSYjCvhMcV6i*|X?6PHpY^IK*&dgU6tJcMg#_nIWb2gu3k!HRBG}V19kcH^S zf76bi0ZtbhCqRoP%ruewN4=-E#N}y66eE#WOYKLU?#|odiz}d16gj=p4?Ww$uDYwG zHvZOBuWNrqwS`+Vc4jNM`yVyY7i`xEpqrwehfGjAotoXWXy%GT1o6R_NS{XJaV!Cq zAHAks!P8TFe#0`Arb&3vY$T^>cE!16dP>4x#2WJRR;KFf(FBZ=5?jFEBnT}jgzKGA z(79NpJdTat=~E8fRiZ2fEBOlB2CdhD@(%u2-U9?; zc7Z>n0P1c291yGR3{Y_CsQsOZ2qZmklSh>hqs{ zdDv|F3lM|I-zrcL8G$ziF}FTp_VB)-S&2X|>ZbVr4tc13vtmn5pkhRV8)r3D-8o^j z%u}G6m4Qm0Q6NWp+z$U~kewciULPdr3g^`o1r>&s`X^&;44?w?q5SANg>T?O&ay%X z9Dq{RJg++Vf5V7%dm)Y@fHLC^qwAdvhN!nc-1ED|+*$S%@Y5@8cP^>SrS7+orSsb@ zckHeQamO=T^Ax7vVsSIzqtBO6GuURB`fC&Rv^{Zw(MXB2>y6yGl~EJb8mQdhl?Uo7 zCyw7hV5@vG`NZ*B46UQ|m5l)YO%qzLELL&e0(QAJ0Y5hqspo87^! zms$$xA(1OBxq8%?_-@FZ{cqv8f|`-(_~ngBQqu6T4y|R%=)Jk<{eCL~GB3N`2o!Df z=VfiuWkfc6Y?D~F|LF7Vo(C@VAByXS5HPt`squ=6hZANr3+vVpN2ggrAM`m_OnW#@ z{I#^?Kh@@ZRR4Mt9ql1UIRbs&W-$8KZJrZ$xIWe-H-K%^PrX3V7OXyt2Zz;kf zJy)sr-L0*dn1j^*2b2OYpU6>*er-bj>Fz$_dZ{cUY`>F}!M=YrE@Ru}xE6{9e|V_1 zF)8T^eMimNSpQcin@y?y$>F5FhJ0QS_L%!Z3H`TJo;ig=%=YL~_OQa`5I z?0ISoym8+;MU5H@ML9c}&Lvhy^| zJ83#OQE!@+ImyH2qDQWYHM(pL-QBEi>;AT=?Y4W(GN(>1P(s}_KeS~lgTgJ)4q0+D z_&;wOL}{wROW)j&mOp6pM62zN-rLu5&(EcHcOxIo_tENKDrxELo*De!ah{U+M$!A2gPBKEmEwc|9SvNX&`h zG|91bWj{~7H5zJbnlEuS4?MJTDEU|7b-ARV*?1LPs9$te{2%qJmU!YIVp|fALUAz0 z3Ka5o4v;ot@5Zf;o1Jb!=;l3swZTN8jhXqGhg)l3ws%btRjD8PODd4&zZIjZAlMLe zv9J&IDSdhnH@6r^k;j^-{R|?gTALI~aGpFwIhNOXt&3^h$F^zw)q1Obf$dOT8Ahj+ zdF+^;+ga|13Yn+AUgzVP`7M~%rfAD=7UTcgi(e9a-Ws(Y+;(D%F8pem64zPA_aXcA(YcvE8^zzIMyNa+w{uIdYqJIl zz-mjQA$HjCn>PBFJO7g->cgqMPENsQw-b`vdq!?sAXnrOvE!oKbV&~r<1W3m|a(Tjfbo{sL0!{$_5`OtaYU!jr&HLfVVU+OlW zNr8EM;f~-uEGP)ZKAUD$B~T88Jxa}~iiD7}r=d2$(mqXH)PVrxa*PS=J;_Rx+YZ& zyu4qqK4sQ-?;0{)1*jY5S}%!Sp&5FzqVWCC#58_$l|<217lAMG`RA>9txtGv`?G!F zg8s&U?dVOJ(X-UH6-B*hP0?wQbX9JnZDY$QyMK4iux;XhQr()we@pS#Atv?}a{zr3 za3AT#62Dtn(*DdxCJGC$>7s7udrxH>k3d|Y=iM9Ay6ubtXnf2kOxvQjSNq!@B75m5 zH>+B1l(ZKrxkfXImH*E*T9`MJWIEU8_OK4Y5u;3TzNX%Q7@$$1(xN?>(23 zjcG_$_G(FWT*XG3LzgmEz##`97x4$DM!Vb?7(%dqoHEA0jOBOK%0+nTTb%EqArn znT~!hkU$vGsGF#sm`9eg|LQ(*1-i!$O495br1#D9aCS3mUqN%zu=sszo5EUb2>*|; zcY%gF|NqCQwzllHiK$d>-56~mT~I<>q}DB!OSu)voshdRDqZBZMHHc^lxyyHlbTEj z$z?Fclxdn6V+_p<#?1Vl@7g}Q`}yqm|3CI*w>s<0`~7-7ua67KLAEVR+ai1!LT&#) zF6QrugtnQ9_CW)}-crAXZwzG&u~xz(Cp4Oz>R13VC4o2#)+m`$JU;Cg@u{6zC9(Z` z5s!QaBH3$l;+L5o(7ClvBt%jo!v}cQatsi~nb3EVN?ZR|qI!GegGIhj*-KKEc~fhA zC7m1d3wE_eFVD^9W6!t2v>!LBQO;ab9k?5|PTw@Zo?mdijz zN^oYo;G#R=SB^x$c~L*dJ>FvrH>_f)^|mD@^GE!7_nt&rbNq=HIGVqMhVB?+N`R&c zm`U9+Ul+N5eF};UYNe?ilS^QR;Oba3ZJ++5l|pH1I8{nH%K0|t2PWow_XQDgs-?ij zXv1emxpj{wwDMyswP*r>0LfYxgulR2?%0$3unqyHy?*`G)OjcOd&DiruRmWQb+aFW z;=i4o_o1_BDP+Rwr2Z2sTcM8ImxngXQE1=~KOq{$dyt~L^U$rbXsaT8<6xvvxW`?P z3y?~8!QY20_d7uGZY@8C7B=M9JLqDrcQ@vbcM>oE%!q&H#m+)JEK=;k1DY}Foar$pl2WYoojPC~b(@!m9f9^ey zd}o(qmQ!XP78_Ze$Z%WN7D|;W)Eg-5l~9eBSPJXY@koR4kwMRH2`ypT`8yM?g9+bo z=t$6jm;zo1j7am7P>23%5AuuPJSw{J6F zt$KYcy}!gApQ~1of9F0YGJGV)PaFb{0ztS4b#zq2xz!qbz8;eWQM1qg*62dG0VLZW zaJvpX#k_(<%GUc3F!k|?Si~RBixFF>0~omE7mau3<>J_b`AV;aL8fx4TI0!D7H)5) zzbgNKuW}IqM9hojbBjpjjS18IP8n;@D(u{w@sQt_9{5{yabK5}k16wO^p9aA7AN}i zTi1rt{T|-s<&U+r6Ny+T7V{FioB6nEl?iqA%yIsOKigU4nL|m7{ECdj7e+NASpRyc z*2k3&=~lKpc|tYQelQmO?uk0c@`ioM5cF)i>GkFFlTKje)d&ZkZAc(qOX%(Jy0_op zZx!P9TYy#`J1BoGBj^T=$Gq*5wR9bW)ww*#?rUhsoFjYLMfkjko?!>9ZNoA%o0!Fk zonjb3V)!m`om3poehv9H2gi;VHhfC!7sGnm7hlFN!-RfaB`#R@Yt?{qD`%{iF5QX8 zh9~1?;tGvNa1Jl*8y262brDD0K9)zT^iyDTYIVf?nYjM>diohKn2`t+f^-U50Xizt zhw%XmcA*1h5dElQXlC<3S5Ch2t%|h!3akVWMdHmfUFbYo%r9LEGjOLR1OPrmbGjvt z{&lYxp(wC_d&_#PJ*=p^!LxIvx0t~9soszR6wZXLuzY}iY9u0V-Kw?>JzbGtnX?#( zGOB!?U;@Lc@P?Sd3HHqAr88ToMJ;6NcnE=0PfyV{!#(p1lcNQY&5+~#TvXVZU0?6a z_Mlzy?SHCeXv-bQ)K1W%^rTe>4wPyq0<+BvTB^$?NOnSA>R<1cfFS?TuhR;(>~V8H zoPfS9RKgUViSYFkEiFaGVso8Bs7D_e=ZM;+Rr1X1pAIf>Reo-u8~H|KAj!LpMFh>S zDNRM+jVCIm5kU6$ueUc)_pP(u?0E+*<@8KdF3|!Tfvt(YkE>Pbpnak-Q)a#@IsHK@ zb~AaHxf3&-p`)dz6%3LG1!b)~$&%llMh7b_%z(xdq_Cq|P<;0*Q>S5gVknHM(y8xY z=Tp!6aE&?KSRi2I{p2tv*J*ek`(8odkot~``5cq)EhZeqmTqHs6~ulVx^2hP6gtZ;ZjSz3-Vr|SX)^%I&I_Myt&2RA=11|_tL%^!dd~Aj3QQB|-c=2L{@*7bUn@#v zz4I++Er;2duxU$%O-iJ???&Tc21txPLQhRezkMh1WHh?&i^S#uPdN0EPCWr=%%Q>% z(X1sV?htnF`46Lnq`a7UOSFg6o+Ra0L0HzDzkpL0Z>|!-{-AuTs!BI4^`AHW#HIYO z>V`LjL%q_wU{Rv2n4X~V+nSqTU$htnsY;LAAJ1cv;Ou#C2^{_O9`oq&EF;x_ubPz)VM11-%H)}o1G;Jyt9(;{F^BEA0~ zBa**^5AS~nZ_j+#LG;4*F-}#!}o<8L<{nCwN6d})e@m?3q zd232yfdY^Z8-gnqRk4RO%GWQjHNEhAqU*q-pugTTP=g){XD`(6#|{o-?i|{)=hGc+ zV{ExTZy|9oRxpnW)`Tp`VPjUPCrBN#K#5|nkPz2hT89~ zrH8+|;Y8vO#&7IMGW#8;PH^(7H&uP}yQ?{>_Km~H67-!zCW zrdrH??pP$;wIKCB6Ux)i7NhRIHqvjxdX{Yuibf29!NGxNyY5ipe|laPKcR1+x?d4I~FpHQT+jSeG*KIw8Pn!l?ns zay&e?cm`gxD_Q4DBvkz~pql715>*?sz^N{>VqYbns+K4eycvKs2e62Y<6hi6&SG@?+?B~QYi zj}mU)-D#VCUQFI?L2W#fTgr;x#mT7<4n#z#7T3RC-=~jjjM3Pn^P9eD^k4lUh{;4n zh6k@@gp%yr^k(;TFcK$XrYc`8GH+y=1EHFPS+E~cgbrJ-p4(@`1_{Ga%v)DxA`5y# zPFNLXL|n&8X-E)aS>xweL;y^sO?CnGVsN6JnYc?38R1KmFQeVsA;N(YFy7p2&FJ*n zVj0!z2n9_W-~AXk;JLtrj~Te!;$0at1zT~$Vya3iOq)|^wa+FQ`?sxGm} zZY_iT{<2aSLK7G9`uqvN_1ZF_zOGD41{j zYry;27uKQ|7UqZfon1@+^!{>NWzI-MRH8nwJlR^a)= z@2BXLBa3ie_BqccsyvCbDO3{@F{0m-p@l>i;cLEyIEzV7QUM%m;B zeK3AZm=z)mk|rZ7LTJX`UhSdNo2ND`*x!gco&OY>F1=!A>4J83`&fr^kT}d`vPo$m z>9MnbT541;9%2Y3>J(N0OL2`?>=L)lolOI*AuGDN(lQ15Sh| z@(3+pcP?M<)3AF%lt8mGe;6vOAeFWfb898V6( ziXe&pf1ZQRz4OvsntgCZ$_#FnZlQ=j?KNP~S3a!P*35gJYqqscSaMH)*j#X5>yFuz zzvd4Je<)1%33Y5XdPrN}cSxyYT0Ql)@!M0?Z_&XLsPpF+p*TYKZjeSzxXyNonaTLQ zrz3NPxM6WgV_e<%Es~j=RVNx17Y&-KOk=V{JnPx)v~wu6QFpjOFfkLE+j`QfShr+D zUzu3c#Hz%A8j%CraCR@_o=LsM_+HphB-7xHz^y!R5! zBP8$(+sPMftBMngTbeNy`qdB1B>I1rX%512YeTRfZ@M>73Niph08Ud31!9PJ6OowP z7-m0@Yq@0xk+24YBSc+|pt*YQH&m2OU<5vmq zwtUKxvboSy`^}N?DgX7_mxI8t>DkUmz!n`bTyPTS{F@gvDv@3r&1AObx!ZRo{Mn-l3#S3~e(oj+IIER6oZmWL5fF z;hY-oX6PSiZ(51krM$jg{CZ{{bWcs30(o=P;sg>SLx!29tx-%tAbgYKLC5OFX(yY2 zVF$8(pbC4o?Pt-)Mw`wDfTUQz+BLZii0F@kS%XfrP?$$i!|BU5Mg?78&=`dE)6z9YWfQs*&{e)qPvSszutBXmCbwS}q(kZKgNh}5S$Mvi+*xhXn9u4gz z4+FY=U$AaTy`iN{ z9OH+xw^a$ND63gltvg_&>W!R~Z(luNT&O^;k9i88(qukd^jT#I=s?!+NDzblzg(Lp z>dJTa(E4R}Nk#mz2n8)yU}TF@#*rBi>?~k>&e>UV_*5|%o2@U_Gp(xYzUgC>S)J<$ zMYCX4md^XAnW53#D%+(i+8k?kgn(Y1==g59Moz6NSs-5hJLl>zucBoUz(qj1_t>vR zCQM4LUWs-BLq51X2wyidQk`gWXZ`>8>xMM9TuoAYy$9!-vHrl8Mi5-;Df8`je<=O7 zH2P+L5wUL-R@$+AiJpH%o%Hz<2NR3|U1|RNr-#7{qVv+UQgAsQ?c}JT+aZ>exgCCt zc}3=T6{CVI)OwK^=mFD`x;+z^Y$C6bKiQv{5!C7_$-e=E2F3P4jZoJ03s_3Rmk>=) z$<$SfFtFNwL4Zxv9pSEZEr*XjFS0L@$7BL(^3IMr^h$hDc7&*9L7=ZbBfhgI7G(a3 z+|;&H`RuCUL2ae~v%~}2;IE%lYhWgrH&CeCH99|?6Nwdl2Kn0hprCQ$6rHY|9XXxi zhN(ZFjk&q38Ey4_vH)uXFk3~RGL>VQgHA-L|4rSlYPWDNdaFt*dr)6q+!S_vmaPs# zTKMUXk|A&oAOWcs(==NWSdvLgh^6Dhu9auptt5{j-j3U@M*2rYUJB~sndGx7tkB|a z+JK4MA1TE8$o-jj3bhuYwz#(cmpQ9F07@M&ElqKMVn~0`BoK}54heu8&N3ZRgl@;cLkB7aFun2L)+Rt zCBfbojNKSJi|>8n%8bFZN&B2hgimYodo7=z^h&dJ4@9}NIqBj8Jd%@S;*?O&e>#!C~~q%7RlX|pje>y=K0{;9@Bm?#HF${X^~SmMhht<(2|?hICCiomX7O;kUI2# zDq5AzsMG6=3<$rS?YW#DcVmtND-X>L!o2)kt0O20$%i6eciX!rs`iXCMY(LPMDtvLP1g8VA5ok zuHS5ej#C}v%E9IN>A*Dt8KCZSEbtQnY7FT7cJoXD4?W5#T||=)0#^I8?bVUke3JDz zUq&sSZk`2*$7|6S#)GmWl1XTDRV|;{w+91F3p$zX-s9^9mr4pNWHb9$FxUr)>r%h= z^GHjEH28nbGhkK)lRKoXp$CzT8t@m~VSE7v7ax?wdnFzgn#NJUR6&nb?oV!r#G3Sj z&{NFTnUxT@W@GgKn%caC#Y;-!%o}WWNcPd>T*KHAfirP$0{3CeNCUjU37Um|y-Q-L z`B8;h$J>;YBP98wO*{3-2AkwOURVZY{1xGriTB!@2Q@BD*`DP)+~5_yvvuIi zHN!m+JFM7={SIS}+^eYd6WwI9SiYF^qEwg*zO5iKw6gOm7YO_w_n=X;1uRXR7xc6jWgo&Ga-%i7|X zh(2f5PwBohVJi*UbDG3FQ9n!_I${s`mu=dE72ZiNcX-kvsFCJj* z9!YHc+xy3NFgrKtrN_s#I5y_lW%rHs4t~{20iP#mPy)ZaG-Msw-Z)WfL%p~prLcIf z5=c;K0~QJ>1NBqMm5$wu(m;Nw6sR!b94t)`d#Vu{5c{B$s=UO|_ZK0*s*fE$)nX$O>uk*r%S?7ALB7lI*%=S)XdBS9Q~7#2%p)f}Sb5pWdg=&N?=dyB2r%%qz>_}mMj3rsN&@>ukfwe&>Uwwr2(% zzBj4J#~xJF;-K@V7dz(+VaLk-Sv8Ku$&*%+Y3m&zrO~j$xSb;+yoY5k;e!oTa&>cP zWShe1TpbA84JNoZ4@;x!8P8_sS6Kt~00biDn6%@LOl@cE+G4z3C8N#ym0v$j90|cb zW~Y1TC~)MrX@Njgn~*YSWvIZJ%fUbik=krg`?A_0VQ*eZy%suJboz{?hI`eW+c{tM z7XIv9cPReG^!Ya$mh9txdhj!RV($)ExrLGboewn#u?R{A!9~R6Hi!%n(5qn!27ep#? z>{?H^VQjD}j#6utH9x%NoKwSlepZ9=6wmYvgr;`I(bOnq{|MK5Fr7AzO7L! z;M}|z*s$Dv&HkdfvtYuveOqq-k;b#X+i8*Pj*o}g)M>VIpXT-j;=_!eKWkGnT)gaH zB3aFD4gb-Rq3sMqBe@4iqZ;Eb;~SI7ZAb zuQKgw&K@ZcyVx4{zcAZw{vQXpw@e^?Q+={AmHH*2Z|XxAd8_bk{S;R6c_JJ@f*Jw8aF3=q`uL;YCNQw0c0silHOuEw`?!uhCAFiU_*Mo0Cy+C zoL;y?f$ua2WN}@>97>WPTKe;!0)}>~e)LW)W{||KCSuu7Z!&U4X8H|-SofD#Z91s; zes_a0|BQ(ML9zT7a>j4{B9yWo9F=qPuioXMXL2&JvzmpvQhC2t4ezaV9w_xEhfg+1 z_x=q4QwfspMwOM@P?39LsidU4uV=fs-6OecJ4q{+K-*$I=%X0+>dTC%7on2OaGL#+Yd}q`$#BBR?tc0(_{$U4R8w)GG;|;_p?&N&7za!>W>p@17uG;t7^S`3 zm%6nt=o~uC6EzqIPy&dUm}+a=k&?v0@Eq&;@Np?vHY zU5+5wGsgkecNr^=B^N3^bBGM>S`^8|qS=4z)iZ3>dJ!O1fhu6RBH#}gn_bo7*n+1`iQcUv_{eYln zYUbsRkZz^}7({_<=G`5L><M1hVoVTl4@J}mfO{U zrsnen%A1|p7?JPp-L2e_SH05rK~;g&OXmN6#S2M6wAxVav0Tv7uNjYd38-tbd8zMs zD!c}c$Wb9f!&o(*2I`^dN|U*Qtc1j>U*S}N5ccL`ENMol%YVaDr%<(vsr4>rJCS-; zB#(;#>QbmMcRVnN5)4Z2ST*#X6S@hWeT1M!EI0@8b~Kn9Uzk_~FE5$)Df`yUJl&kWH&_J()rSyL}-2t!#3WtV~UhkM$SFK6=#}+FaG1FVH@I@`Fd!TK+ZtL9GPw6uozh3`!Bx z00OhWvJ8S*#^&$Q?a%Eed~z1xIOLl3B-gs|SDmIEW0W@a#IOr5 zqCJ@E`hGPU8$RZfZl}K%UomFRecVcTAe}mux#&BF5utO{DvpXa_GJm!j^%Jrf(&P= zu8Iq@c{?)JB)qy)$-Ju9c+%+$mTzh7=1{Z40e{Zw*RWBfdTQvAU+~``sRpE(GQ8o`uR0>Aec z;jW$~xjP&%2Z@+?77-$>(q8L2wG?Qf=S6mK+~9MH7InFYuOUtkhqqA_Vbp95y2R?F zk_P(XiUI82MtqyvApIX(ux}>~>7&QDE{IY@nhf=thhqjaPlA!od6B3-I^GFFr;|=! z;Z{vf1ZTtsYMsG=e&aVqspacOqGva z=YleB2Ko0|UKj?X8c;(&= zkA{-Ev}9$9#nh9ARa!j0zV935qB~KS8um5mo5p?bOx!Gy0n32`Npsx_w-H}E%vLKx zpoXhiSjOqy(x`GHP#>LcNou>XZJodqCfyN~d-Zcqp~?2z6K_7rDo4Gy+({Fv+nw5F zQ6>k3U~Lp+ME|k4oG+!_5Nva;QN_h|AffzFhvzbF>wk+Dc?`dqnspc@n4zy#9oit#2VN8cOxo7wkYz?Z4|$AVVBO zJx3*6zaBDPVxe!H@m>^To|5tUZtC+>6Gx8vQp!FD5y3)y73*S6fbIqv!Nq|^8@~rJ zkT|)pr?9W>df-{YSg#?u!Vg;?peS)Y)4)z~!Sh%xWf8cHdkD+3bd!}uh(K5Z^)boR z^{d3YKaX7Op&v9u<4wLSp-^kLIk3x*4>q>vlR(B;1r;(e>+a<%6b;$1+qGOJa#+8b zm(*M4JAvrN_`stFXh=Qvj0!$jChnSom7RYq=CD>@oom*%2TvMIiqT$IKswqX%)Q1R zOOUciAjUlO6uo1`xY@k^Oh;Ak)D`Pz zI%SAqj1G`SIUTa0BYP~`@k8$$i89rB5g>J$dze|`fOhvN%T=n*I) z&d;{4wNM9lED!Ti!H4W8j;pqOZ^6+rt5nCH$ki0kvHNV3Qos zen`>w6U`Qyy)USwl%2CAJ22!0>7#+SQ_mwPDgYH}!~F?$*I!p62K|m|vx({)w>piY zvTk!pAI${q0z2JXsqYiw=^DHo>d>oc~zn-U}yO(f%E*lOkY3Zg+Pawz^eanwJ$S7JjA(O9jR>Ql?q8P3$c=~ z6ybFn#yBx_x${wB4|ji3@;b9BK|!7_{G1b;LYtX~%@~){BRximY?F0;vV<5XA?l>` zPLw4U?nJ=bky^-l`DgQMG0n z^X03}7sasVd)&KxUMr7(GPg4tcX^DiekWlYDskxB{Skryh@e|K^!(&Zvwdr2FfE*H zwo_ysH^9+ss#_zAzUlhr`V>D&(8}$EX*5x|iI@w}sJp2s``w)KC#dy(0zm-nxW2=X z$ALgqG02TX&bKUZ$0FnOqlX{|)`bH7`(8oB?Nz}aZ7Rm=gL7!ekx9xr9?E|#kR zWy+KQ-hhiCY{ltq&N@}Yry9Bx7VM{FO%BUK>@Ot++F{VjJ%MstOh4v(hU-=GP3tV{ z@IL)3_)kGcbmD-4!N{TitsWs&N&T6sKD_}HJAc??VU#abfyDb$<*Q-0?`u-7Nw}~%5n%p@mv9iNMxj_d9x(O*6N2ls0Oztm+K)??{2U!v!^0{ zp5}TrFfmjOZU?8^E;Ni%4-;Ld=5_-$AX93=iMmc9(`78R?+&j`>A9t|rrKI!iCaTM zSYR@Bn{rPDMH3oqMaeuFjOnlBOyBxqz1r5K`v@ERF0Tr?@86M6P|?7I7-T$B7NYbg zH$eO~AHPltXHy2FTM*Jybh`&D-t>^6Zl>2?qBz$?s3C!tVbZ&btDYlg%^?sto|FGN?{k%=7pU4^XuJVZSl-#$1 z`>L(dj7h9@2#)8De{8XE#EOghGUFOSdV!x8FLArmE-RGQhFna5(LSVaPvO6aDY*xp zMeHI+$BKF49B?sgIv*Z^zU~4~ue#gJZ>Tj^%1K`|<+d=&<4uCC174wRGLg3pV`X3Z zF?4rgz2LO&?2qQt}dho1nQ*-S&&3spXIky`z+VKZP2av<)~s2D8A%B9i2hc&G)k-#B#UF!6NF(+HU~02di1>F{e)UFC(m+$X*1OZ z2x8_hO+z1B{Dh$A2k}smg68L##>@Wu5Cg=AAW&n@xagnwdMwH?>W8qi;X2moHp28? zi(-Yykb&rT%ON#u*i+G+7A*1Jpg zB#@yfqisKPAPx4j01#?};sPcR1b>(v1BJiB(^-c%h|F|?0zQj~z1FD|c7Il)oFXwa z$wFEXtFbk;a9EOX+;6G{!OMrcQpjzE3A7+<1MXuA)bM?Uv4Xdb84t6N8h)Q%N=MGW zX51p=j(kQQhJvGZNd=}&xB8)*FtfBGs5wX$ZDdsdhhYG{+Zk6y9yU-QjBSi6*Ud~_ z@vRVfiv^f((g~>&?J|iseu{8pvRNb5%kk&8EHHA$-ZWdL_$7uCPxmZt$e!QV*k~ta z;(g<3I_}5zHZ`hAh!0|rc^S9g{8wd>J~;65-yWPEgX(Z$R3y?PThRP;m<4$oK{v~p zIid|HDF~kr8F))gHE1RKCrU>y!)90%FHfFeF|DOHlplY%-P0=hC3~BSl>;oN4GMFN zNS2#HRC7$8J&3Om(5rm;bqnC5!Z7*ge=FPLo*-p=9^z+}5og`;WbcL@)&4FiW=DhC zEwetZRo^4mvFcp28IR&gB@>*@@WZMNoo$& z+Z%kB?=1rjvFArwx#_-Ysn>bwy_|-OU^8ZWkkVj~CPz$+%~yI~=paw7BKx=t5bWXU zNyt=wGaoS{fq_!{3tZU^WF^$+@)e-11vFOKs#-7&ST41{cWy&I{@EHWMRAW~kgk|D zO3&PfYu(cDt}#Ej2J8m3Gp!x%d5u#10cKHKM~;6y5*z9leHBajpFTJb71aU-sBX)d z{HMLjM}7NOa7T^I;UScb1sTnM&h$qQ>7P#~XcBlkO})O|hR^k==Sh2|>bM{KytVZF zW(2{jJbgvfA5Oj~^J{v5xh}akCvwlob=8svH=Od=HFdjn#K0sA);2~)+UrJ86z|L$ zb}YotzP?c{a?sH+-v7FF6;gh#{~5KeQvgQmfK9PBJ`ZNqDKOC^gJM1VXI7!PnO@Df zsF^=pfhUMOHf!cJSL=yI_x$PHW?5#@Ez?&k0@2pz$gAl5KMv-_98)+c#gEt5>1QuR z5`_s`@O?G;*WMYbihQID1=PWG&N_MF-Lib8v->L5#z;q!Y6Y9CYXWi_CSiOf?E;9* zKEX(fvd^Xa}if7yrh}!_CD4ELb78CsE!#8VE7Y9qYEbOIb3)?TNp1)5!WZxpRrabz0r*%$JA{lO}DtDN-!N1VJxV zZJY9^nbzHbGIw%?Jz>+=H|52LyYl04H4i_t2O&iW5C3a{2?W{!0-z5FO&>ndE^oCu zk&Xhu_0iE87AtM-WPw0I6Q~I1O5SYT=OERi-Hk82RquGEV<2^1j9AMsyVg2Z+qf@B(t-S-y zg;IKhGh5qCQs0iZH;xYeMmFr9F^@^%_6DeUI#-fG{J}*74sO(yz@}|CvJtb|-@t zp6$ui8d@Qz-{`f`eL!Lbz-$XdqD0SFZ^j&#Gn*)cJPpf2Z>ssrn6v&vNCuDYc}PqEn9TQ>%hSZiH|$a8H8ttIvt6a zu&sJEr>R(Me^q-bX07`rCKlk)_4VQAd z5|^p?%Iyo@?wHyK-W>+2Fx1$ z!XvO1%rDXCQd;J=D*J^u;poc%KB?N+E0}`;lh187e+)Z5TT_9~p9ERjK#;31@ei9D zZRiu_2hYE(>7BT|)_l(u0yr-b)*JQV{)4dkd&`*sg94n zv{{-`&+6FHn4Q-4E|)Z%uy>SKeq(Tc#LUp;eGTN?BR{+YiJ5M*tvU*Q>R!PM!;3X0 z7=RD0i0oUE;8FEFyH{fLY5%sdGD(Hwh5ED8*Dja2%6Rj?-R%?j&gLmFxJ`L|N|UoY zL9iszoh016YC-wj=6B81tl{vGE@52fHb;fF0Z(;2!xAlY;VxX>*-q5wrrz!bBGY)w zG&si4rytq&HBh=`Y44ZFuOwkZrFo4#EfQM`R7BPqZQA@_I}U|26rMIqb7h^i`T(03(Cb z;GO%+xrOuhe?m3K#R%puU&%6%r_;fzuR)iU7DCnT(yv>t5Ls=9^XHDK$N;mg;5kx4 zLJH$fdwEG%$x0VWlMQmyfx zBEp*>^TUbLwJ(>KG)N||Y|*V$W&?eAzcB4|32OVe;K}1LcI(uf?cKJ@Gi; zlXkc#Q}BMGjwlj(gqF;O3FoxUuF0n;SJNg}(l@q}`Ky!jjl^RQYuVNmGCQ76H&%P9 zOu)XsSh{f&e7MNfvdBS&+2eO8{I{0S7Ft3dcs%D|4UpYvU-o!Bnm98&K46Kyn8&$H zOisTe%FWw%iGduhtiYn~DceJNIIXQrGnVH+pcpYPVN&{H^R zp~ex@avw@e6qYui-+}m<|GcACDoekaUsPArEBr>)bpvb>Ew{5EWvO6bdMYw?OKbh2 z2Ucucy!o7nZQB+fOu+_wk&GX&(H}3E40u+A}j4en&veIpraN&k{!c4i1Y1v(%+8^i!P{B!8fE5V55|v6Y=~a-5&04SGc1G1m8R4I@0quAQzJIK0#mO$f8Jyt<;=B- zeZP5p`E0|cW;&=got>R>TQXjoAGF4az0>qH5(Galfwf(uM8frk&gw>77_KB}%-0Gg zVaD2F6T)&wn=dgv!dIq5LTKd7hiqZ~49JeeNK8XDT^K>+vC5B+lkzO-(qb|DqKc%g zsW(^R1I&ut!=sVAt+*JKG3LAbryqw)I58h(HIrpAbE85Ic#~H!B}Q4luW6OOH8SIf z!+Hfz3u8N}0p^vC(z(}MhlR!~W0Z_<^yaVSQ}IQ#_5tA@mLw@Yo=YjLvXWKQ|8%Fn zlaZ)k@?jO6g1!G*#1$??fu=2@p0>zBk?L>?wSqeqE~!5E@!fcUyUzW4sMDRgwD81Y zbc)?i<8BkpO!p^F*PK5y5b3OZR`zMkbm%wm9n9KZdHO}@2RV5ePW#K+9j5^%5WFv2@xz4sC5!V#0MAO@ii_Djx zHoS;bWWV9<9J?4kv4w=+J5gOO%KLTwXOoSSifrpj{2J2B+t!D4>jt#HRVpKJ@%TwT zvGHXrH&r$cXSUn#qXw}&U%`zp+`wZSTQ~E3+IX#X;Phrh@7eBpKR#}T+v*e( zEe<<5q_1o?Zq2a?5;I8#EnavhoOu3^Cri?@#4|%9uPl}aQ5!557^bNVDKz>Ys)!uH zQP&A}pE+PpK!1IT>rt=k9QzKg-{bPT9NWlhWrHGt0nGIX+>2{!}r}D3q!&(-k*OnF>Xk{353Q8)@xp+@!s|ymIFLdb}kY$IF@z+v-OXEo!xj# z!R%(k3208&)X(_CI#lz6&KNl(SS@XRn(}xG4OBl7;c_Q(jlYY@t`?C={UNz%!lhkO zH;`+&93tKarS|?3zs$x9E;Rx^J(b8axu@cXb$g8e;l>Wu>)lvV!uYD2)?REt1e-3KO3^J1 zI@6~IVOwtVr##wP1INUru|!B zr=NhFjJ4)YYjiZnK9GI#HJfJdIOmzo6t15Bber5^WVI+O>{Ij#r=ypV_brR8SVswm z4CHnttXsvucv(`7fA(WW(8e#LuL$A-g_%_2)(kcdzZacXacbfnVW?E1VZeVKIysh) zriGL2WsreYv0bryLk4L%lF8k2Vf7=lAw`Qnuw~WBdwHKgdc|M^@QflxQwo($s)BKv zvN8;&zOQQPWO(1n9N9}DySDL1*G_wr}!a&)Xl0;%Vz zVcQuwM({*ZuQPYJ*g?uBLUhT4MqkT#^Wfvkui=ibvmL3ok;?5);0ui6SHg1e(IS+| z5cDXF4C}y+&Jp6v#Fh4r!v=gObadGwQDTOT+5#7{d#2pg>j2Y5LK6!JdODI|cymv$ zVGw=L_08v0+8-2kf%nFsl-H}d-PaPf1!uAwb>?)^<2)?S_Y_HdDbaT(9?}h=#nb1m z0rHXz;DfaHqU3EJ-MWlzSlFAO>fWy`E(az zdyYd0cloGL0+~zyYwWxIjq)}l2xv7s9Vd|O%m z!6yN|w3J^_t=^t4!zzT`%UQVlzx@m136LY3QQM{D0Zn#SDmTL_XrXftnUQI$c_w@J zg3f}Iy~_1II_0o^b3$Qx+ z+!jf-BUv_-F?4b4PXkkH=wBY$Hb-LVY5u|&>W;U6qRxQ=Q)Mo4ysx5BXT|0?$x&-~ z%^wK;Y}m2cHSpix3L@#Sj+~$dbe;~_;8MVUaBU>Qckdw`H|>iZ0fHp$mB3JKx#dr* zBKw*@c&mW5oV0GskI$lFgYV&E(6?Rxp>6T)sDEoult4`q}c2XIM>CBW!vMh(uqM7F>tde7ZUelGWAgmtR){;uqP0134F(1H)&0p9A7=!tVYTEru z#qMatB_qm}Z9UBVZPfZzB;GGI`%?1z8>{?)G#Q>BBX}C}px1zFGkis6H5yf5D)bCd`HE%!NqQSr%dRE$Lb(YVW>emSo1VMrcXKX>{agT~%$e6WN@)yE1Cg|(D(&~@ zAYOC%bwOjNr|YJF-gXq+`(;~Drw0!i80`Ce-ydCa95jVWC7uo#OsbwaH`LvA@21;y z>srGq^)Z2buxg!x0b#uHCKrRevgj4rSdCzx8bYBseEozGgt*km!}!f=hp@W>J;q79 z7hmxJe;;la0Go6;^%Vy7h#_*sXsiFm%Ug@qT)23`A^bXsRe+*1(`3z#CnO^|5{E_$ zu?w`UnPcPF-qx4=>N2-0GK2(lTYNfJtVTv9&dIWm9Ii?FMah&|~fR8MJM z)UL&{;ad$a zBQ;(5My`Y;c$NSzj76v@(wZN1QVSwr}`t$}4;keALgW$8TmL zyN18La`=zUP)r~n|7yIXysatfypTIUxLnG`R)mbEG(pH+g(3uX+;!f#dt+rfNP{S$ z)_lRpZgQ&2S}B^3kD)4R=h+Ct5fvRmOoJ%;OMwG3F@^~R$ykk|s%ok>ytn+Aau>mw zQ1kxS>FL1%L$t)sX1;@#kyF5)1pvdq0XJ~)Reyiyb&`?1<(Eb@BcLn$@KBa^NiX4U zdHrn{+N?gaz@O&kSO)?WgN6sI&|#YvL_D0mn$g-z_9XFQ59cXp1bXaVu)i-7Ad;{? zuK~$!3xT;4=$!vOcO$oXmlSH|B1ix)33W2;Nu)1EHR15Jy_kKsV_Re~d3u#aHcssz zdoRSctdvl>-tP|BF~HcEewliB#9;gl+MGX_Z&QZ=)PtH9X0vX%jlZzW2FZ7BVjn3zZle)-F* z34IvEvvFhPR>k;wYD`|t3E;%=7?tESmQln+itUI<=Ukk@;|F7pT#K}5%MR{L==|7n zGW6G9Z;h=2z4LNfuGudsGAM%ZbEDu=dV+;Ig0tscE8|rMLGAMQPyba`_fIzGZ)Z)` zgf#U(QG|94v;YS^+sr<`QEqibhqo#HWSVxu4E2oN7-~Lp(7;PZ0ySrhS|7cF5-;R! z9TX)9n1Lj28~VP0)-q8{Eg7GUWjCC6%IA8AE5A3-l;gf{y-k-Ufonb61sAQ*4gfR9 zg;D2N4yrH3!B%p;TxKiD11TNje5K@^Z@?UGuW= zj3i{J*6{w!_hvuVn8tgq3=MkM52&2c04RmaH0Ez%3I_+2{W%)6@BmW9`*_B1Oe^r3 z3kF~U%kEl?b{Tyq2coo`Jn=_+4DUhO5B04cQ*p_}9k>cO>DIdAB7qT_gC*DL@GpPz zyr4<*b$EKCKi2POx!k4C^JSz*A3ZgS$4JNHhAW-KTAH0h0j5?8&|I(jlEU z@pksQwx@L_(lFuSc;A6>@4XCN3e;kjk=kh6We)7j ziuCU~aT^O7`bg4wQMd-wSYS88OYSjm6mZc@?kJx6st-k0l7a4e$Hz3Nx4f{rX1q?J z)hwpV;%+5(9~D-+7T(T^wXf+j3IHRk~{?uJ+e zIc%xYN`aixk?sM1P6j1Kav#vZT|5^hBPGjl5!3T4m@LGE4*rwB^~;Gd&rntflyh^# z%H;{J{ZUQEy$qXbYo*xgKay|4YO1nFE!6{RQ7X?h+bpctjX$3qI5G z)WjP+5>U-W`1yMMmZy$mNtNmQ$X$dnvv*qbZ+}Fj&5ndQPy9Z88Zh}q3{im0UUbQ;^sKn1aoxO>t}1)}W4rw!0HFsY#VK6i*V3wjbm ztvrWIB8)?qiU4!$4%Gsg=(|or-6$5K02sUo%;QQuK|8k~@Kfd~;9Swy=jqIjy3Thx z(q)K$r|JF~JT{gBzGWPfdw3@*z>=krEchr?J)2zL^+}6}&2-hWQN1X;zWN7iB#QJ$ z+@rXIUB}B}z??5oe-89uBBvQG<)SuTKBI@jG+F+uj9;^ki(^v8AzCkySQ+cKjgSse zA6rp7+(Lcp%nU|(6h5zDR~hg;-@ND{Y=h0=^yzviMyr*7_Cv_Zw`hE_cfGemjZb9~!tu`g8)!iUWi$wv>xf++i#7&rsMjD~ z>PFFYuV}{cx1x)HBiFKYY`@(XiXH#vzvg3sTtD~?m{WH4w~uY#4gqo0Qf~SntN}JA zE!IvY77*-?e-Uuv1A`RFuQvRnG{6EO&=ceX%J$o*v^VbMJ(Su(+x%W2Bz<9a0M>yD zZ%~czJK@$8l}pQC->eTdr3AOUwefh}_kO-yJ(?MOKi5xV5WemS1LN zs^pKYVAj_uvN(jgVljr74BHGi5M1|?#>2}BF2Ma{8 zZX`BhbKzy~s8|?TuXx*z(tWEVv4FM32Yoy1J^1eAeza!@;<4|lsnFx`y~On__tll* zXM+i_Yue#&R*JsQk^5c>w>ht__=tophJX&~Z+JPdb(S55vsq zNnp@;yRall5X{vb6PWg@d2Jz(PCfYW;TIrn6cwwB#e=)t$O2CgI_mACldY}U@50+e z%0#Z@^Un_?fQ}SU963L57*sFrY|fMg_%sBKSBy759;5{8)F7{eM)^Y7Sg(mJ$kByD z^FIj+RSX5-`@n);uX1-g)ag5f2Rnh*B?!)OG5L24C4Ep&_%|}|S;!ttuVQHgQ$p8H zFxv`Nl2sffJyu(iU&_cv%p|@SP=6m!9vFdvDYG4xsM?{x2FBTE)AxB%fMQ>01K zjQ6ErMI~cgBa{a7LVW>q;a5xVSRQ3*>@~8uxM|7(Ee_McRJzsWbqZL-YZ`V8pHfjP zHY5r-bZ4NRC3f#S_tRK^!3m0Lw!{}&BLiaY7~dBPhp!==!QFQ2Tr%k!!{N0hVB^Rwa?!?WM&;i1WnZI@%LPtucHv4At@D8 zjp$0>L+-FsP#j#MO+?uWjju_A&Evkb{9U4bB`r&ZcP{id%)N1>p>B8NMufLbpcL=y zwFbc)*n%SPe|vkTU4td30xESb%(i7o-}U19cLpvoqbm5vd3%DWuyA5eHbf zUJ>u8ydgRl#k-nygMHzZ?jZi5p%RovnAu^>bJK;LPE+5am7veI`K(Z{aaot@0KeNz zr>lkJWp~Nw{F2Z4jst~`TUOV4h=0p4e*gSE4}wlLyBx>gU`>6qS_i3L40Q`LZo+VWavi6p}Nb(p1mJ#S&!HQzS02RX6d}gcrTc;-ZdXz``*HE zr_Wf1OztPz(AA@U&50k4nwsS)x!eADLPL1+>K1|?{D)Yhr z>GAjH6+++cah-7rP1pu$!}ZF!R7I|k&Sk{Kp#V!=B4)NtRt~BrPcQ)mp!cFw9ct9@ z<65M+sRl>GvWUL9d~A`mjgMh3dw)S2D2yQ=?(<%c`57Su-I9=~Mr5zk3)2kSigPsq zQOK;MFll>*GqvsU_K6_78lS51z&^o!>SLJLDTL^C;M+DQqG}O@3I40~;Yi;$9rqxb zr^i?jeZhXpdW+uG>T&iz)jkrWPq$QuQxmMV`})o#3BfHUWfN z7F}c^B<~E&{d9fsZ4OBI=H?HvZmIXW%rQTM^zM<~qoOYvCjayr+7z&8vr5Ken}h*P zx>JBDH(7ZF(6=u#Qw^a%(~2jm>bfR&6UMwx_eNX^qhHB4-$T9Cb~t0*Hh^`rI{zjZ z^PGZ2RSpLlh10;i>=>VgT~0FzV^ z7A(t=kZ5HG&DRI41>sRQ>OlXD)_02MmJs=|L{fzLR^Fmb5td30vtNxv1EPYwRzB@d zcqr_sW2#v;zw%|im!v7Yo)U1DSP&N`f^t|)6}1O`{GQ9d`!ocl)We0yc8p5bj) zMjfIML971Ylv}!Lu?tF+O8q$=fBk`Tk>i7in^WO6E*gN^fC}pn1xm1jLfYnwZMC|U z!N`-03TaZqoZFc=P6>I3r-DX&W23+&5nu&aIo>2ga@t}y=<=4aY{ z@Oc|W$fW_;1Zqzg2V{n$IR&g$fkL8Nv%8#<$Hj86Z|HfbZzX%Vo@qUpCM=$?z~I;C zOaRk!eSO!zqYgu<+NezETX~-&1EDi=(rN0XV<4LMW2>bz5iC)(Xt~zw89Jo|EURa| zStvUb@2-*mqfKJ#q#Fh9fqKz5&>vK=3+#FwiD}^ymDRYHcVeZRG}`7HLE>eC!g3?# zimkZo&e=X^YDgOuSbnJgG^m%tG@fcSkS{QbwM-jnb$?9H>68SBoNp`u zoAt&M{WHa=8IK*GYcU~g+^=Ikjw6`E?bkYjfERiP@68=zq+BrLd9dXCunCM(nyFhN z(+b+0I^(FH7+RM+>S_DcTw}qR{vFofsfTiGV2S|WqB_9T8SQ%NlA8cOU@8p54m=i+ z?Dz%xAALowjF@?XMLrgPE683S%)b`~+k|P^rQ^Ue6p)pei%E}P)bv=q3uYJg z=V$VF9A<7n)dvNNGdBQfkb}?XWVZk1UXoYXQZ1evnwNmMZ38V)m31|ccy|ZV;#2j! z6{)~IN+fYdU!WuCQP&4M)ipP6Jum7r^{Uvc%Ad&4Mp>h>ed-pa9uTi+L_s-sz%d`~ zZHRajQ*V|xNuEtYTn?<)T7R7J+y?le=mY-~On}b3o+Az&G0d6M)}9|Og4ve0We%Ou zqD-~kmibvp`q6~R-a6&1tV^H;H&SL!Qu4+3m9`XjMg&p)#0|Av90%B;>5;3YonaY# z)(`?6sAre=Y?xU?ywh`FK*Lz#KJyA&Pt#^fxhpffS10B?mJQs0j{b3wMe?yO6|ZAB zq4NflQOA}<+lb>_$s%66m@qPC@4|nvUYNv1W)2zHm;9Tc->w2=kH0 zp$sAzffb-4VRjk*n1&gkCQ`GyZ zvLW1sj?*M{V@*I*(%ty@bIcu?OS~DjM5i+Iry(NcU|A@S_IoB|$ZXS7lGy?+%$)T9G%DqS?Q!0ZfLFSksjao%^5DGye_jL~QCBCgu>KW<@^NwF zdsxo47;dcrXW?2ag2eYD@WnDYNunaOKfG`gIM&Fzr9XVd9~!7mWLNCBLWz}=&*6t~ zVWD7e_~~67Y9f6~W;aflWbGq<{`z|Q)Avf;gou&93B+8%E;iv&Rl7ZnSr*XeW`+J_ zeKJq)cm93r99aaQ=UH)JowR2inE%07hCa+E#ODKu5@1x|Qd<&|pazyTm{sg@aEC6Y4dV`5@%Hzl8pCZP9oXj7Du2;y7Xu!*v%^kqNaO?eL zPygkXw|+G=#TuDfz1d~eZgSTX1h0T-DCwAzHXhp{^$t{eiyo~Mf&BnWA9diVTjT{W zL~nJaXc~O`vzu*Ce`JRSf>A1>O&HLRzCJ_-gy}d6SZE)1tbOL3%z(`kL#AcW2Q0Y% z1vN}F&TV%p?*vPuqKzPA9UgFsr4g4ouXzvzslzl)yxr?~2I`N`@nA76YzCPwy!eeu zU>=0m!<&GXSwj~9FLwGdx=K|ka{Ve8Bj?Ks_APpV7VzwlTL~~T#<({dOJo58`qm=A z^nt(6|M$TI`TdXc7X>;%rq3)bc@p5(#!O4R%ZXNA&XDpE;w#Gn{h0(_@+g8-4D9}1 z*34Z8z-t+7;5FT4oForRLJNk#_0E$os?o#gtgMik4ohR(@9GHi#{c^}wuCV8j(%Lz zV_}uTiw2$2abOs0AuMlTeY&XK1GF(qI_9SulG2%S0NSJ%E0Y43!^wNxxxna^heu1+ zXJQRdWDs%AL_@keoNmR_yFO9*iu}mqfXeowQUP)?4gb{~?-LHzaRE`}h76Kr(fXfQI)>gFRm zlut@En(k{^7U)d?*w?3ag7?^FQ;CoE3uWa%ZEmQ=-f&Q~lmEnONq*rJJr3iI(E<+# zIH+KiH0T{=X$&GLsPO#5RG)}gHNq1py zUqRolFg5pJi*4w86-h@e#7Tw>S4()n#|Ms!_F%ZtHfW;s%9?Qm-Meg64-)4*__c-M z1T2rA0dzfkOJ_iq1#GT+T8)#ltG)f4OeHA)>yhjb7oZ+6w3S&ODg5tP58TjS5rwHy z5o;uM=^zC1my!^eCkTT;H8U5M*fhZh-69%z!5~m|q)1hbU0w(Sx!bhlJXQv?kB zi1>P&rSWyji&1SLY%NcnCIlS7G|xD&FXJ>7=)Z5Iv3jBY5$eUZ?nC{kBuwZfsHM>VSdM2eu^}zLHLMEYPn=~4O+&^2tegvV`dAZ zZDOPCocRDl=S6@`N&r~9bx2bGkp3abgObNiACkO$`Isd5p>j|XeJ19Q6$!96@3_IS zW0K%!eSJv)4Gw{G(l-EKZ(xlLAW|E#*<9mOqCe@GH7ewd37zbuw5%HPm>)dTkB~`T zSsJ^uHnNU-48F66UAmJ0J_!~j zzG>KC0IhUp0@|kK_Y`Sy=RQF@R9? zcn#{!W`%Epf0-R;m-VBHQG`*nIX`Kuo!id=VMGU4`y@`Ejf`a&KjZcwAAH6SJ^5x_ z{Sgh`VZ0@tIo)Rjr53ntuw;LB0u+fq9S5H7$RfSxrK?vgD0zb8F_`0G1#uTskYjjR zwv3>J0eDmcX6O(8@R1=@>TYqJCDJt|dgaQ^@=PK8X0pK6lad)?-8hzz2Pl-;#(5#Tk&A_!^AHUjP?-c_{w;J#eci-Bg1p<~1 zoM@8H4n#ilVu>taU_|(EJx?Rd`VN`wj^Kc}cxE+&EzsrC^bA}mNCy7@^RTiIZ_wg4 zb?<{W7&$kMlF47j>Ft112yVdQmDKlVfx`OS8I$F%5!4yVCQ=YEgP2b{8~l^japDN| z)x#XJj+1UxaJH~%XqpxDO)LAMsVvL(KD&-8sBzQQ9xnDmwTnJTC*W{6;=2Z0oK9Xq zKe0_9OML^y$Owd<@)jWP#Xafz`HMu#MsOY1j`dt1rK-~?_+49Sw=T&F-ked-)BCIH}7|wPz`*iGPvKWi* zwPusXT_ZZo`=E=6&u_3K#3KngQ@07WaBNvQ=o|=K8;zI^n;Wf~AK+H%Q7})Z=tAFQ zHn&0aT8Tv~N6O*-}sE z3iHtFn?~SWzH>mmlU~{!5U%?E%VXeHWO$syq`9Nc`u#8&JEl@w1lI|0D;rPQoezDh z>e!r6n_In-f5t;*F~*I0%2{bXw5x-d8PJ<+Jv}%Rfr=3xG!EtTSPiQmVuwhp^vQ#<-VnjI(oyHc%{1#SYcQmnx(ONnHMVbz`F6l2)J< z+N|Yev}N#aX#g|@4B%gP^4D9jLKuh-t7`zRs&p;*@)T}i_&evJHx^J%U_|?F&Ny9e zW57DJ=rQ2tKLKpkc|9-~-hoJn<=L6O*VbhO_PMob)R}rwcTc{_MXXN%Mysa1c%}@G z#YYs@rbk$~_KwMDhq}f}gxi8)<2eRh24Qh2ynanVLd|`_bvXe6G-?L9`Av z^Xz-E!*A>$`x1f!W@__moJN$k^Y6#!ZTlyCzFay#aFWi(5AG?IBb{WrIQ^}O`35!+ zfDa=R54Ul~=yHFMWZlxTr^PLbT56&G2^6x7`EI6YX;&=_oMa<5gx8Rgw8@XHa;2ZQ zjz%b1&mzZ=^|>tz8J5M0UHi2Rpfg#8shFV2GJJj05!uH#$vj2}wW$K3k#QO|t3`9EZMfV4;D~eJV4dHA@^nFEaw$1Rs6`*|pK) zm*eR4;n*VK!ZqTgBj1VRZ z<}8sl$PWT~sVhSI*X53@w56P%yykjliORo-F)!-3t#TD0oq8Lb=$e@10xQPaA%CGR zWfX0y^PqJSR^L~}zst`Pd1@l9wmxG3?%&uO`oQ=YzEIkeSKSG$CSpX;RpP9MP4 z%sf6t-w?@3%{v|IjVYcOk)KbWI%n-QahH=$euBm?JwL4OX<8@_rY8lk)0LHl3-I5K ziE*#C@ul!=3ql>EeZm!gs}TbFzQi&rS_gpm_OueSbAw?MEjn}jrR|HJ! z4kT-Z7KUNOh~xwKuX<+pkG^g%ShQ1JFMAr{oTH|n<9Lo+A%G>4gu@8>9yrY{(JATC z3yKf_fJlHRj}n)JL8Qe#-RKXa93rXqyViDny1zX-nXG~>1;9?0qzidFvOtd9+zxLq zVJpgRMiV>w5Y>B*`&6G?9~W*~GA=nc9R5WN%P!AQ^L%OaqT5@l@gQ`v3~Dq{_#Twz zf0;Vh*Dz`*A{5P)L48$?l;?m87Hj6UgIC zDcV;O66elc;}_wDGS?%Xvh#5}_^kS2IgIz-KsQ{kQk(DWyg%)#SRs}@jBwX^J5C=9 zFmv9QRJAD}ChO7D*()#Gd;qCBhp0Os?N^Y3Mt0lQH)87Xo)sSc0W|uF#oUqY5k$7^=H~ zJAC%YVTB62T_V58Ve=b#j<|-o^P2QF9{A$M(}U{SRHDiZ$J!su0tobkm(FD(rKr^v zM`#T|h=HT_9BwW%1`mAe)B;XJ{NLO>Q&%K`zxappks!}d~GlFvBKn6fIQasMzXsJcfrfnWSkZlbQFRP4hRa`zSzx_q3n=Rb_Y;9td zR_NvnyTzsCk7;R|=;Li!S-M_2gE zJg0}GfNH!4l=uHN1Z=l~>*;v~k?=)x_`=#XSAw!&NAOGh z=e9FU)c^+Vf9y9is)~ce!LVI6G81_&jSox=4hp6~_Bd@g+l`%EJM}jqi3{7i!a;vc z^ERl{xAQ{A4)B$N4}Yq^!haR|w1J;lny^`r%ydM=U&n}ruJuH`C8z1ai35T9R+rKV z8B@~xOiTJ#{AFi$jLyUFjJ^q6dz@8`NK6T2w3t{ML6`QjL|R59%-@9jAmBZQi7Z{K_XgHTKX3)!<`q?dbd;?fd$D!n#hp9!Yv+5xH9p>HJo;QX z2`*MZDmO(G#8;NOrqga>?s~}dfH;XMu{t9vo%tFP73&2dA}89BsRlUewB)!@*5I*u zzhj|jBLUbu+eJc1Z4k1u&Qy$I_*#+Y{6js%%dLY+3W+nCS|O=3J^w#m(GrX*yaFWD z^36!EG3QS!h}Tp1E|9V$_o!sQ&%6(MKV#%}C-)~7UQA;StZ+}3$yJV&MIzQ|Ax z5k+=Po_ZYuXDie>a%ld7H?RI|N{N9apb82?L&VFoAyK?ek3T-(5P%j&%oj#&_QAsU z?3sLL*|d~b8~8ZAbRYK7=Xuj|w>|GR0gR<#UvI~JmcII^1gLm-BsYYZ|wLlE_sz z$+wdav$dkNEyznridNNPQ2=@yrXQjC@^1o#V_Ht8Xfj>GR_fp{xB(-|uBuyb{EmxYEm zF1$6n$62RM{#qgGu3wcs*{sN-Nc2X<`8N8=50BdemUD26JtTCI7~67QuZb>Dy#uTe zHRwTU{M0gh&hAw%hOuco0AKx8Dk+rmS#iM^gn$0^^|mdM0aos#civEbdNBSilOdVtn0fZqRfcb&jgqKU+PsXl#O4gx04JK429Jho$r z9Q@#u*B)#VY7xa6!+Yj6uEiI`17K7jIoXNfi{_EI;PmOHpUu8wEp|HfmDg~Dv6>++ zh0*w$)-ENRD5(kIN>_mjo5wPGUt1dQHSrGyF7g)@p0!_28M4nds#{9ngLbEYn709i z-abxH;t{=aLNwvEG0g^U`|gSsJp6qBYOgk~`EuKEhPwNPRTU-FgjlzS|FgOI)6f2n zg3kJP8>W6aG>s69RE3P|EDx-_So#j?0cr&zHN?SER(^1UrO(eYg#Il71nzb#R|Tj} zTShl7l^vR3e_^Nm#Y=M5(t}7#nU9tls;>}YTabwH=`&$(Pd<4cxEKy-$MG26Pli(T zWVLSV&DStG1!t5rA3W%)m_XY=$V*h848CSnfq{p7CWJq4AXiTKBp=LkvC5d2@sk2$>4_0TS1LGenz;ApdWC;<2&HC`J@lQ!To_l+VET{Ik?}A zQuYO$(udL0L&sq{M?3SOoR>$xZx%iKnhjl7Xv=RO%{Q%{nPZ$Pzz^?NfB2KmOlx&= zdgvX(;QlWub~&c)YYq}$>v$;#>;ccn^)!!7={I+sC&R3~NGJ4o&Dg+nMX;eLO&_2n z(T19gyFcR45#&{)R+Sqm=R_wKf;xU4lE>Q##Wsl4PTwQV}%%>g;=SPebf6m>lx1KxAQ+1|8c z$Fdp6&f$W5z39y>BXF>_mNr>|O_zN-uZH=)Zm;upILXoo1`>#6q#WD?S%6f-pYzV3 z8uTwM1#ka5!M7}z=E?s;y z9J0{YVU7H{8ybSy17o)GNrTF1yxYx%*Q!d1M17)PW%R|nG18uF9=prP1}QIbYT-iN z`CFkF!=}oq&wPqAo1(6!vYi&qxx>mNDp*q^1(lMkP~*ctW0h7zvwCNEM85j0C2E@? zgGdqFA=w!O*I>eI9<9zf2|aV!s`4so-=004oBQraU!Q&bR#_w#v2V%(x}*RM)GWEe zLq0uZCq*-y5z*J~XKKJic}FiWMwS@=guyl0b|u`Dh5@NRB3!7o(4)te3etvZH+z+Z zI7B{sYI||MbA!s^^P!6)8;bc9E&?i*Wq`Li=Z;zU0wzoMJ}3aPLfDx_U+}Hi6STuO zNzMT%5Ga-yD;63{@s*eJH;z^g1S;Atc%ij%Cj|(xN(t(H^~UzQ6Fo-VPN8il$?N@O z(d%i%7I+;l5_G4sLZQ?PTDLS-81EXfLVfhsfb5aBi^uiGgxa`5BS=Hn40tW)g$|7` zrAD+(jh?>C3Wbe9y6@EsE-=?a_(6a&-JUJsIVHf zqab^^GZJnbgr4r#{euhpFu&qf=)%y`d#b$p=;LHSx8jA4 z6N5F(q_E*2l6z=wUTYiX}g9lEQUZXM}F#P=Be6UxE zvwF79$>T!-^mv;?3R$Udv;Y*&=(_8Svu}QRI=1Cn@z)J&^&pKu1m`L6YgPkmU$Sa9 zO8nB>#E(?->V7aQp`PF;y{_M?L0Q-02^j0nR(z2%3UatT)>R+3J^f{9BcwDdOgdGY zNX8ZOc8SgC091dcry(gYzUu#s-j2ecmQm-}i?eGyIcplrwZSzbD`hunFRs8?v(#S) z6*`(kkrr2zSic`aK>u9F@FF8d`4>q1ajq$Ag(d7R`dpd-vgH20}B{ zgjn7}8&{n6_2$8MmXruX!?)7!llKjnASTW)ejKTYFx=&)tPMwHeLL`CW!uh%u;_M6 zI|5-n{H^Wu`pB(5ufu~=ef5=8fxu=^U)=iG^V5_9%Eo$ux5`bs9u+0N^O`X98H44Q z9Z|3_dblnY{Y>uc^=&WKIZXS}C*N#SC#ivo#cI)&{BrsC52rRZz9dgJgn!RQs2$&{ zx2^32cwNegzl&^lb^pIY)!G;3N89D09^F}u8FrCscM!WuvnLpHafn0~W6jMwwT*d) zw`=f$`Z;T4*fuD&hQIk;A9sOvkj;^M0~*v9wQ>1ZTRGjtes-$k?XfY+;M&A5CsmS^%qY_t|y3n_0JGs(TW zeNBb>aU0a~Vbm-IxL5=E!9rX?*TDLND-?!zv$-85;?MHQ`bL1 zn&tD)@fs4AGheE*E5IsmWXAvcrpLMCbgD=#e*!a&`#B$KoG|qn*sjOhDwsbwThAc8 zw5Kg5D9H`%`*J21SL!g*4PWd6Ft_G(Y(HbK=E)_4jl2A+wCzLnnL2i(SFYUTq~vSd z+o*tTd%(PvA6Fpz?v!$b+MBSE?h1FBtynpYi^l~XIQzt;sT0_NQPG3PU9d`ppT*^W zG{~N?`CX4;e&m14Iuo(5M&__W^J4nk4lmx` zWAhks`PQ0#;ydS&be7l8q&Y6KpJ3CDlCCZold*7XT<%Pxw+FA6HUwR>;(VlgopPM* z%L2PB^U}5*2BD+Tdzwo92)`*_8k zuShqiPi=%gCfhklkB*JL{#Ea#J5cmAJ0f>W0=^!CN}bD1M`Zx%w)>P-bAa}aOU z2O>Nob>X`=rpwNg7vq@{D8U9KKedIx`oFR-35)@Yt~g8NM*YUUFFSNW7c2LN7Qulw z`i0Pq$5tT6(Go9^Cw=$9{*#*i1?XQVj=MyD+1%K1;6bUss|>xG-=BHNvag`VdJIiA z#`2}>VIDD3itc)}hJV(n;@fYx^G~L)oGQKwcU-ow*u@yZE9>3CDushF$Wtc$kB!8G zd|#itwf)6jYR~Dyl=tuTcP*>YG&Ra_OIQg|>waR&qFX{sdC{`B4?aL&?30;YJ?Oz; zldsU4DNmxR@7Xn44kKGHJkClT9l+5<$a+l$6!m-*Zpv(Crj8nlMre;<@%}nqH{Ksw z@be32VDSFo$dWTpI00lcE+^zOqmuu$hQB357XYb95$35G7TVCd*Id|yWiD`M>=p3f z>?uO>T(f<4_cX7;;aGX*J^;W=2lk&`8Dxt6KJCb&DGyMMA+aMl{mzjp*rsxsH-@i= zwJW%i?vO%pxq*26l}>V>G;2@90d38(9o1xI3myEAcKw~1K@~XW1-&wZ?7dR5;t+(@ zHtUqD-F9O_3!CuiJsxd6FMVuqlk}|f)bA+?SC__e1qME5`T5r)CfWl;bqTZ+JDQ)# z`Db=zi(Dx0%}>HpuDFa$%O$SQbeCefDulRreyB4m!^{*V^XGq&2$+lqc1YsS1Vd`e zt5P=M8BltM#*_Dc^ZL{iMC@zq9aAYRWR!+$u*FFzXl-RM0ph#}Jax0U9`9=bbuip> zM(yb314ncF@vWXh#;3%FsiR z&M7={0WU9F>mQ)1Tg*4--M#DfczuiyO*@BL!XdKnX08kkGGE(nqCag46zm-YU2*wL znfkj|f5{GQLR{cXBAi3Y?>(xh*cTb`MOVX2QV0cRIlm3GF?O}3ce&ErHx?Yi3GX{n zeb}16Zl%atWua1rmrT1)#Odps{Q(YGC3yT(<>RD$<%W|k@Y*4l5)w`wy=%#Xd= zFh5`2Jynf#mYZo$mJ9M^iPUC{-gc^6&my#xa|jwdDJT)7ZG&tJu>n&as71WV4HrAY z*RJ=+2Jlm(&Dv^0%Cld}E->R6i%0Q*T>>%hek*$0`UQZ!e2~Fz=v9C?$foG0>O_P; z40=-ltmNv*4sJ|PSit4dUnSP@>nzQah*Qjmjl3)fRr6=uO@tiEmjAd{tF$?jgN~U! z_w3P#oIKb@@=!usU2=$a%_ge>TNgB908NkrzUd~D?~mA%Z)d3C*S!YXwUwHs*+*gI zKn?u77*ixKT>$A9G9Pw>_k@ELvd-V^6lnoQsXyD+G*l+tE8`K*n5?6`)!rqtEzm~v zgq-UNYmAIVr3+ZR9eNVG@)q9|^afvj$JSN>y*)p}EQuTtZEn9;=ll-u;aWyv;a6f9 zRten}JCda_(_&-igIRdz8v(!8Lp?jtRvSQ}zum$k;t;no6i21x5CO*a#>6jW-jtyj zT-;2OFSF=S!A@~uDdS3u`M6^774(tGv^&0QE+TN{!416f4zX;~;(Mgu+!C_n#vanC zni3(6K$p6eT!98yW9`Wfh-dg(6-R@CBE3mTCg%UTl*D}Ie^7oO zj5r&R3c-T|Jh)J=p?i-h^n`$YXUB^yhS;CGz?y5EGmo>?n@=DV%LV);V(#y|P8%Wr ze(dFuz^~d$lWs;JeN|?moR!ZQn^S&C-BlD2uJd81%D7W}{-6s3Ojllrz>8`4N?Fes zw+xm;jpepp=u2Tv@E+=U#hEKNqq_GdGOvmiBGXp^{sikLx4qcwRbq+}Ge3nJ0#Y|4C-KhDRWFkcP`S1?{h<2n zeUP-KA8z;Ymv=VT3t*l#{Bs|rLqfPV(I8_@tvT4#oe<4so?S)yCC{o0MKYBN5ba`M zdPt+68wq?tE#asga;z&d&@wt}q(LjxU(-%Kj{TJjaaXii8!l0V&JG#Bm_6yy$Jy&~ zU~}l~03N>UK1ykx_&R#M_#X3Je3`=aclRF84ehPw0f$oeNC~_VtiBHXJ1KT%UGrX!+YR z{PNMlV`3p^u|(412a0A-zg@k4>11AF2FSI%h@@Ud%`e8TF5FwYF9;n+Axz!h{-WOw zuQsTa34EKa9_TN{&Ab`#xuBa#1aX(T=-hy)!L=gjl zS=bXLc=y4xtk%1=-=7*PyqXHBErd9jdYz!^`dPt24QjY3qSz zGC;PDA`!DO$+)=l#oo09>ihIdE|sH#k;5?T@Z@3h!dTb7X4p^(T6<~guyF5b{Gc0> z-k>!``*|g_e5}OgPdj%F^1gU;l93RghdEsgA5_2wNX`eyl(a|^f{%IIS1)EB{YVdw zr{0Cb`p>~`pU;}0(sYokx z=r^ZY+Li>Wl69}Z7lw{5Ji6q-b$&k7YvI-6vIZM|u$U5&qI7_ZS2~5;9?&wGj&fx? zv>;ruIF%-xFa9WLVwKc=D#FpkL;#x0K|N(YlH103-ERSE1XRZDQ){&i+Oxs=1RUCW`egC#vF4}M$o#?- z&+)7DgGNyvGl?QMOfK#uuYNz9d+j;%{Y}rLcX>+Q>>^+l$ z=O69QpZYo5Yfo0uvB{bGP$;LUf>8y1MaJyQYud##i$Wu?ufHSFBRIqnJ>*Ai>_$h3 zB7-P0Y0`5}dIi_tXSxKdMU6CU5BbAocVfwu2qkZxKpKv~ScDU(AHFJGJ~nL}nwvX` zztXJDrAEC7pa{S2pVtlSKcSdZ60e~jc%-TRe?4sC=AWKW6Rue)Bh#Y z{PyCGe9+Le_|xs+>+1bXhFGR-8!i>Gh{#xQipV;0Mh(TY>b<>7@-A(8dXFt_Sg?7y zoH`w-zmuu%APuDqmEx+B{G8@Nt>z-U*Nfqc5hZ#hz25uBG6}sV?X90tYXbivCt|8R zz*Q#}YX5p9zP%l+&)FNeq_8w5e2qP4)o=Pd3LYZQ{J8UGP)_sg%!t14m%9DZBc7HpCFH+0~hR zTFs^Y8J3O5D^qz7y(`Am#ybg}K-NE8pf<2D4HXm3|3At;h+=^mJZk{z|A4{}vz$qC z^CB-jR)yZb)ML}}L@27tZ&%}0o!1@t@(gs-&W5heBq&-P^XAfLu+=TZ?9urCrz+eR zf~vbssdw-5{ygtOX?$W&n+&HGpx?NbcyaTYT(BVsDf5Kby&;5qy&1Xp>lgD7vati5 z{s$Ht)|Bz)+1+671jvhk^`UWm6!`k;X}nF93AN}n7k0;l83*KJXIkIZ7X$mwei&VC z+M!V)z2xhpxPpi~7;#d0Xr=Cs1auBaq&HbBc|0kFMYB0nGx)1=K zzYHSZyPUe(@Z$@Sd>Sh!4ipuZmkYT?cd=vZ)YzIN))0~Re%rUnJKjR<7j~4A9&3xJV5IV z1lRfHk91{tb`Ky=GkrOVHPUBl4M(Ar&P2cP!&(?~bskTU{+etRPVl9mNqJ zBUuhf>dn5%>bd`~Lm>BQA|sb8FiHLs^+k525zD=K^QJG7k3K`C{8YbXhn#cH0+T*U z2tsxT)*3G0LLF1)>&)fr!sFAwxhuB~*zFiaT&fwZ5CAS26FyJtsHp!r{bw#Ghm64& zlEtpSC7d`OqrvFHAHGr!SjHMhWkAE?d-TEZ^=%#)V`5V!<8_GQ3@tjiTR?FIr|s#m zo995m)M_IOylv&gouXSV#C=pV>fQ=QK4cWA2dmTf=%v@cjDxI+!cyV@ItemzjC({{HHv zs;F&{HC5Rb@R$-0lY^XR8AgdQD7yjQDldy*9se}f3Je*@*E!hT7Qd0AY|)9mOPUBRs}4o^gHL7Cp~eOtj;s|?Iw9a&!c=qx zZolfQ@Vd@`kpQj3$5FIDzJHtwUZUmIJ>?bvf?&ymC4jAR|4n6MdP^2vNs!~y1+gLU z9NN{Y+4r6}<;;J2?7;P81olXe>+Ec(hz4iY@HtxaYVDhFCq?dOud>eGl<8-BIM5sF z4~kvCtYN9VPRe>k7c+8Hl=0M=fUd$zoeiEdZYkDSDJtc`lOOQm%HsLpo1bHbVnx3O zF#6NMs|9LIs;y|G0xA^J_SmIS;#z|XxmZ~(8@D>+u4PlZ008n95%iq)C zH(km)^y)4C#%QJ73<7J2SF68@#4lp=y>S2@|8pStOAfMsa1;nlPfus$bqk>+=o?{l zKor{_BO>d*YjfA9^nE**H|JQ<(}U!QlcsnN+w4K%cjAwtNf$hRp7`xa-pfPYS^2z9 zpl0R2xoa=4!pg6Wyvb9GA5@n$umQ*4L5-dW8@A35X9lPnT34+?$((gMq0@T?$S885 zc1QapGrNSD0tD&2>0;DcOJwvL-W6cX34Kb7r2q7+)!w`ri=F~Y zP#xzOH6@{QlUB7{dspA;Mv0VN2uJcxgyq;Pi)HqN=6}f9Wk1;p*LWLGJkQTRxpx;b~x$5@| zzqFy^2D(21Vmw2qsJPvSJZ>hiS?^d)O({A6ww6?FNjhjmI<73Fqk8%O6cwcfD>g)>DIE({h)5@dU_~ro15~PoB1nQtZ$VITX#pw01c-uw z5JE&q0trdJd12k%d++-Fr#~^|oHJ+6%rnnClO(Q+Os`6b_33S+Hi6Y~{i=rKAEQO1 zuytma63M+I>V0~Gds_2vui06{(MR^pTV-dsp>15q*iAYV^pN>x{VPq4=3)Kwj{20s zSk1nGGqBi`sbqg(_x$Ipd;KKxWyyIIW}N%^=E9cFi>Zy$shLU+g_~hnM^tBWOLcsk znH;7tT5#2xV@52zcCjY=ft%V|6qH3hPS|?yn-UMT^t2xW7tofFZyfcKqjCv)B@~c0 z%1CY4&zGxRElZd57L-2U^osSq$gzrbcV$MEgycl)>7x>19Y;QBKqRN#L+uNfrxKD3 zmQnFpc_VsF7G;^lUFe-%ClOXHc(I8u?t1Snvo2?X!^|x+jqs|*l%qLdvoA^ zMeF?-?a>jelg}y@iQVmm8bY>PecByZ~D&l{q5T*~;pAnN4vUsjLwB&(LJP!^t*Piw#$?LGWsv%tDm(IpeaW=j`JDRI(`K$mK1R<}hM%eKv!mz< zGD5VS-$h?%^(6S1C(7G7Q>6jBor##2nc8MiAubU|9eVD%9h*3iZ?e>itg%rdOjsPj zEK`TsW^;7*WX7&Dv+cR`^?UFUr1BW&b8e=aNWt4T^!Gjn zon!}U)kR4=mI~@`XY}%werHAd&4H7mZ8^y=e*OA*d(l?nyP3J&nmVq9P!IF`a;|xL zD$n+t&hYM}%q$CxQ(N|Nlkb;4Kkb*MN38s{U3XxH^!m556~~ji3Ri{-3UyUBmbIh?VzDDb^NgQSVP5gx+ySS$$LD#TIG+0sh)?$*5TJ2GeO6~ztwgfv ze}1j3!`qkeijAXgkWXg(wDX=ZiGPQjeQKX|VqX45HZy988WGyrs zFRBX9(z!pDlxeH=hh3khtTFafh*9%U^EJ@PqqB0va#`K{pH9QqJ$1ZL zRuIWoAOI)hWVVG;Y%4SIyQj+@uJeU)CmHxj|IaULYhCBFYp**eb1%){mUGgz9}0x= zt+)#*d=+iyF^&8(@fT}q*ut4NBe>&Jfgkv^P*~&mJJ~1MqhlQ(L|cRU?| zTAHn7!p($ZilUL#NcPH13a^9{=L6^0Y?Uqdyw-yrxwuyc3n?lP2(}O+ji6h@*Y$lYU!LpCEsHXbUng=-oPql^k z`Hz9Oit&HvlOUq686rTy>wMQ=5dNE(P<1jdHrwQLhMwmwf6l6yjLWC>b(U7jZNKf3 z+@F3-ojN;LR9zZC8c4Iz;rnDibW@x4%O3#{8J5{TccFYujb8~2-aS0mulsgN%ow{! z`MDkP<)D7POL|=lQr>*1*#Fdz>D%$_etZUbw&r1Lf_+SO`$=|Eqcy3f1{m^Y$oUNm_HsyU9-G9=$5Q!;?MnWse8rI;P8vM< z%=grQY+f3Z7X>IGab&H%M0xC*?|yiE1OIsG#D%*G;p*z=mdo4^?2Dpy45#%FYN{ck}Rt4Y{c*I2ToD{K0dY)Q2(U!IrPvV^9KrY{W?-N$9v-|m*Q zQauci*(4zbee(8OBaSh~r*>>m4iyC}vFFSY@m~RZvRn9R=X=92`jKS6x|wz_;i(p< znoGwQJNGWo^PL;OmJ1N)5y%59)}l2UNVei^78e5Luu^3_rCm*K$@3n=l4Fd_ER$YQ z+p0B&1oNIp+Qv*a&4L}k%HWxLL?Eg+kT0W_sfO=|IxL81YjSK?h6KLa_^3}syko5w z-MRV+Rn4MJm<5~3^~Um=?kOPOM_>e;WpeU`jdmHFcRAPkAN6$^l2==g)6$;+?In^gQ!pQ&u3^B$sO`+wPA>0N6#s&X<^g7E=Mx zE^-ntN}3q-0c|c{?N4Z{r4RLspY7`x$P?%2-48n9E?jTvTFPFU%&R-h!IHI@(-177 z&;etH;U|6_Xc?zDblqLq^>}MW>`l%3+$4z0+8A$0;eXCT)*O))=pW!@J6+C$2`CCz zx>DSDwIX0o%JILhyG_|aAXl@!N!=kI@8rxjW(fv!xIPwTWNcJlu&90Bs<&v87E@U! zMpMTBLa<=t9Fh58mu;`lHb`W?buNeSFgJg9__YM@4enjBG~ta|+HX#0vmP2MIZZ#D zR8X1l@$#?T8i%i`U3)K3uIa%TiE3s0q?-eMeS8v*H&CE#SkmTv&d06_Iw9A#Jc{>O zZF^H`$zCK1I~#{d>-zN$fAA(=ZYDm zFJkdK8wfcS1YGOmCW5KXy8`x2wd zcQuR#__d2K9LruD5vyq`sC~Kdu_zC3_YsZkvbU1#BJQQEL$n6lj^*YVj2G+P;H+L4k5fK{qcBNc4cUa>j9--cJcxDwAL|4_gwJb$l42Bjsl+f5T%;>UdsTD0}GpgX#* zp$ud6dy~zUzJ+EAC!f>$X9us@8fMQ7I-e!=z<+3&-@c}7?GrD^4X>W@m*Tk74ANQ@)N*Z0WU;dBeZq6eR0mq3Ali7AVN={5)=)Z&2cX}pL zA|vMdt+$zmRMscFCk$TSwo>?bD?sKZWe^pF=F@YZ&p=Fgrp12Ryqo-qQr<${iw3mN ztuIN7k_=w5f_-lm1icv>+a?r$ocD@IJdsade|+q#{u@j#nbFYbrxFc?KSPl%&kTer z%!y6b?xg{Bx4HV?Z`T(N(LAEfvl1Z{ERW@9fYuDhnR$14YouSdgk9peX3A_ zJxuV|!)KVPXyjuZqN`Rty`QWS@RZD@Cn;6WZ;32IAgCW?ppobCaRpu`5gl!r>1DRtQXq+1fj?KDkM(GOol z2(o2e<<{5~`Cw*1Cf?^pQnH#v>?Wg?J%3en(Xa)YO%EbRUrLss=;!uy|5q6YCDj*g z*zd0zYL~#DfgPOhU+!5Vd4N#7;l#N7vZFidSrz3j|FWYCYDXSZ=-M5-{t$=tIG@$6 zFN3xPQNjV+jq4BL$Q@;1NY{-KM|&3_C=QTJmTItd4n6DO83gR9f#`!2rKS&|iWWPL zowgUKTlx7R8a4wRI{urR#bm?141zPcQ_Nnj>5yJ$d5YkfWhbAJBv$?uI$p7zMe63H zQ`7Pl&J^yzAQS z2RCTy2=@{Cs%qxwG7JsXS(K!~k8>SkIB(H+?o`kY$#BPq zS3=1$&{#8tZyX(*hQ!V-FN+G-sy=*HH<8bo{kS}xeOt+9Lj*W17|t~r2UfJT!td~Qj& z&f`5j=LMV|sVsmO2Z0Unk%WZx#r=7lGa>fc646~)FQ1Sk|FT)68=7zsN6_`$5^*I% zjBQu2!aeW72VBb&Kc6-IEo{!4!@r4^lhYwYlMe*(4%O>jH$!BQ$Sw7>;n+V>m z;lgOf$L!_iQgyUcQi$-N(+y1fD+r% zM_O3Lv9+!#9y?X6G7U|}fK>5caO=X{$vCfeWB8n#x~lqZw=xZI`w}8*jTpw>B<)NOjaeEg3p}$kqA*`&M82_`eKhdof z-+?~Is)T8X*`d^h5q0=$Q&QlGf(D|^S+L<3#< za5+C2)uxIZ!z6ADw)SD*)f{M@3U=mi?eD;#*XQ1UX9C%4XCQx&(d~KUuBPXAytwr2 zp-rHZTk@(ve1aIJT~+pTmZU{;(nV0Wo4Quu$@{7Pm*Nw`W_^uF@BUb8 z%hDO{Q_=J7jE+rP|8_8!^_r=_7u^J4CyW#l?Q%OAq#J5a0!N&O-%uAq4wi51k3$`& z(Md&dfL%Bo^pDWc=C$~t&y~k0W*U9rBfjlh*ZU~-LF)lN@lGZIxnIIa&{k^;dK2hP z%daUTKKI$z)nq*oDE`yH+aSEv&tA!Q0=g-OXzu9BZQ*7XHb|kC;P1zVgg@BT|7#B=kxceXCSIpT}oGmu8hxH zS+QCqyEJCu#fu#d=Mxs8oAZ1p@}XtzJz?aA}Z|4g-+j$A!35!Dy8NcKZM_tUWOqcfqe?oGI# zZPa43Wz*VnxNMUhnnh~|I4}E!TS5vtu;|nL#zo^P zb8yDPfO+sh7*nnxH-9BsiHpY`nO$TsU|jM_QTu0wm=#N_T09lbpa<^C_uEM0>^gNk z??pH8+8woTYuaUuq?G7uQ0i(qj20paPTbiCeC>FvcmBig`Qon+otKHLBaCQ(6uZ$To)gCIIv%4IY4&X)k>U3&o|{ogwP ztt%+}JKej(Z+sr|hheVT(7R~Y!S>I!UwTLrfZ+)b#ctNd=JhW*5$(}?^w&uPzL{cY zSgd^6&?W4>343@r%jPmy$1ib?(!i1e+qE>|Wm^^o-6I&6)5gi@@nxop8HRd5HaYOp zw%C${@%FQZXeacRoia2$L*5dJvm)2on*ytsFRn6n(}+43sjHpG6F`9lpJhWA0_Xl} zY5hoi%3SS+q>dwf9hW_XiN?A~Fd>gckL8XW?!g@jK$&FkIqfF}eb58C(G@-Xkw)@w zE_gaHMP8x~@G{Mu}~WVBmSOVz`Ki^;9w7HyW2!el;b>*<} z#PQxAU-_LQ#@&V3msu_RZRZ*;FlaTlDzo5*>y4Cj)UQPL??W6_C{ApjSs+bvKqWKq zv|2Q-Lsx^8w{0Nkd5=M%4YN4pVJGQj4grGDqiu_6PN8lC4t+h*m6r{qC#d##lEr$T z#I)P~mmFy6SKd0GRqxAo8aBj+zObj3dJrS{B|xoSzQMUD@!9VP8hh6vU!>L0Jixgn zv(dKOs)meN567u}-oH{Ri}xVIRc69_b$qUSN@#7W$=kd>UZ#2E<0Z}y)lD7?2M%tT zDo0M{qyRkFN?Q2LIePW|UMx;9g7cfdZOa%lN@>R_g=H;d6H`n@%Mki*9@PaeAatW1 zfdF%5*v&q}pC9LC5k7CuBHQTrU>+?5B)g2MpG|RqGyqFZ1=*cY!Fr;|2F&R8BhiB3 zjwhFQB3GbNh&_fM|L%_P8*A7mTltzpp;Z_blZI3w^pniBG9fo-N#xVsfbi z_~McAX|XyQa6NOCVh(j6X>iUe=p?4v_sbB{8^= z1?Yu_I|X;J!q`&e?$m@QYH!6SVGS_>mpbsAlm1`(<_}RV2NZ-8KIsIE}mY=?U!L}2GpXBhI zl8cf}o0~Ecv_Jw^!YBrk<$NnfQc91?_PGHoa;p8`U-1{EnSYkV zIu^O982hh?OVFD9%-+oo8jHvja(CDDjg~I;TI)-G>nB3ZBn&C< zumrLuS@1OdmWLaQPL#qc?1rDZ1;vHdQ*pB3o? z7Vw$HD5yGs{__9J(>ojuF-n9 zc-7@K&pAV$JiYCmpG@?2evmbXfgr!YtbVX5B2}wni@-`iI<$xdW5OJRbuy)~}se-JeQcKbzje`ddr*SZ&cVaMp8TJlP_5sUMgW1G{q(3(AVIN7z zps;Dt544WaU%B3G#hkfrw-MED%b|QsoMUMbq3t}~LlY`0-G#3=X9?W|{705wQ|m9M zao?@y2Z_>S#3?e@@slATdW)x2Fwj06^g^I0fb%ZIQQjO)cHivJr3BQ===^wHW*_px zu$>1u4p-21^VynOx};-e-Qlx=UZ+pdMvO0eQXO>C^%HaprRvLl8={X+mPMux{sxr9 zJi^ou-w(_v+0;vsZza>n4mCjm;t(EbkW)xgnerxApy*ER#eUn5$8iRpE4(aydJ#8t zY`jdztjD8e77U@Dfn=~_G&uZ3oNR7;QPJ~A?<9UUGvF0 zDG_xwmv5Z)ZI@f}pjDKE7np!dL>o23rjvdyoT-LkPc%+3mTZOVxkpm3Sqvs^=QnFL?N$XC;tK3ApVDN5C0 z#cz>;=8oA&nRdq@7Eh>&c^;{aEzSdN4)NP3lTU$Q4m6TC`r$8M{RaF^e|y71n<{T+ zE7v=I8%PNz^BLL8hnQ(G#m;lIF=))Rf)!d8bY${ZPXZXIvzz<_02oedrX#Y~K^0{t zw%CL<3f87%i-~K1jxOmW2Dlz{0P7hh3&6SKam>Xo0Lyo3#0aFVch};h6nWs zn>&!gUcB50kN6WbzlHqbx3cKGzA?u9DVs=z}5(QlqCKT+`!+;aVkt)nWl z4;7QA9_~pa0UeOAnW`p~+hv2)Xd2Hhol#8y3(m5=qbNA zp$v_VnLkC&FY*8_iY_jqwP1El9t~A!uwfOu*wom=>+K6eGBzoay3y{&%D0Aib76w* zi;*uEqrDv*a+C7TeH}wNt$S(0&?b2_y_<3jD3xH+L%@@%b$=SdT@N;-@SH$aZ?C-$ zIxKdjTaE3b}>p7_p;qdftuQ_-*menuyrWL<3BshHgaf(b+6kxIGo zhoo*uN)MPdy2ZGpb8@{V0}U{&A%82e&eNg=>qq&drS}e+--a73SRf|>_G4A#XUfx?jD^`e*Ze5|4iJr4Ds2Tdxdi3 z6KNyFj2nWDaQ9BG`Hcex#8>i0lR>f+Z1mxKjJU=AYYcMJu*@tjukGj^ke1%sz`1wP zd-V^XNoWbL=KIP&PIh$OU~Ui{dq3>qo{HsD56={g(ct^^l@Ko|l%xbzG!m_b#i>#Y zcJ|}6UEIm>wvX7Mi5`d_6hN#^>3P8cqprK7E6)r3vC}+`N4#fc2+RyPxv<-X`SzndM zH(>iIn>=*HP!23@65&#+buOGaPQ|rU*6Bp3S*VtQy8WZ!_jm9D>qg)3Nlx-Z za9*YQp?6TlD?7*zxHQ=id0j1^ue);7qN9WH6ay#e;0(emKaX~qiDR+PSRTi+BuKoD zMdym4o0C_zxly@XvXZl#_3nt?*U6-N>X|+R1^I)AbD6QBjyaF2a~(8Q77`f&;tQ;# z7>$wWAM60B++DK~-;iyZRAz)C$Kd`<4t37^dnYnk)}_`!PQP#OKq$>DtuI2#6WyRP z4a6tK{Cw*Ar$k@l$%^;#NzRiE>TBXE7v?^y+6EH9V^ zts|w6tl2NNj+dFD&)Vz*0z*|R!h(Nx0rgX;rGQhfI4pw74=(}}yoM?nf!OBL{(o);Y{-HkiB7j9ndzwSiNqAD4H}tnW(SY{$RqdpM{GlyYv&5GZ0e8(-#N0R z^ag)`_LAvoqN;rC8|g8lsXKz=0Pt=FNrd4;X)J^_6rs?KA(Xn0Ko_zw3F>yd%uG9( z%Li7A!s+!u2kG-~ydciD<_srYzG{+=FMO*qJNmmIN~!DV-cu(}woXU3*$F}U0k*M# zzpk^dY2Vz2H)$gJo3x-Tj@=I18l9@~nmO0p^i=Mbbv|UZirPv}ZqYtW&J+3S=br1Q zIS@t5&|?ZElC(7kLrfu5s0oUG2TT0Q(igfW}ZEBm0&dHR7AE(varyhCq8o^ie2Izsc4>`X=f|Bi& z@t)6j6c!Lvj+SzVpyB+L>(k5W)52mja`jgpp4my3+qZIlpfkDJY3!R9U;JMo3$&s`4N2@lm163gqdo727nKI1UwaGf%#;4)jF_v$ z%KNNd0Va0kr93Atoy4}X*qTrvcy+f?Au$hYh3hQCH}4TW--FPGu#APig3;2dybQvpr$x<* za(488#b8sg|A5*9z7aJwNgUE0b6&VaySqd%ez^Tsk#HwqXU-?H#6O)H`HlW$YKeWR zbB)+?bkZwQ&G616Ds`PEJAM(9{c`Aj)>@Byk!Rp>r0Zztqxw-&JPhipW z`z87pjhd6cyvk}+z$>44;a{4%hPasCb@1?rT>Hsv)$iOF`as^@df(F;C~^{Is2bi> zq=g!p5lDFy60K51CB}3??w?=zZaD7z%#Tp`G@=8SQ^^5Sr02e?m?x--aT_;F{pKEU zb2sAX(6?TFwD9wr+(bWS*MeywKGv3SC-)%!m$ZMqFK6tKayG6%H8Sn>W+j47=N~yL zkXfdhSkv8#9iq1dlgy&L4je?1d&Kx+E^mfGll5c>U`TiP|L(v`58%GC{YaU?TOpFK zICqTI?WR#F_pLcBdd|{!uQ%gVZ*D)er)`hQh=E4mr=7&Mfvfh1piNN;#xckES`bVeEGg2gMI*^v#%_Tq#wXpcN_1p=Zf zDmATu7@GooSJI-EmaaM-w^C`jcV?t~NfNZ@=B2HzYhV`A2aQ#s=-t@N5=i}S`C}mVCC-=5K;6#g zN8Vj8^BSdmm3N%F_9tDE+2WP-d7tpQN!-&cmrB6=?1}POX?2Z7RBw>iL<9r|aXKED0Jay;3_ZmS^M3cZ&jVcb;+4r*C&86& z$(oqG+$AJ9I4R*rqpzMg(r`cxNN@hg3+OaGY^@krBH52ETy6Wb&BwUewEy#8?a9BE zeRMlC4lJi_Bs&~4DpO<(avO`up`qA@&>K+jd2{fr>iH&NxHkPd8d`<~pUaG)lalbZ zkgD0Ml(71uD>Iz+I?6i#W@Lf+6B$vCx~@r@U24YR9t<(#wl3xf zpuB|nH{2GT4x-a-uoftknMIECAPCRf)3}Oo zUGhpB=nq(b1D`sX^!_^b!(e^8cq=&NA-?`vhp5J?5T5<#IDz88xh(i3_WL{5r15&?Q9`Id9i@V>gogY1{g^9on{- zZ)jUx_1BbE`BrapixlCQz`|+oiHsyH3UOH9&lK*Nq(JdX4087|i-Bm9`($~$_XLFQ zUJ&(3W&iqkqZhM~F(GmL_XU?k--jGofp!UzZ=#|utjbGo_#M*W>B2Zy3KUkC?yyV^`fqYt5f!d zrF6SiKR7RJcxG%tdA83D032JY^mODHxJCaEw@YIe9Os3_;F{{J9p1ctDFe4>;Zz8S zes=l9D`R=3d{g!a-HSOf#`Scs`b77l_wBa+&Z2^r(TTgqwG7`l2*$r1RM-gtz4NAF zMowj~Vfzpd-Lxqz=HJ=ybwm}qqeWj~p2zZ9g%-K8C(mdC!r;uQH`M~v z;>NK2lbCqp6>CwK*R)kM^LJiv6NrRKyaJ!#6w?Mo+$1*)q=~jG${syo>NT+>H2n2g z_>O#R^TkwahJ0Tkf6>*25?d0sZw?J<3vT^MESCHCk|9Vlln4u|zk_ubZr!TRPNH6A znhJe)mbtXmS*>`S$JXemlTF#lG!~4%p%x`tK~)M$!46d=69gTpjwpWTr5V=Py?ZT_ zMt-druFu2g=l50BJU_5=Mv|@w6JTdO-KH=xD&@AW=K7_$Gd_K562?fv)&`?4&@`>s z@Tm;r%HJ{nclZ3%0^~XFgB)15*2#>7W!trANJF@Cb#&Xg{3gDb_2yYtewn>6THbCU z522+?+6`XW#|}#(nab#tbDXIFi{UToerL4~B zzWc?wr6l$pQlH8AkWc2h;zWlfWo?w`k21OnYd;rrmU4 z^fq0(_$lRc6xVO@KigVf{gFbh_e$#?y<7K|)>D;Vs6hEt0h7aU6!xpr_m52QI*r>y z?gt*9A@c+c*^H>dxxZWfPvDvHkja5I`yE2gr$2HtY)2Xx8*&v74_+MNmV2}NjHb6XT`M)lBg$!_i|9ndk*m458Mh2*dDrBx6 zu4vKYzw2PH^X+;NfRB}J<{Fl2o)GHiSyZ*0^c2>oN1_80$|D3XvaI_B;c_z!M4VF4 zgMHi(OB#9C>F}>#!GEH2Y%rdyi?-apbO;{Hjuae{DpF|PKY`f<-L)RK3~=`*w_wZq zn#cRm-lIG>hC^G#2>KcSw|)hMprgp076~%!)K~93udIt}ofQA%4j$8M&y4jjFrhfo zZR>o;U5F7bQWPbJ=D0QjRkRF}gI}i{^XJR{+cpACeB}g^f z`j~)Yvz6?4R=+Bh70N)g=jz7Kbo{&-we(*PI|TACW+OwznzUO9DrFV9N(T(AUh~Y3 zk8)=l8fO)>zI&1p2}(QxK=`Tz;3*_gjoA!&;a{)*y;welSFMb zfHM4OIHXjSpvNo-Ic1d{N+rvGFVHQuD4Txl*xqEfXVr^Ea^1pdy zk$n09kb4+P1$j^rpMO3Aj|w2{cu^5;^nC^T`Ts0m)pJ@HBt@5IeC6-e+{#spR1?MK zAzw;}ZxtHty&C#dfmxRMK-zq?a^ z?Wd|2Y=Re^?ldq%!e~?W*+WgCfMK>$nFY+om8=M{+aawHd-;q^izpcXbO=diHhsLS zYg$vie>$o_vYJL=fuaA3YW@NX_P{#_(~pcKj9R59;9Xla{48i(Iy}P;6TIczv?3bo z{(3t}XImLV_o%3pA|*kw2$~S`w$Y4QY`k76YIHC8a`zTeKALH$yGyoA=zPs__<=fE zxc%Sz0A>KZl&au8RbAmD6h4?qA&RnP5IxVN$k4XRxD_Un zb8F(Zb{dxu&S#IL5Rdc>H23>0mKPNKGI+FkuW*RO>RGdT?WM*pL_z#) zG;{rWzfPh}EaRQnBGY%7xkXPV0cd`6QzQJvpmm8Z7ma291ziGKHvqILw>8ivOH{a>KN+(?0IXH-knFlhtjz#Q9!x^qvKqFI?l4X|lA1p<*e>OuHu4 zGJ@yzl5c%B93Ybg`sNIes&)%Ha=7t z7-N1m!}W}ZRWvB+`L^d{O}hwMk4N_R2x;H4dD34K)s%IgbLs3e z|1Q%16W1SKg?tG&L3bck>UjwMVB5u~1DL~cy$YbP5k!8QAE6ACBa{`-b@eq%uaH2JdQTUluWR<*yr6@UEI042?~9 zuG?O}l0V?CL_irrE-h3Kf`9+1B#fIP^1LVDb83=iB7HBX@U-!#2yv(225xBGgQK#r z%EO9q;{R#-cUHhW9I{ zikL%^o}r-Z$70J(X;RTn>Y&2&Ao zs3h{8IF%&u7yM0(B3=ol3Y|_sv7@t%y7CW7?MSC^v#;y+d40eZ-;T-Dh!DS35SLQk zhw5V-BE+efEM~2p4~wgvC76d=!I8Dsk+9#0N#AjYLQeO_4=ADM_ef6}*T+N$6%Q(vg@b}Np*a1WF zd3yjaJUE-xZO>`TC!t;2pvl-)YSZ(*(|{^e1`l}RMoy9%%#msYr-(YlNv^^#&j?8C z2>|xSTzWOp&3I1Zsnp-xrp@yf(vbN&iP%UI`7uvw~?`WeRpPhpQ24E?LurCiIn@1q0!{w4CL%tUBg&S zd75bpFV!?a3F9`8`uuk1$O{+KmOeAw&$uxM2hzyk2vvJT8y5Ke$OB`TmioJ(BW06&as8I)|YD!B(I~ z)-R0?{I)-vKiDbsTQ>)!MY5nXEo8r5u3b~=i*`*x3F&0ccfTtnqsc_Vs2}*FDDGG1<_-GFNmD+n8DgWz-hli>;wa%$}QWrjBNyzIj0KHNp=3 z0B=@Q-nnB23FddVc~5F;n;yHKHzrRD%TULQVsAcOEy5J-t-<@~6pLo9MrQKk*Di)qb8zsJRtLi9_hZolDF1J( z3??#d%3!>t!5eSC+&s1>Q^*M?cstM(7B|(~vL^8=pzfGLpDH=c1X#mr5K^vw@WPN( zW}RzgwP>)g@xyKF&UF^e9uI^+F6;eF7{ew~GnOUjzQO?72SEV({r;|J{$&)CQzX`^ zgJXE3g!cH&eLDl`yqFRzJ4#Q=R=jm#_2cwXLvnbT7`j`k$E(*{54F82R2Z7QdfJa- zTTYT!$)@kJUY!yh1VFRO`d0j}s0bp6ni&4*)9Vppn|ya%v41Wz1)SwBGdlIDHOFt% zmB?=neZ0LfRL=aREbYh#*c`QigACbnTA739Fjc;@*or}LaZs2rJuJ|@GQ|o5Rhc&7 z5-NTnh&&wBhkqSew!xKPAz)@?ro({wVROP|sUE#y2Ay)U=z$PKV?jqeX?CH)UyXPF z6&>wei>%FC+y%Q-F;;lqsqJElJNSCpNWD#+IZXFHMu&s&-WM5m=f!NBJlCKs>q5SU z8whhrMw$;%?3emG<_|oBO!)=H_U{hoDO1R%(?L;1u-@_ti{Pp!%C@FMnS&bk6&jFi zDJGxZ)`Y+4w6EP^mNnq{{ixN`3$I=sh1okd&elxac>4}}q&rk=*WrT*3)#JC1NC&i$$!`@gaQr>{E1C!I z!G+uvPJj4v{!QrxAvXD0b5|g1AxJRL3SV4`Zo&vIy_Au!*?u^WK!47i0DUmz z4{F#SxG%TJ7Z>&19)4Eby;xNc-ZCI>VMUi5YTE2`Vk0yJrP>3}Kj&hFGvP?w6on6d z8@dx`jvTvCE`UJ&4aAX`vz2cpz&SBxc}gW&YX284CI$uy007Lj?c3| zl_w6~M2{DwgDykL6YzeoRhSX^AD5_ za#kHcu5DjnMqYA6>dw80dp`7XioXqe9+Uo~YQM)_~>BJNOjh}esAQ^UfY@KJK z^)nU^M+ieyhyL>ZB6u*T-R($1+sRr88(~~*o=@_HOijcw<225@FY-yXQ=xWxaHR>ukBqR;W|#XOXUao==|Hcq4Ht@?elWQ zs`fkDl~2TNgP3)Av)x@7axS#8N@Mjmftb^SC9Lk{R8E^8ewO-xx~00PN0`RDY7%B9eu~GDWpn}6A`2g-O4rstUO!1IkN}X07w?!yO_aq;f80a;0bJd4fg$KzkrF!2OgYmd{dk0c-^OTZLb>ubv&qy z-fq5DBCKDnfLIAJ?NNLdT5ittv=p$pe&v3pb>_w5@}jL|7mIdqZsZgO3y+M6m?erOFr`B6)@YQmg!fN z;2*Pp=$}^|G&0Y9<4KodC0#KI<8jxkuWuorEY($>SI%WwcP`GdlTjy%j?h2{;@uUU zfTli>0n7@m4eKKvHpf4R{vSA|+kE6Z4um5pEc&7>AJGxGKc*Z(;j*ujDgUJ~Wi z(HT*X9|I`|nkQZ>0aE~a7di2htRcwSVf%$=cu;Mh4z-y>(;no9&@y^^81fs+%nd|= zWidVzg>z)=!O}A@O>C0Ji7xV!NM_XS9D?-ZWREtO<2!j9CY|&O1mz`7dFz?TW>E5$ z=AxCU&rWYPdk>$={i&&QMG>*}zS;&Nio!S`e!5g%OPBO$kp~rlKubEf$UsH2n(7>- z{Ek%0RgxO#nOAY$Ox0g_%jDU@^so|+I68uF`y=$W&esrNY^0g0P(=rC!Y+TYvHc3S z8qT4LqsfSPHxs#@s*pQn8=wdOMHhRa!(qkbRAo;4Du<_4*)krTd=b}kr+~y4fvR%n zP{+;PzIV1s7(v&I3XZpM+pze(E{pQQ3>t3GwVh1vkpBz!m~>IU01WV3VA4R!a3nE8 zU>FRr&syvu7Rw63;|s2g3k4khgN$q$nVkY1u8|UeGSMznV&EPGL`(}^@(u($27W?| zJI_NKW3kt*O|3;M%tmy5wN5>DWr^04(rq#EX+5pY1=UG#nKL^y zG$hJfvofNn0Ur-mkax&kU^xhMQ3ZITO6icT`9L z0=W;_mm_)MRsY3e(451VSuOJWl2y&C+L}Qc7zmMv>PC=5)r3dbUG|5;9mx? z4|Eq0f@ew?>0bT&4JXtuEc!;nOlrzM+}=3zMMcERGOhY%hbM}qgAC?{)zu5EZ)F4v z8au864t--8u?QH2|Nol|S{C;9ty23@p}wjh>qB#FKj*G*M_}H2%SM0%sq^0^N7`VXG`r2y=K9Ad;{OxK~;rh&lE`J*EmPe?@p43v| z<;G_$=Kfbu*NymkwMhBuX+Rl2J9J53n@{D=NK4qh1TY{?-dZYZ{@&gN0l;*JtTNYK(g}u902Y)6v^(YW%!nlf=$J9)Z7^9WNYEI8mTQbUg zM(x`4FH8FmyH-U4?b`P2ojmDu?l6!aK-2xACfQ*@>_b)eihFr!j}}^SM{wOs9%lB~ z2iQSkzzrKX16*i)Uk+95QhVKHUyt!p7iUq!+5d6Ub0xy;lNh@vzLun)Qi*nHTI2n3 zt{`wDm^8k9flGxzamNgEP^jvugsJ0@0w)1KG<(Z-Klf}VT!>u}lhF3s)xbJ15ES^A zqOAyDw&Qq~fOJ8LWifO7w|ZE)iBt& zQ;edRC6fK^BL$o3p|JlTUUdiT%=ccV-kzle{N}`T?em3FC3~3Sc-t2&o09E`5=H22 z1!*~;k`O)gYMB{UD#)UDJZ;mXt_G4(Wqv|`9Nb+Yz5!J!BI4;uS? zPphDK%lXx+3l~{s&C0`s{1)Ylx~TH1><_ND*BoB#aTWD|iY zvSBM5EXggM_x~t+6L={1Hh%aPC3Q-rU6xZyB~%V7F)Aeql|x@WZjL9-H7&G%;_t1IH^SsaV|G)1u=bTSZr2D>p*Y8@t*Z0C! ze)garIfxt^5)ZTx_>X_K4}h$*rz2dgfKk@^AUo+6j2*EgdTVO2_vbP2G#~FKgZ-;- zk^ImoIqV#OUwAt#F(S%DZ8z6Kfh2VvlR6j-94)&kE<{dkmCpj?&23}j9&!oZtM76J z87-{+-Ld?yivRSoFa`GEL1Gqpvcd{D??;7Qt341{r!(&b#3jCmtb$YgTP1kuB?aZy z9~|=6Cts-uU+gm3&z*0{DwF*A?Z}TKK;R~)-&~wyFT8YiFPlre+D=I`bSukfL9hR8 zZE_oIz0;<9-=PVqw5QCQ@2f&9S}>PW>_{h;BKO`S_U?v}uH+iY=0;`#yK2;n7igN_ z&`kRV8HocqGDlF^Kl0^?fV9x2Rk-A9adaq z4ciU&P44Eg3wTSfr!)MEeWValg{d(gR}H7b@^i3<3RyLTL5_64g)X(@6DZavU~4&cebUV?MUEnn&%uQXfFYvk3MCV4IT zRwDVPV&3=1zN6@Ola@kl??{+#Yz^=yb&dpwmn=nq9ZrjhB zzBc)&D+-O6qBns}+1tijC>lB=v3ON1^OIV%HQTI~43}BE=d|EK9}*``Z#*Z~wXx$& z#a^`Lk0=c#;QAL9jogqxH^IV2j{#-0B=LWc2T-55g~3+H{Z{W!;=fj{iaa|PVYD1f z+QO{Wc>3C~NLVE+^Y-W*yzTn1v2vh!d8@g7&uJ7aUg;D4ex%{RNd2=@HrahqYoBmC zicq&LiYj3ca5M7sS<~ngmzu$05i*imi;OG#?%Og?W=bJm%#xner8}7mTcveMjICqm zm66g!kPaP}C)|)kO_kP>QO3sH4JVe81iMh3FhcoB`^)L5@+kslzp0kcAI|7+p}Or> zkR90SR4tP_go_Nt!KUt?18-`DPbuu9Jwk88`ms!Bt|~=di(+Fm0q^+W;*?zOY!v~- z@}Ge(%;8V(yQ6RhzEV@rk=a#=4=lZs6D}?KTaJV*G!8~gp$Ayd6=#<|N;ORU{NZOj z-`bu#jM95aZ3Sd>t9T(Ehutfl`_YsA^H2_#fAwE+zWyGl{qTe^%aRy;-c7m|xcPu4 z-LBsgfHgOL-*9Bctg<@u$*^TpUb5Z6;i2NGQ|ZQ!`>La!0AXod_F(g21)Gx!JdKXs z-syA+Jti#M7!vHLS7+j`s(ePlYGKed^W%5a$)F+wvWej`<#um^nXNn45^AL+dYdi( zJ6s%qSJQZlHk=E1q%}Bt(u|&X|K8>maBa42nl&t_dj%ttvi@I5?VPYy3FOI+7_{=c zI%-flP9PP%};R=Yk*d^wr42Ie#4x@M*x}LbMet!q>f=u6gD0> z&M^O=nYi1$Z*STxMKWqt4_`&Pza6Pch76uwpq$LWg;q`QPjh^g+`txNj#)>%bShcc zLJk6EWWx$S&xIL(eu)ipxCFl8T)j_|H;cBFn`SdDr%Z6S5SCb|B+IP2&k22?vO^>c zMQDkJMr8~C1dY`9niEFsl;P~YTg@FgPGW+AJ5x+;Ao*MBrUUTvnv~~8K?2|N$FZiq ztPtR+^z$D&j7KNV{uxbPJ1GHgKU3&7K$fH-VJPM8e4$3Z*2loHyGvy%wSM0Um88=G z>ZUrK=m4(A$j2_=VQZCI=U7qyTNcn)4M~XQTVy}g=xIB-TkxD#Kjf;Q@UQSf5$@HX zd+q#KfZOzxS4XN?x=xDED}@DWK#Nef&t<{WJ$}m_o{a@3KE;*$tB>oSZ6tfyDcppy zKUe>&A73P_TLFmFp*_#f9&jOQzc#eQh!T)=k{hWX`kmfhaxk2@1gTX=50c(qdUuJua5NSu~r<{Vxqc z#k030a$e!yV$Dwd@4CTF0{flYhu7#c#m0etu|B9;Lzi~tb%kFW)MzTRgQVm2I+0ZMo`Jq+m+g)}(*da=j-YnTA+pQ|6PYgD|SI6{dFu z!v_Wj$N5GvqjvVInS#Y43+oqJN^(Nw^Vkr{yL`4#z=4*Oj@sOgKX7N*E14H?#yBPvy$%tr{Kx$AM#}=LqSK60G}auaZ1pE-dp6c z@2_>Dd2O$@_NN}S7RI~(D=^XDB^K5br86!lcK3|1DV!!hv)uiOb(R(W40MiZ^x^1` z(eVy{93h1-)@+`jb$#vTAy?r|;BXyOSg~oxblQeL?JWIRr*w%YU-Iod8?eEVuz?;R za_o1*_%cpL7Y40EDeA%{QoGS2l+%3A;-80ji7GJ8K)SuD18igV2rc|K+4Mej*!LQ^ z2Z#45v7;1@fm{k6Ot98UUz>3Yvo<&E=D%F?d;~f*t!!9G2}HJot2!?qXcfy_yF}ys zU)f2wBhO0imy|&Xy&)pkKF*Kl59Y#9lRD6b9Q(00I_VyuIN3zoOrb-Ad5BlZeOkj3 zGhIxPVc!Hf^PI`-S`SoA&Onf6ry3=j!5->dgH8QNmVR1|3At`h{M_zKgCVHywGB2| zO`KDwvh;=@GFYWSW&7BZb()haE|kgaG)8L^O-JuD+cV`AItICW(wOD=vM$Q?*ZaWF zZ3K>F4NLrM54s&+8P(V?uusKi9pvFpf^uN7S>yC6L&3kbY5=dQ zcZC0c_Tf{`Pw@jygk2%K5|J|>Ru&Z`=_o^~e^2+OMC3(7t(<>t?2;|=d!LR1AOakL z-}$3tI|`I!g(b&1o%Po(-Mf zaMcdG7N%r-&n>lD=duGuWG^ds%snSlGwY1wAH5 zb8{@pVEB%=18la}#!}!dg$&lsGSuVaS`BX-TQ-SZWtG7WnOIPzSF-Te#lQCu(PvW;cW+7PgvwMLKPim9juUOFteHF9ifNZnj5dWU6sQVu#H>*ziEB_ zB){DqqwKx$jH4ZLhI+oWR;6csuUgiR$|XLXe&rvRRitjH-l2LZfdsBXzCE10A>w*p zwQ$v6a*El0?3gq(F43Xk`Xk>hKz<`@=#s9yrv)YK`i%Y4qZ7uaQN7Qjx-Dbl3;q}m zqK+ohlo!jUvwa3<%>o?#7GziE{#?wilexfBID8H73FFlCIBXsREf<7!1HYL%42-e) z)5pnmPws2Dor2}T6&Po(>__erv=&&(IZx`pZ$i{A=~_9w=cM_8bD`y{3-NbyFS8r% zq*%C;S9&D=%}y_=MYd-#{hwkFCuh?g<3xeN37|^t$W*f%7v7dlV-pMsS{-+=a65ip zREQ(>9{?J)2dph`2n24~r%2zeblAb^;P0oSDx^!M(zwoLy>&6$AuHSdp|E3?y6e9w z-sT6eJMKj&7{Kj1l|47}#2rm)9<@_BOeRO$qn#OugNQ8xIhhP(6M?3g?}3&lcGn$X zwXsWy)#>|#RMwNJ`ErW6 z-6dUh1VcY3#+zm*w6X@Z%RXT&&;2o@3p+h5?Q%x-s#TMD$@Cn6XPh`#vkq+!eZk?-a15C(JO77r%>_r`^YJ$k zcI1lVrju;t)KBZC?_`fAg?(KckOT%Jgq6_Pvl3bc*{32hicp^MBln8PmQX0yJ!4En z$;NT-m#ZoZu335lwNhREF`MJF$_#{8Ky)qCra$J!Z8PFbY3JmJ@?J!zzZRd5q%J_F zKPB1^j&rC}V-mA z*Fu^?SJJK0kuUpb%+AW)$?Ux-;6LX{7e+J-Wk3y({oh7xb16g!_0MJ2!F{dSc8q@w z4YXYiB^N!HtXFz%EAAZwBqn_!7tifnA4b;NltTQxhYq(e3=fCI;r!skOd_@M+^U@c zlNsTK)1YzuBGT`-Npf_3GB(PD8V4suwk<(XYsZ zImMTOAnTWFLPU|of9TH^D5pqmKwaX>OwJ$EVJ@mppV!AIx|h82Y-~mZZug+GQLFLV5e`#c5X!CqC_3ct)dbOP?h zG5EyJv?tFTh?i<$$*Q%3P|!|tyh!4sTBfh}gISW)e2NW(;0?Vt?8-A&?wg;EKvDoJ z#nPV&9+vX2dbr!1PPIP#mV)oWlQ`?pn;;4qz+I~?c^^CB0IJ-DJ(`W^6J>#6*VSxi zgpgI$8cgHkEcSlDdzD0$X!~pMcDOu3;TN+loPUJ~qWlE1eMMAG=v=fo4s3VL%H~1! zz2zH+^zGQjLEOa;trYJ22{(aGV1<35;^Srb;al3CV+uM=4uOV5XrK=DJwfXo3dSzF z9O{$E(vY(IQ`4U>TtlFv#qTJIv~<*v`K{hgcxl`X*`6A*n~{^|JlYxXWRXHWh- z)I7E(CuU{D%k+UgB&nG@09pMR32Pv!^ivR?OM375dIgSE2fX#IyyhYd99-$()*T*V zj&@1A&V=~~vl3Kagk2$_qgZFp8J~e^+>ybWg?8eW zchkG1VO;RVy)+wbzA#s|M{Wt9c-5N1re^Q03-$t)9h%z7FNE^kC3#~b^Zk$XxNw>7 z^La5wm7)1io)>fPH_>(jXue{xi2nk-*ohU$NlkmKJ$>KwTZ++T(UM&ZM4|ZVf89j(D#pxUJ0>xmWVuCgivkA#u-hWDG3<- z0|g6MFMHrneIYX2agKlGOhrps(n}9A-3}gXUuHXsl4IO4cWV*`ow-;Uk?e?!O-}{^ zxF2OymTGpKOc&l)6AO!!+Y@jdF&o;+PPn!D#ZXCI$$&2`uaA<~ow2AW3ZV$w#T4cq6>_|Eiq2+4*7`25)vbWODSvvi&F(lUrB2{EK^q zkmIZ7jN6m^V75F9!xFa|UMCW# zXyLgHLg{sf2dBDCYy*Rc_CTmP3L&Y=akT6lb|Q6<^t zB8c%a!tLeKayN@H)mm*N{4#E@(S$#{ZvKphEssOabe1|ZZyEg|q#ez*+U$?n4vlEj zhUYT;MnEQAs~YmLA7#9v5$Qt^HjmEVkwD=SVA$?J3q&PZ+Q0EryZEPtK=L@MZQLt=IA?U)^L7i2O_B_9A47jw@WhUQ zN{Kf)eyXPg+sHfgTeNLzuK$^7jK6CYP@6I2bWX85QrFH{Us(ECNi8A}z69xc-_~2D zH?k{nHNa4|)=3XHF!VxgsfOt59&td>>0e(&uI`O+8&B~Q~j%RH6uxdnzV&a{^CBijAJ3=M1CDV`;qBr5h^y8|}Qu zVt=rb;(fmEcc%&~jsw2_ot`xGc1q9~*Zv1kgg?LdJOy3A(@TJ(Tw>9q6jVD zioK*OcvPhZ3M%(npPK?Ew&YW%%9r(xnp6l;c#3YG4UwFZL8Cw47;i8Fd)Pt%)qzIk zM}0%pyCCL7Y)cM#z5(Qa5XC<=-@lumZW1KC5*x(-aBwT&3D5_)7lm{`UVvSnx0^+Tn0$=ZZvO1F_4boFh~E_qObG5YyI)GieIzKQpa{Pdgb1mvt1wbC3l&!OFZm$ ziWm5^PL;v62bC+Uw%j%+EM3OL)Gd?Z&msv4>oTcA-N$BCR&lJ_3poHBs-itVm|Jq` zvmeg)?t7QwZ;uyjkPwyT@Nf2``Hn@7Vgjknu<6QgC^L{|Cd8sC}{Q=ZY$Ac@y zYk;Am|Gru?BMt($ysn1Q$_^*DD##cCb7ShW*#ppIJ2>@PQ!oTFMYHo}=ioIreS?)2 zt9OL${={KX8GPRDUHkjib?iEyw$viA>r-V5Cy*_M9{e9kKfBUR8tW**YCENhzwa8~ zIeqle=ZWd#-Z)nsEsv9B^cI^-jp>!033t!aGXVK%3ib7nm$A;VC;xOI^}`VCL(@DB z<}-niu`x)_zrxzm$syxp6lil4wKyh-ZmaIIF}0R7YBDEEHhL6Pd0A#cL*pirWe} zka6k4WL_MDy)eHE;}ZCN_m{_qJkMOb*vQZGt_XO2)l*89tYO#Tf7JIHD&4bwGD5V@ zkRpV38AK{GvPXY`S_=S6siT{n?urUQGLD;?^Te+aTVsoH_XeCwmuWNty9-fAYZWK| z!5>C+{2oqxMjW3;pL z_6VdsN}==7DAaX@U|(DOQA3P0GvVX(5Ix20xcf>m=FMIi8U z43y8#T@9dGueAUh48{#Mel(3P{R^ngVEsvV>anxMuQVH0iG`IU6%#a6SvggOc!jQW zj?o|ebuvfg_CEE>waM@b6$Dk`n7-zH#9haQ!Vf{ALg38Z8?(g4!7!#=?_q5P=2=VN z1&On{Ov>*-q7dh`@tDkvAqC2DecvJh^kuQ+J(p6sv?^;#+@{t#S-904rxK4KE>S0D zKyq)eRprQ`V0-|fQQPlJKP)@L_6WI7Wy$1d1cK~Oh%U9)#!S+?Fu+F1EbPh|mJQ=2-rR^;f6@1zUQ zam|MMgHcs)5bpa&0*Fc&{U+34KNG9xgc*WVw;MMh4S3ZnV%o01H&JKNKYtQ6Mc4% z%(U-1q3_kG-rl-Qdx$uCg%fKo5V4%e8AizO!m?$P&)0GU-iy|uY>CYtgY3RnmCSD? z*vN-S{5ZQ&rDhVZ{cx1AE5IL5oxF*v-vg50m07<8*oJW&85hL;tU6L?ZXD-2$r^Ga zNQDDFsM*t&wr8N>T-WMwSEr)>u z`34eDkzIu-HEct7HNUta!}T8O-#i~NRYC%oZmO_I<)Mc%wsfBm z6R@4c`C=c{Qs6{*KQ@rhVVg5xs-^(Xw5#Q8Nn0jGbkcaHQ?Xm1R?@iDI)W?AeTQ*z-p-_j)XY7m0DMf=r)zD@>Vfg<@4HC zK?C9*tUd_EetUaCCJ^rFl<>KIZiT;DHu8eqUL*iB-6@6LYIyp*4~xX&0#`8Dkvh9$*ryf{XC1Dofti zk6jOGxy%m6#GZoND*IYuf1)*e{eyEO1lLV3`AUh|io?p)Kf17&?bK6;6?l{KbHXkw zeI=q7QL$rASfkCFeQ5zdjurAE;s#%9x)n}qbhPq2p<==r>04&D@)XkW{K@@MJXB$w zILf}n3^sq@cV@VEdqwi9`2OQGre=hYcV2~fpZhBC+`;Q~+#Hd2ePTc@U4xo_QLyrF zh78S#P@4&yTtim~@TIf&e=zZ#ur}@rnI1p9_HD9OyZ9TJTI~)cXB|n@vt#M`D`l>! zDe9{5i(f;wFqIit1)87WhQO<&%PjQX7~lp)lIrN zxgXp+ZdvIcHT$!A3&HtQBeR3=LClmM`K+3iyGXW>`2C|fpZnu0$g}`|l6CQ787Dim z3O(DDOjcQx^m@CqCEAnA=AhcOB8stuwyDnOOaQ7M;{W1jQKrIq|;MS>q1>$8ZQmN!D_`HH7;^*KVqi8b%>w z-740;&5|)G*p>rbTyqB~q~u9Xbclbkjkp3cjPMVOV9P!5b(sxJ+V#O!wPp%HGKImc z75K8l9~_F0R^rRz$Tq)|Y}@|$C}gr!9Y}rZr_Z%yuqp9r%xQ9FR)z{`et9Tq>{T^x zGDn%rTOpDQhx4tSV&J(@%u82&KdNLz!0XrGn}U=@amP&?BpbGxHl@hj4GB|ZW>qL1+FxGzd4&?l zci##>>*2)RM$#uO1G&Q%y0=z80wUB%82O}DbkTh`J}q750ky0XKn6SIzwtrsN85-+ zoRMqjPhSh;y`7F4L%pvw8%2l($a-xl1Eqo`sQO>9KvGyxZ)f4%pVJ5o0Y4KeY2V)M zW0}KrmMulwmWh_J+67v-*@AetySS)SFNNKyY*f`C*I<*gcpQL~HMi>k zzXu@u^CW-ZU2oZA$~R&(s5!QoL2ER#tiS{ym;^uazxq+&nBsbm)UJnV6zx|F#L&C# zJQ$dijgvyFbzzqlBBZiIbej^jWC@QALp&%&(+e`P@d|)c#M9V33n*vM#)KOzU3TN` zod#9g`Zp3hj`M$8eTFUxm@4Mje!8r-+VH4rp#R5@+|Zp;m*JHf4S4=xw!I*H^bU%S z99{*D*-=A`T4YqpwcCINDZ|QX8z5!o_ol4rmh}tEYwvv*bKB}gq0l9xi+-7X6@@mL z91S>NSe2}$iqU9~7yE`OGh{cV8KPh?VTU-?R%*+P$pT*j&3?u%im#pG4aNNk^~FW> zN}AqVayIU&BKjZHIc3kX8C>Z^_}o zvKvMXmVwyH<1GK7A4jab**cX%;peV*N&-r}`BUD7W!;LvByz=1*uW~CZSX42zTdAR zoWU=n3E?Cr1buTDpQn)QniT>sxs@8Q@XTf;p*qw~%HHKkm-H43C^+dqV*e($m1LKo z@cWCHiq|^*52jRMAb}sK^Qc3RSSA0<#DKl(J`%FwM#y}zp?;|FLoq}1GE@|23$S&m z=E_yVg6mT_cXwNEhc%@s)7pbYBL%_s>oX-We!3Y@tUhJq`EFTkk3;a-*fhEipo?$E zEaeBEYOHI6&Tk?{ce!N``E=BMUe_9Wfe8DG3=x!>xCS{j#~0sZ-@%r7d`vE#^nTIsyvOx@6_m$UWY% z=6$?3sz%C!+1HE^`e8(?(a=YMgNDQVhkXJY_4p_du=FhNsDBM#I~y`RGMy(L(Ohl% zAcaE?49s7oO2TIta-EFC*=j*bjRc-DAw#sz5R5@lQ z3_ey4sf?7P#PM5F#V|MYJ4}onoVh*Stqvx)?eP;gOJxK_iLh^z;g;Jx^~u92ZUdCR zx@h0p)vv>buBIRS2$`ZpAadhR*X&jP9E7hj0FsBUy@tvfJVE-L8d=D%iV+PVt6w_6aP0kPYZxwsJ)_IHrUDk{* zNAMbX7ojRDz@NB&pL-{}FwwnZR3p0j(Y`)BC$B~4!VP=av^ofmCAFZ+cIJoypLwP| zGTlkhml!T_=QYgnuAPJYDY6)1FY?J+?ml}fvxzMQ{<#7h2L(##$e5wUFj4hnpc(ce z6?*~%wmuA&OMUWCw%0pK>_`fzAurwS910`$Tz~`ydh`U5Vi*A)Q-Pfrzgi2Aoc>H* zYvBsZQj)*uR2?JybkL4Af`&FTrs=k=+;Qys%=9OzNUb z;`vw3T`UGw>q(%w+Y5Rptp!nXM$(1c#kTYkv%b~4j^)xDc0iJEdG0zxuSWjuOp8D4 zC;ZO-Se3Ik0dGvzF-7`pdy*+?PM2Vt%+^d){ zu!L4mep$(1_IUrVmqybJG5ybIY}dtkp#ZUxuFboJ0Q5ghH^rDC z9Jli1aY7b~jR!HUKP#O|JOL$y0fQg55qJDT%c8JkskPIUMxDBzZv$v z!V0d*H5#=^I%7#cb4R-XnF@WDxXl!r2QSd5Ir}S3p$E##G)=d=yQ^wd6$hUc7zA==3-F*pgs>$W_sD5RW7wOFhaY8F&VV!SR3-DsW6CHMvkx`jkO=D^y#AiuwFd2$c}5P_j}}g|J~mBF zvAw&r>)_8YcBsxliX6Hs7>yXRC6VWJWtl*sZJYgWTeiI&Gs}`18WU>ULAg>{*WXV9 z>aj>oySlg*?ciejIGD#qL#n^)DF5xy9RVpe8mW60B|Z9$GFF}yw{-7W8~**j=8XVy zW35#p>&gdFZZR|!3>_T)kIz9#T)9xMjd$n5gbi0n;!S|S#)Z<0n;DYSL18fG8xQBe(7mkRC+I#F%Shyq=y)%v z1N56TQm()h%$odK@Bzsb`vl`-*F^0MH189caJa@IS)i5RUuDdVfL4{Hi3Y(hj(M>$ z$vVqCQbr?vT?rIdo2*nw-p)enR>L?05|He7k=A@g>`wvSI z0~zGok&_h74PK<$!_+W9ioaaOkwSAhQ6REeUQFL2R%ihXRn#Dcw4{laRy5YA;BtJlF}JHuk~O;j_7Tz$2w zibRha>TO|H*6PvN>weq=Y8=bRn5Ao=m&$L=NeG=*{J)?2cQ|$FyC9FVet}+3N_|{f zue7=n@VjzPGGHCpx;cnW&f|;5RYGP*tz8AQ9-ro}l9t=4u_tS9zi%_6pnW~?%RpPG z(eosjxtCik&s7=!jLu$%qO0H^^x8qtY)WeC-{aTh1-v>eR#&!}T!e{I{|d<=dM@*H z$F4N~r0#h6^Dot`MJmW;UBf)aqwRCTI81h+ISXTVW;kXnlsMd_Ug4M7>F_Xx>E8B* zsddS%^Fw zpkEYfYi9Ny``}RaWyr!DqI)?t$p71s05wB&m6yBAkse4Y+w+KBi$M8yd3QIb%Q ziF2cCqvM>zX>7rhtK$No66dSh+^r@w25Dbf(oeAr1=!{h2_O#3W2M<~&HX~#*l6F6 z$CuZw56#xYIGL6YXUC~o=+b-&Lf7$7k%W`_m1(^V0$hga)cCX0o>W4M|F;|ON0=S9 zbz-7}RDx(*8BF z=%=1FOu<&bj?1L$Jv4|%EtAMNK@~IQbbJfO;XsY@{r!ay` z%VtAE#981)r4h%V!&w&BtEG#%kxRG#VE5HUDA1Xh=Zv-o~z@N_aPFv^t9oeX5KUGKa!@u-%}qlqN-;~YUpjv zHMziQRJQIJBiXrH>iE1pf|nL;d+^&$$5A6aEktqh{U> zehE!Pp#3f*eCD~ed}CA__XU>i>szgJst;mOHw;X0mJWy8am~O^Rgyo1aIDSgQ`2`h zx>Qh_{rKGIT|tGr0`eFkBI?9!jM$6ot8PZFQntWb3kbufU}PH`2Lwf;YQ~Iv{qH<+ zP(g`?Gz4RSzR~HF_LqaMMY;5Nd5`X~4~twKSP$K#5jBhNN1|a&<{9!rv%!JLYBc;% z7VuJ&}Cl%#&w8L>rI z#pH%BwkV^ublmIk#ke*KD(xtKp&i@`4(>24y6L?g#N}omt;$gSOb-@LO=wl&Sg*4P z!(DdlwZMHr#;Q|czv4gmN4FEqI5HW>V6`caNUw$*J*$MTgGZ zAxSJWPp&Io>lzH}Ap5ip>)*w;3vMnz^T1!)s)+nlqdxoGsr|G`*%J4CEf04fBwr1~ z)lqLw;O%g)^H0wX0hm{iGo4mVE@Ii(a??mWF`j@*Qy77XM7fwU2iQ5rg@LvE=LaW8 z+y{=1W1YA24tDUa>YV&k;$v9_@DFz9`lpb0ul9~u$(KT`OHS>^c@bzixn}7&AatHA z_brfVLhlgV!C5){ze)gqYcrH6dEsY4G~0tifc7};bZPvQ-_Ws&&Kw)qw}4g<^vfZ9 zlpfO9BA#QzU@IFk#)PepxI|hU$>6sH$;GQ(dBp$$BIlIQuymTzryIFRz37z8tOh{# zv>tJ8e%~p11N-ACxBpYKR}>xd!}o;Lm*HBMW(K_^5(tJm37Isuhq=^5*)Wz*3$NXP zI3H)`^n;_V+IO`+G@grN(j~tHIbaT766z zS-t1v2WWD|qf1?jS*y4MzC4a&@DM%o|A#i#~|Hz9-g3_kXPeE`qd ze%)a$n2=J&UXeEj{r{C}h*V?tI)I%9sMt(vWbQKL!o@e|;468VewN~{9;Lqzg}D?p zLRs|TnL7C&=ci}+uyg>=Ww3}_uya5_BO7RAEq<* zum`P#)zPyIaSp@|UK;iu;wj_^X~B_vfvIgp%g`!!ZpuEtsx~eb?Q&BNOarG8#e(L2 z=lw{%;PIddW0EniN=U+SSdO#t)!zZOC_I6C{||SKeob-XoUmt~tkCYZyuxbsuwan5 zw@k-&|BFvauKx6v4*9$o&GKcpmx>5OVim`W-UV?^SK@1)Na!@DJJ8HHxH zu(yeWyYzT4;~>CHe%ZhmBUEb-Dk+FLXr^v+znCY94IF;x_LM2V{Y7=|XabVNzSeH4nCDo%U8LBfebe(QcFbLxSvv`KXt3qTz5icNdkZ*2%s135&d@}6u#OV6w)5}X3|-lC`ca#Q&Gu^| ztP+XM@NT{x@iS(VOIeI^Hcp}I#IyZS=i8hWZjn6>PzEh_*%ou35Ia49aL^-RMw-YLqbT;Q|hH3MZKl6wi-o8&GH$$5yG)sOKH1XDg1gnVgZsAD*yDV}xQ>6xS>^a~D>QB$Q*>KDH~7qI=qt=e zj`G`h2kH*gMTyp6=JaC|Zu-u9e_3i3tP%@erTT?8_Pq`2?GLjlc>MiA;rp+@^!f@H+GfO#;vB1~uUP~<)1nNc`KFWbquTKWLLIwIX7_`} zmnq0*_Jv^62l_kMgE@3y#=I$YgxHQzIptjOF%%ZxWDD9$N?7Vl-h-!5hMQ9ns&J9c zJp`0(&8LVCd5QykcZs;IhAf)jdQtHT-th0-dRFVv>yGA`Xb6XXZSyjqz!E@-xMtgN z=7l)5!3+svnJtrvU+fz8DOkN&a-P$54&ni&YjB%%?&4`I-JT)4>lkouaOxd+I^zHBngb=Vm#v7j4WY zV)7mf{#yrCE&c&Z;c+4`JmudkJ6cxMHP+8y>rDL+LQ9V6*3n{Wpv6uXjKHQ}Jh8%* z{|yGh#vlNsKmj^izKUJum!s$4KwR-Pp3HklRBhskORgRCk7%@R=f;tE{8GpxL!V7n zhmsjbqNTw_Xqy^C_u>m%6~I18t3@vIzXZ6@#Dl9b1J^?R=S^D}Eev-?jpIF+_I(=N zn4uSL8n4cf{4lcnuTwe3sOD|K{*E_!mnL-Y#_(Q+#w3*a`}uvR zl~Fz@nE4eH=)nKDp-!y8kJOdXN=DCVZ>BuH)}${^tmE>NlzW($jtPrRXuj0@*b0|YG?vz#?I@Ghvy*X=_+H}tOUVfWrCxiQTVf2$aM%QBG8(%j=LoCdtv4<}V z^smJ8OXW)5uuD1ZKjZwczPtq>uV|&YkpIkl4&PPUg6Q8>0_K$HIS?CYE<_&3eb9Ln zq4e(iL`htU&Y5*Qrdh~(PHxB1BV3k=rXA3s%||X3T_-ZWOX@j(yveQh3IBPqpqEdz zl_5H{JrBTtzqw+b5By-G=SPp7og5u1-Kz8HW^WPvl&G|V-u$@XC3XJl@v)1eGU_s_ z79fx7+Ij&E^>zFwEBCj8-p?ablNajB6!cU`l;W61h6)^>{@vw}j?a7)jqW~15F^oZ zpFmQ~<{-m$N=E5C?vMcotJhAGYGY_uEu-0RR-9bzzGu4{{PAOZk!UV!kfj(jbS>Fr&-TS<@QpS+qybO@=!S7=rX5_bR0dKt%1QM}8N=G1wfTDjMl;8Y!8xNcRF@2Q~9Bzc95 zI?pyTcMlR>jR~z*)KweuK@>Ya} z+t^DODpiU)pocrVHy7jUN*i&er36@j!268|9X4{g1WjZKmh4edI$fr~Z1J=YNy1le zA<>N;`??mRkE--;`lZl^9IJ-|G{o!&uGI-7432g=qKIm}>l(zFE$Phlzk6Y<6X*KO zrn(}pOQy8=@#gwOFDVU^JK(CW-ae0K_adL{%; z^@s7FW=>-?oflW>dli&-=7VagNRf=h5RoF~&Orvc*TK8&mc?4O+g^*TW0p%Z~)oaA#}($2F0asv8R%QzsnH{_Xvz7KThc)(b~?*{uPhwGJ55Z8zuDT*lC_>No@zi zuw3S0z|WTx<&x_f221VGqLI>R+)oTP+8Qm^i9V-$jj+r}>sVKW zpDDfD?AAJP)zu>y1?<{NA_0AMv0ZnErn^IEfh+z`k1};3PTA;r#2Xx}{CMNHelqpo zp9`4r$;VJ9`ESpl37V^mC01it%&d7x57W*s0*~Ph1qccEecih8v z^nbtnt>2MjF&>M;kGqbq7N7i0#y=9C;HU^oKQj-53)0w)PvgUeAq6;*6z3jQsHW_OpgV|CjHX z(F%CSupJV}H0VRy1w-P*cy@SUa82N|Z~?>qY*Id)1R6N}+euh#fem&JME~i#_9SPp z>mfxjZ^ug36)q)S9QYDY(IGCB-n*nakXV{*{@0fd%UOH%uLw_K)^&@_g($`gU5XqQ z<{d>nAYN!i{Y^SfS4>w;2&X}w8cb^Bt9^*~pYvemLcLV`bvtro#llpjYcTk(WPjTj zT!`)*q{HlXE^kV=hprI3O|2*-uw)+pRR;An+qQH&iT+Zuj>}736L|IN%%MP>IrD1h zf6<5&?ykr=qoLi8Z1momXmQeHwB6(E+lQqF^VOyp#&cKfaSN)MwOYSymSe}45$hn^ z`+9Vu|K5A{dcibZ)~+Wsv9K#wCiZ&wzo|>|IZ??CH||Yqc{b4U0&hzo<}M-ztgmKm zAlzbTUfe9VWG0+cglG8IXGTCGOaB;NUO#OP5=fUey2~H>ArmO*F7z|ABJjuA)RK1f zf+YRF-P-I^vV(}STSp@QLv zz`BpKGHDC_uz3D2okIhFSw92O3M#JcQDD7VjY)rV|(M?3a^#>;PMm!vciaem4o2o*Mx?R_+id1;6K~ z0=55pLhsb{*EIul=v1Pg!_W6z75+breF<1o=koqR6x;xBQE`LVYD-&GP!y0Q!L4X5 zU~3T-SridPWZwe`iWXO5aiNM3T(Po5KnY7AB1;66s0aap1c(?ggb)HrNJ#RZ16sYU z_t*b(o=4kTubl6E^Ub{T&O7s6>ErH?fdMSwR>mJRZcii$3sq{okfVO}MqcoLYE95H7Hz{hif!?hIe1TV_JlChcpD z8t-T$q1!c)n}Lauh6^wwM;p1^@{yesZ53Bh{O;bM9*ph`c>k$(bpW^{{vP=+FLsNA zL&1@RYT(&EaB4sltrER%ady7CKW#1c4$g97yT@&M=8BZoz_&S^-Er(N_q_!pAtogO zKe4#c7_zSHt`Tl#Vr$QnlC~Z(OdY$C!o{ zVrd<&G~VTBP8nZ}L%{J6nRCT02Idrbnl3<|xCK63u=JUmagRIJoqjpaXC$ob4=nKz z|Cy4~iyY2cZWr)f%qWd}j5czB?G;oK5U{4m6nPFYzMT+w)gVRAILuW_J1k>5%Of?_ zU0ntBN_LsRB2t-qcfSOqctZky|n)_mhyT4A+i_8zNqKrVBD0dsmQNrP|^#Qc8G+y zJ+HIYK`0EgHD5&NeOlz9fN{98iJu+6G%K(q_ebe_zcUH>YX#%*6AjA0ehYcmPB35n zbIJku1~I<-Z}m?b5=9S`m`Laa2YPZAw#*l6{XTIh#zR3C@3Pc(H+$Mp_%!5=&gv8$ z zQR`M#k}2o-Qe|~;nV#KhcDfCSN3%bTtZvo(%Nt4 zD_Z-j#uNi4`0m*33;C{fic89u`e$2riJkW7e_}kZ-PrQmmnI=iQ{k08BWz}V2@Ydh z8H{|}7CTnYJ08e3&gHS@Ryio6qGiJ+9y)SgrfXH(RtWH-a}M2tjz|(U({U@w=0luS zz18{QgU^b(_Rp{T>RaUbJ8|;TR^|akMT=U+Difsd#2CvL5o5D83)5TP9k+<6>7Sf6 zd_3fn<9Ki7AXzuyL8-?Fbl3}0Yp=#aUb={F**_LeNJo*7|#|LO5`Mg@LQfR#zD|b(msAc2sc_Q@v751hh^X`6weor}UMa1B_rL~0B zg%q4^q5hyRGXfvMqUnRk0)6Df!)vCxO1L$6GYg^grXPz1N2?B-`_Q^#&->M8ur%Ud zumF^vV~SN5xZ+>qp5yQe&%jeuO3_!jFfO1^x$*rUjYlKf#|QQ7|CN!ECLvl=w`~0{QwVr(oEM+T`_f zOx#d;`m+Ov*^h|wSl2Ax?FrMEjMP{nK?4q4j<9HnY9z^~CZ?U8dQ^=uB~eMXtIE|> z%sd?RI_yXAhj5hq)P^~6JpOh_ZXpQz>d)g5dwF6f4QC6OL#;crN;NpcvJk(I*w0k= zybbEE8m{t|{4oBv#W(1UWm3J_LU;DG>Pbik>K56zrF>e&JsST|L95)i6DJ(K>476n ze3R!OpZEVd|Jf~>>_|7+7^s6_I}E`}rR+*9pjN)qlO;M+&InD!4}iHW70eB!hXiD4 z1pf8nKVg`SM-P1XSM>M4SwlT-0&BxV{TE2*5_e# zNIx(b%JpWC4rDc4mPY;h@cmxLmuMqEW)kE2bgu-Lv7>`x$JE$)LeIiw=DD1b@R50g z%%{0(y~|ZnXqw$MJ%>(b2?{-)zZ`b|M?) z?rMa2NKN-z)B_Jw!Vf-NW-UX(|MTOJjuU@$K8QlpgT@f2GSaaPzb=p6Td-ztC;gtL zYQoka4Ef{MU<0Tf-DUI#c$#u+DTAd@Zs!Uf9_Dfq6CFwkw^nGXg7H3qrn_ecsyQ2i zZN?gPL@EO(Cc(N-v`4P^kZaf{=lrBy)Tq4pf4=%+sb0m>Ef&oFjVc@#@1LMavQ3U$ zZ-75s`X!2W;;prjAuU-W7j9tDh!@R7ZqZ#IBNlBf)L{|TGo3MkxaZLk`!Rx!|7%^V z#j25vgkQKEu&Wmdq7h34;jy;SNhybbx9G)ir2VaZ!CTpa51FZbvf#C!{b&9Ad((wa zH?$Gxht&Q3DV}BG7Om+!Hc}@Gt1^fCR@wChB<6m%4~@_FZW} z5YX0-ZH+uh1&9DwFlX(kCXBqf;Fi`~!*20=z5{(@C*Ts@$&veR!$#T9(L`E%8o8ar z(wYN@hX9=Hq+>~I<)a0L5hvZc3foTWF7w40kT6%&LE&SHwY>c`3}x*%xS`*p7Qqs@ zG5$p-P!}0vfSjxsl;dMNaJEZI>35`D8SM%u#(&tPT`G(x9%#op=S*kfaBLzwIv5|@ z`}76_s#6os(zWcjI`2OCcGQdgoo=0sOxH%n*yop~LK2mkgpKjnoTg{DG<$nu=LS^< zdREYN^fA8{PNviJPoXb#ZxIkRNvY?{jw4)tx^1)tDnay^&FukTvjckO2j1k68b>~j^r*|6c=&J? z=LhErQ?hht^hmAgi&H$hO~DaLvwUOx1m->}9m9U`^K&QWf2F=eAcx?chnVMYZba z#WZ1gRJ)SYR_PW{n-uwYtLZsLYXLKf(WLKmk}Bok@WU8WE}t%lkJ^I+z+6HMaiXay z*#8jZ_lnr+lJBk!R@-zd+&Sz(}is$taCZg;6kNUx}-GZD2jRCn+keBrUBbI7g2DGY%xCTi_GP-Z_rhosc zaffj~3bXxz+e(+c&f(fm80I=86|u+7qf6UWJ#BZOO7v8rpK`#L0BOEVRXJJ#LX!N2_?UGYK&lMrX_UlhDCtMe1z zQ(JO{N}u>{6KO3l3KMz9dvZ8~2VAeF#W?-F#|;u$AyFSsboiN>WoErO6n99yIwJi7y@?k9Ya9`;K=L(*y-s7|NS9m$bK zhmpk!+ncO{4I4z!;AC3cmX{Auj9&UZH-Ro9?suQqRN1OHg5zJ_#r~h1Z{4_e%@01t zB&Tr(yqsdw6OB$Y3;4NOrSA^KbbFMP!}2Il-X*^=DMAMtP>62O}BUcw9 zPZmC3E)Pv&TmlF})wBL~1+iuC-nnz5q+P*(R?d(gtX(Jg{r4T3LKn;<=X1(h^UB~- z0x@{(T6vhS%$Rqv)J_j)tBgKQkJuTT2E{RDMfR>7Et$A^TC_q5sqIj6XkG`A*h+Sb zE!*x4sn6jVyjHw0sx3lqR z|D*KqrY283#fOvPMlj33K+&2?$5U=H&xP&tSEki~Jtm4QWH&iLU$ zWV=nEMbQS{rVr|Ri`nXhEMX*K=5Oq0)jG|GK$7c8#QmFHbVQ+$EA%IDIjW0cs4Xh^`;{6 z`Y+L%Kp_JYD4g>ja-4;v057-{dCX8zAJ(}Z@d8mi4MvELgl{KlD%K#g$i4@^U7>y( z*X;>}fZrZf^44zd4oXtJuf}Dbzf^=5?@i&Ir6?+IiJrf*b1AEZiP6;Z{{P<^A}* z{KwQjlO-OZj#gGJ@2aet+rrXdOll!orhS`cW{hludBeT>D>)@Zn$*srhG#eQBuZ@% z&_9e2DNoBuvU0-xr2#1yoQ;%mbl*m48OsBD4dx)5$;MCc?GGmSty>A{ZboMt)|>lO z?x(aZkMjr#;!4IUwrj-4Oh$Gq*|SU8P;P9C@f~Onz~$c2953mk3)1S`9O3uqqht8I zw;R&R&SyFUDp|DPwDKM4^0^}*TreNTk8bdMU&OrU_(}bhJ28s(VhF zPKenvz%)Hgq^RSGnUgev@!1}RLL5K4Uviqvr5Ijjmrp`QR+kypSQo+kBoI0f;mD|R zTTDs<*UTcTO{5p`)e>Tnb@P;jglNs}ed26jJ!c|e7W*UmZi`wSeyGd!?pCC($!a4l z?34bU>-u49Hd_RC;*_O@AIW6aCx(c-!R*KYpP^p1CvM=Q>`sY(E^7>k2_Bww<7;ZX=hjP$`dU&m4#}pE=mr6s+I` zZLlH|+HqRi;M0BBrz($ub%3EQ1Z2Eda3b>?$I}$?C461kJ_WsF0m<^hH*?~AnubMg zNCs6SzQKt40E3(q3I|FnYcJrHQOTBnd|*oL^VLrmp8Y_9f0hJa3Awu%PRzyvjVn-H z=qd?!nSa(R@F&(G5a0y4aMSeW8^uzlPH%3J^4~l7NR(FV7A>}tR2=ba?k_G0DfJj+w7D&S9Nd~o=@_% zFvJAn9=;=0PIv|I*b3i4T%7Ghndg6S{lTzIy{CPrrUCK75MI*WD zg6)#{7s7I%EPS-8mjeVvlyHY;sn7_gRt%ikYF8W*tKCwdkx$NTI7^}X?}{1|iBzt_ zYx7y=p_yrqT?Ml->ipJV8^`&l+xDhz>9c?OR@=8QZ4tHd?0k`^z}J^-sfdYYEx|IU z8CS80W1=W^D95?zfMa9=0+ax-6fz*2Ihix3A+OA*Zi_H$LaiC<3ifRA?}8J^otf3F zQl(^{A`x;jktgkDW5Ui!NE+Cd=C|JNo`Iu0OS4&+$g2McaxBw#&tZkiha)iBLt53= zK3PXse+YBQBMZkq6a;1=_tD$q|0b{i&@gs%tzFmYrM0TatfN*M2PtJW7UxF=jMDI9 ztFwHv)?Ei|yE{!*Lzs!sVj-b4U14N*pWSzKxG5DYe0-wSD`pQznm$WNwpeaHKm_rc zWk!?VHZwcbcXN@0b}h+~c0Z60mMCBKUkWb}8e@e(w6fsZ3z2Y!!2zlRluSfAnltqn zEcfE?dV_{vh$Pq6f}vQH(P3I0@EHcE=k5Oq&?JEqx__>bNg+-p8Y&vQw$|J3I#xKk zK_fl{_BpyQKfy7YL6%gR%O#_6P5Yi_P z&Zexcv!0B=i6tut3LnaBPU|}LQ_Av_QngeWtOSi!46$Lx&ktfwH2Y~I>1t6Q(^srk z;WMigYK7`W?n0`WeXOdhD@t*GL$|f)qF{deG)bTR2?zz$;n9{nU5nc+<2WN5Q`=bsuOz_%dj@Qr-xxaZbiy*}o_&H8 z%exlrJN(PE3IUC~_Al!Y2#JmKt<(i~Kd}+aXKm!#BL@gaPqhxKRCN*B%f0D}p3)lm z>686>Vy9*NFl4det`$P<1YT%v$qEYWFW}q0y#H=_cRNt@cj+v=D9eLG8Q`|;V0LlBQzr8ZDTv9!dts7R}tA zNjG-ULmn*H{B)u1PeRIH?xT&vyhHjgW^sJq|Kb+Mzfn9?3y1aEzwmMKQdD~&wFC1SN}2oy+R;C67_ZOAO+s$6#2|4QSk7^8X+5guQ%DLOMP>BL4tOTjHEHCz;ZX^VvGT*-zwA_tF`gez!u#{^AtU*V9yy|g45{J)iRhnI zb~e~B+Blx=?D(poo;;%R+|5R%N$L@{S6J53KAQgeGr71{pnzXU6TFj7ji^W|kq6Ai z?xc2$;|2jvESZFGA+}*mf8gW_?Y_hcPZ-pU2=~ldj8&hW6Rb3)nUy!(+5!RaKa&rx zi9dpx|F=fS!8Hf1J(395>_k;XswGP{c~;o1AP!b^ETA>G@tW5l=La&yTGfoh_y2@j zyji5v)O_VA{KZnmBTera+Bv)Q$-ETlPZVeRWaPB&sylqi4*t&{zCivdFq}^nf#`qu zzzu)|Z=!l;p9*Xiap@M#&{ma5Gm~^AV<^eyc=#Wft51kiYQs7XJ@Q04M>SVsN;Awg zIULVLWOa*of#@oY`;$gIdonUq9zatjC3FjLb`;od8BN-*PZefGe1Y7}j5b~|W72r_ z3e{KMw`SJ}r4b3ib}HV{5QTD7Y@?h$5`DnaxXt;^3FO^)sOoF>+8z`41I|;q(1Ae* zkUNIwHEX7NVwQOMXw%6WJbRgP0IzReq zOa8PPm1MB8%`oF6Q~Z2G9*(@GUVeF#R=K!2A;4H8{**p-;Y>!^AM6cMoz9J^d~%D`Enkaw7IxRd?| zZs!*)p1GJS*U?$?HL}fO=6R`f+Fx5s)>6Caoc+kSeV$yenTHJGHz%)NOjW*WArd54 zC0buXwoH)q7o3-)+cqqIdn4r!(fONd%slmS$IOM>P8Z$pHBM zO!3;i(k*bg_2S)6iDh47g}<#n0Yuysjk@wxfQi?szkySv<$~u{of5?@+qrEx*fv)^ z#h{8SePmD3x+&Jmz(ab$>ghuwDOwADz|qysO0HtG>m^%vjJi9Lz&kbAWMjEze36!3 z6J;kaBq>|mN&gFRqZ|GA5-+&VYm*RF5HQpEH=Sq82X}end)|zSjRRiKJRTfsTw<;2 z5|a!H7o2oBH!5aWoE(vHgU1Gk*7kLtLhRvs(<=!H!NqA2(=n*>fFOz%(#$0(rq@;= z&pGSjho#luAkW_bt*xcr&cUyb#VuJqo^LQ;LQrO=&8!W5-3s zMrOIXh7S_OU&dpWouYa^ynsAv(P|sgdN8ELm`Eiy@7ViaB81NcWHTt^3=e@zW<_F* z6r7&=wuR>x86_zN6vG|Qj(#cmG2wo@MdW>+W+sE%U|uP(8?cpu*!k;%e6F@e{5PNw zUw6HtLS{`24yHx+z05m-7{z>>%i~ArBL{y&LAWDWF*DO8+1tHrr-FYa$(FIJU=izLUUToI|Xji%CLJY_h& zv#KIB{;v5tV3oVY^pIS@wZ~^b13z3 zu8A1!5$IyUN^f1zvJ7Af5?lS<(l*zrBE&c~DCUB_d+H=czACO{Co2%QCT^T#e}dWe zIux>XOQZR1@m*Kf1ji8-MZ*$E62>FVT{p-C$0!b7@2Dgbh0Kt{IUMolJNt-|fE5cT zZ5EPp(y4+=H-%)p(2!F-7=%}FySfIGY`VqiLF-?HH^23SYgX&Ka}+{MoAut>WZ7Dp zA9x9oGH#2bTKA=&*UuBndh=Fd(#JjfFGid373zjl{rin^!15;6>)BTI(1X1DeLXEo z|D;4QU+^uciHeF);}zur)c!fY)a(4>lc1(@jL4Ct6*R5`IDz=(I^S0F@U_`dYEIle z7@ihUTx19uM4FAz6eP4#+C2X3a18|2<>AhJ>`t9vG`Cq{3v)myvz*A!Q4 zW~pb7j)#jfcy%r`r5Q=<$&@33&s8SUD&FWb?;(j)00jLAm$PTC(6l_jFpgL{P_pc- zZ_w>hIxafFH#%W|D|4dY8t*SrEeZUur2lh<{hSNf|J1y3uwe@2`+irtDyWnaJ1>RE z{N2a-;(nsvtn${H82sC(I|Fe;oAG;pR|rW=ORE+?uMH?x+N$|uAM$goier1gpE8_! z0%@?`iey|_7k@*u6U99)VAv!@xSMB{H2SALhA?UjAiHo*Rn|TWE9`ikf8BaMVqdiAabiPDHGj_|D?9Ydy7v}nFWa4FU#AKaGol%W zu98d5TrMUqY}llbYSe<_B2-N{#uNdC#)^ySXjzX4ZMFbC|2D0YZMqIgP@!ZE#*=Tj z;PruDY;#Tb>|C*ISkILq7;ax2?VjDn?e0}7L<|OVuY0YspBS(J{S597XW?Qwv1T`g zy>^BAnL~XCCxEunW<_pH)Q#`%;7G&KXNIlNDl+U`zq44Y{R8*$PvnHsZ+8zO8NC=4 z^d+fX{c%H2S}^MUn_AaBX)z@R{@m~BS(H4Nv5T&IAS{a{sG5WoY1y~yS@OUZHYtB=B{n$(DK=Qe%B7o zE_{-|=^n`$=C>@a^nNfHs&nT62x9&ZeI+g5eSiOw&ki_zH@Zksu{~Y zjc|17qQ2k)kGJT}#p9t;xl-mCvH0J-(l(H4xdwf`C1#4ypE&k#ia_Vpeo9o4TJ?DP zvsJ>4<`#zs*9_~;>HSXiH< z%_706Oyi0@D$3j-Amj9~t7l{AUh9g(E6C}t!pWNBQJ-s0NIRl{@Ghmk$i(u zEecPvT7U5V{I^QgTf2r#ek8h)$sO}QVK-3M@Q=#aTd0h2w4tWr-|tJ@X^oi4=jefG zbYZXAtmoNBwJmB>p4MqyJB`Iw$rT-mB&q!o>$_i}r|KKT>@`GF?vCtlOL1rGnPkqp zjZs4eg7B%2GKgiGh(OnZWsaQh&=ul}+hg9ik*Wp5uibOFjP6da_5rnUiBCeXC`x)c zt}X7`GDv)+Qn+g;cogtq`D^*_`}pztP6tP5)~SbLh)(JO6x7*=#A>Pk;a2{O)xWz7 zGDy3Z8nefBI-WRL#m*x-dMSocPqn`0if8IvveURQvRZgNR&uk=DTyQA?!4SUYxMQ8 zoq^8t7YKm?r~9v&hg!q^@Ou3U4m5!=$&}@my|OoTGTXow6Jb<(`?Wq{0XT2_-x2#V zkG197zl?Xc)EOcwL?H|lb?k+8s=S@p$#XF3T9X>NZ0Bm^d@e7acaHHEXdPeovXU0L zRHfj`%fqxuH``our4H-5kGzb&u#0(t};3;R3O2U$7wlKO;&mXgwF{vJt+ zNW2_3I7doSO8CvezU))Eeer)F_65)Z*K@jjpQKj^+)2K2PqDI_*s+i-^eM1Qzkf2? z_&n-K{8u2`Rv&yx)`$nu!}BXWS}%ZoYYzzQ;Mf!AYin2HZ0PNRv=au_4~^nf!Yyo} zvoA(F|I)@*d$vk}U(~ZxVi~PT?&H+I3@?W-gBKCw-XR@D^b>Kx?Y>rSGd?Y;7l zfc5~jbX#%7uu1OS*BNmx#Pr~@J2NlotgDuW%lm>yw_LCuQT#!5s#C-X&bCTi$=}MA zj1ifDJEZ0H71FqKuS8Lk5~TqIy&K-NyxLQNSJ&h zUpA&zconZ}^tG50;z3Pi%qcA3JX?6N_t#l)%a#*qH4e1r2UG^oxA*W zy4t)3(vi|?71TKJ10hoOYqO#HCT|S;&!NZRjb(iwgarNbo zrz?F*u=NY03P&0*pCgQgh39e9{+);D%6k%7v)^-fBm<|3q!9>9%Gp4K@zrnYLK5O< z%&n5zgx;y}i}(fonGM(GQ#qA-DK-J4y~QrO$g_1=VJw~R?&`GV`}9a6>G*wPdkU|t z_P|MpCHw~F;pRKsH(gyfs1CLP(8lF=!muUq?Uao}s)1j_?*BRtNeXkcYX5KFaS(b2 zgd26hb69q!mF<%zGQVGl%(Ih0gYL2E%0nd{fe!=rmz^WS^t5V%&|t+`MRjiJ9pjm< z&xSYpf};ksE6i*&z6_wNO+#=Z1Zw?HReZMB7pd1Fj=_IrYz?S|_SbelzQbudBV6$+ zi75!ZV57Jr(3wjomd)*^Q!iW=_WqY3~TtgjI%N^)}coB=4al?a9cKx4Xh{pGs0-g&&Bg z_lh!*rQFqbsMo!5erYT5Kmr}~z^+)<*!I!FFIq{@#}z8U8QgQ zDpnu48v#7*{X^llz$A?jM;e05nsZDf_2x}UVLe$Gokq^Sl5L?ijux;#(2TmEQ~?}?+OGVyjD2QC&tu8{A@-|b zc;ZB6^WoROBSpArdJYowc+HmNK%5!ghXIa|6SGW0RSfW}SgKWq&)1l7NGiCb*JG`; z#arQHZxKg_<-s+~PCpGiyh);XQr%)b53}aBIYXy#3ZAdhdekz*Oi(HHQqo3ei%h!SdMQWu=%8#v$y<%+=&2E#dLNU~h zUxY(b6I#^hH3D(ZPuj{UsC?ec!&nvhS~luG4ZI(9re7Y@3$SaJHC;Yi&d9 zJx=~6C>p8qzfbSwhKwyTEw{R6Tihn4`uR)QZm^1Lp(SxTjl4_v&_%;UY>@n-sfKPJD^>5U zHYZ(m=Yx>0eE&G}L%&caxs~bQ<3vgO_;kGR+(`YkwPn-)81_@HEeftDkj`L?83GA~ zDpNvQD;@3OsonosUHTL#fYVwz1-U2x@d8Y7sBH0UxH?C{HSK8inA+JF9z4n=MRp%1 z9y$!Cx_JZ`s79xq03<+tLeaw5@MqkqmWuUU4cc(IyYy3RgtnTj{@XcPn&WK^UhZqt z%l#u>nAP{L6F7S|2^4Nr?LG&}2JqSenYXu|>A&TuMH8hTE6ATi*7it74ieAtO}^zC!<3MKIKe}M!Zz8l8T-`MW?uKR*@X*^ z7pz%=%z{pp?SXJ>LW34khYj3zM9p!i6BrB2+q{!@;O zkn-Q5D2l|l^h>GzbjW^OkQ%D243U*dK_6T#R~aax6? zxT5A)h`qTHhO^p~faSRT>c4ofKC-%}F#RB|@_T5~N<-qgX9DEEm38y-_icK?O_3Eh zkU0W{dtkFMxioiAi{OImaLnziSW`9#Gb7aUGiT~M2%beRgkM7!`P($@kME2A(?8$Y z-T?$7DVvkWQc~-+kX7F57+F`sLMl(f%g$_N{ya6~3fu~Ascs$3Ny1$9V=wmH4r>f{ zr(4Sjo?8@!fQ}Z6Ut3fJ96M<3yHMC7Qyd1 z>IU0_@98j2)w6meN;oZ8Vf*mj&UwQ6$Xz&)3Ro8{`Q-b4_HF+}(fd;mQ66v>5*|n$ zTj);YflCpJu1mRM?GArO7-h`V%qu5!4F}MN{F)p|zR+>rD%t|onV0&f-Ey6-a6h)lH({_<4b$?LiiIINze0mv*^HNo`6I-`S^VPyGI*` zLFl#he7Ie5`VYZxNcT`6JM()=`x7VHjeAFH?@U2{pnuW-v%_dy3#~7BTg;x{)90n@ zB6k>;E>IBk1cQ3bYLclqk-v;xBNX0gQHdH|qxR}*UFoNaWmLker%EG(KA_f#-~WzX zCnK+?Bl}sEr(VM!U)XkRia-n5hr_oAM;mM9d0ciE7U*Kff{HcnNYh>ow=EAG#M<3laMZY$L>pJTjXOQYm7|wuvWP& zfR_@5Cv8cyPC`Nw+7K|os@VgKMIV&={-=+8>3VB31?@~;B_Rpdu9EO^yMBh_t7rnP zHeHe5`grW8XBtOQA@L^RhRU6?G%ALzY?OA(6~bsJA6PND z6}^n=BKLsOoF?JV?d9qy0ctI4EU!KC`)%1v-u0_rOzQm=dGsjmlJezi=%HkTl24G7I29WkpdBlUvd@J4+r9kKVbH9S8#0PA8jc=f1-; zP8-pym1h~x1$^X&CF_Gv_oLx z@bRhRWQ2CXy7NPT57X6M0 zUQ5;^%$W>Tc+m4xIOX*mOrif9{~k!%>S3bIg9?`aR+8z}xgcKi(AsJ_7U@unJW6Ed zH)Mds7;?~rCFwBLP!#%_;Ag9=hTOn4K>esM7&m_&XfU6_j0Lw#3YT_rxp-r-62ww% zOz7pw1`^@pgI4Xn8+ZQim2zl61U&FcXNl>;!e&ZPQFLOWH$CS0I*+b_$gd&rm?EPqlPIA zW%(S70~zLdJ% zVHignN5Czl%aLso`5JR1s1QM>Ab#_Z`-EP-dLu>^Q!RB)v-0D|PDML(cN)iz<`$)W z*MZRqi3@cCme;@%gs=oK`z731u(w*wlEzE{L z_S(4zikr7&r{t|5yf`Z%kUjIf-L-c$t{WScO~jxwY@eWUrm*N{i_p=+YqYB%+hnJ4 zD$tZ<*U(9L+&r8z$Jis<=S8@4yB-K<6}2-mrICo&v#UjPO!WSy4Ngr#UW+BdoDI8g zvNRQf6x{$A0d|W!{ZorYOJD!ZMF4xc0O@^oYU$D~%}^_GN?Q;}HCo(C<2&rbjkO+@ zE9dy6?#t5m*`=L1vzjS_&NUU5!BC4@yMAMx%&FwE#LgGzjKjtl{AzE-KCs`u%!LRf z?IVz4aYs69o}J<=d*0OgkbJvUAuqSIc1C7uH^&$v^UCNYV?+0BRkw~__p`&LcIc`4 z$3mnxw>v*um;p!V6mR}Sx!}XEf1kerEYS{h=1N2vYDL?BvlvSe=y{eN2Bi2j(C$D+ zE^hdAk#g^thcM5fxZ?h@$^U=XnXz@?zzMbwW~`#(i&r8v*Ov~ zMP-Hl+rDbnG}!?@(8XqLE}-_z!6hH8t1Rq*G$0d4`PslO}T1uwtH>J*=^vCM&2DEvE z2kmkmOp^)GH{M~_Iaks1-G<;Y(7o+r93m2Z)@TddaGo7UxT*&uRYe{QjOU7_!Jsw{ zts6)@mVh?ud@!!h(+g&AfnHddycA|~NEFVL!=}jKU}YXLt~R@*d{S7WBMV9;%1*xY zB$<29rAO-zmHZ`4LwczJH^lg%Rs==TR_t&u!}3<&I0w6Bbkh{svn=f7b?KREP*bfvhLYilFOoQSGMGq+(X%t&dRS- ztV9pf?$~!gl%zjv4$V%4)u_|k#OGr43gZ^+s5xTa>fUe@`gYcHFnd=i2`(~L6- zG1Ng`2`+sPCEPbAbVeIUAJ8svz-qz8zT|Vtcc+Y#q$Y`>u}2=}?zbZlZaNQ+Rhri+ zvAzinFovcn*xm%leD>JLY^0Zp*k?NT3i}@of+6yiy*H~L&!ciCO71#Slfx~9Re|{p zNd&A!h;>;JKiqp0CF^VOadsBI&rT}^-IpobFp5$=vdcrIt2{Qi>1=qz^~B4NuZP^` z&EK5tNFc0LD(?U5il!kK%hUinNi~uep^#Djp!dhM5jDn4bh>|JwPN&k0@KMqH#1LH z1>{+#tm8xvfkLNSt)MFg1nIN>$YnIHi-jC=CNjG$HjseHKO9;yrRVWHDMvVm1qw4e zb$9eH5*VH+*`OF$NaEzMaH3!sO29eO=mZMUj3%$$ySx?h%4&}*DkA1AKd;fr#juF- zn!A4w#kJvF8)TYu+)RN`Z*QQ}GR@`#mX`S0ee})fKcW8lLx`L($lgZyxK58Cqi(1n zj6uV%wby>&85c_`fpaHBP|9Y$9!YdDoW0M+C~VspfwE`Uu+-WJV-&Z#nPqwft-G0B zhQb)_8e6Xhk9-LNsiN{oj=TTjFo@e7*r1Y;Ns5YL(F^fS7%|FQ!X*&7=X#Er!YGTT zN5B5u$aAzQjpOI-<2Xwsr;K+jw@iV6=BRms0>)y_}%cS`7nDBNS%w#Ad-!dMbN&wq%%h)PXvhi7tR=3zFcw@0*6n%#n z(bF3^<9w$(q#2WtexkJ9d_ZloV|JS!3}RCJ$-(Asr(@DO=sGj2qy@3jdG>8EV{_yW zi=5Y*(x%{HFQx-?d8F-FAk{h@z{_ZK)o{^-#0WJU^!ZHooCF%w0aN(n75-{NMN_G8 z1(bc1b+sVEy=L{|)cuhiW`E+&jVOR$FMG~tkfeNv-2%OCZXj(X0auu2+YIx@)N2cm zRHg@1He0`$O&4AX?4aMp{C^o zjf`nK_w-MG4OMYGJ&7XCZ*>aux$wYqe<;jEZMBbmpoE!y8^?HK#U z4d@F|7-~D-ZMmF-c{%9pvIr)3@h@gkRz%<_ZU)lS3r<60tH4$LD^OVh$9m@G~@Q>$f4REN$4)*y3Be%%~2|L!Efq*!7pcedJag^aUAhz{qM64*G#@q zR=}(c7@j3{_PnGcyKH#(Y`rJ`h?UP16R(k!q%8SfWMI_$byteeFEHME1`&FhWA!pnAqy=vWq)^U@=TLavysctL}x zhuY6%FCQV;3m6L%(EcOv)!e#e1CbKPJKlF${Yo29X@Y6wHDJeDP3P z>jCD9NZZS!uidlc(<=b{yjzRP>{>_4dM@ACn_a}Y7JY{cCUL=$toV5%KKdKx3?rYLU}gTK=ni`t(yx?@dPzJgxNA_F(}O$^Fw*4WrlqP z%9rD9^y2I?1#gaP6%RA-KHXP;4wB(|qXRFLBpsHtcxN-~4cxW;TT`CtvPc&dSPwb_ zB7uvJXg|v&K&UP%>lGMch+QWpZCJXc>#s(F31|A5taTAEEn_It5-_K<^{7%B7>QU( zs4y3e5Rs+97pb0~@_IIP@>yMtF_>_M)jiH}pC=_pi&0V0>uJbY>8t^p_Td z;;u$6a)wIiRIh{IN-SY?MDfvqDKlzH%In$!FSkirZnlqj6q&`oID1b=>kj{zA4WTF zprpv1JU<}3l))f}?--+LYuVE6|Gz%`EAHf9lb13=pO?zwYu{>{LH9s^V1YWjUg2VV zdL$HCY!fhV-bqGc7A1*F_OL8uBtB)j8}J7p5kn3F)lkZ*=GhDs^%GVWDw?Jk++zC9 zi~V{FRvrDQQrDz}bBd%uJI6p75E*wVcf;viy&p<>={>p9C!1+@hntU|KGG_^#CB>5 z8@jW&Io}70%+O^ZE%1CDmz|IVA?KgK;lETP<4n!BG3%$H!k=qvyNDbPd-2;w{yw7I zm4MX!lN>7V?rC&n1ya_&2{tXcs!bAn=2`qS}K+qrT6eONfU&T2TtEVZ8}y z^T%Lv`cOL4O!i~U?VpE6nL?m{6t|)N8%ESuRA?K`Lq`qlTwTalCp+?QnsQwFV_*>G zNcyUax#sr{Gzl&9%6FC)w#)acm05(+3rp7;z16Y!Ok2b!lc!O#&l_le;vib3a)L^| zXCb{kke;U_V~4xqDM7XOQgwgHTOahdDYgsu(b3Xpbr* zp{9ggw|>$l!?;*Uq2_6UrNa;1@_}Ms7Z$ls{HRHnoEGWPp39tR;Kqb&Gek-N4yuz& z`>Z|;==*py!Zv)I@Bz^Wki#bDr;E4bV+_mGkj%BH3vKQeAB3Ojp7>U$B%l5E1Y7}v za;S4)f=@2?|1tI@@KERf|06}ah4$Nq$kC=%5ensqp|Y|SU9OxVBuB)!XGkZaMz>>Z zmvT);j4+0ZNy;QSCTAu&W?V7j7&G&K4XOS9cJ}xC?`I!dkH@CZ@qWKv@7L@3dcK}7 zdSc0}m2K#zr7K(}Z#X=MBM4vCkvW%N-%Aed3OwLAOsI>Ov@4dIO=g7DtTw|@pSWbj z%41Wtp?x~Fd1YvawZBskMSCb;3%E3B_?w8?EhJ7V4dI4v? zEH1TxU-3zdcoLJEzcSsVIT2w}eA)Q|IdH@`(?2(^YXA`z)yWx=LPqXyA8{^B02Qf4 z2s~}Q@$h)d1*^QleTbf%NvJM2a}zp^p%E(NC;Rr5mK#c)FC{ya>Y%A;kUTYgY$N)| zz|7rtcK)uqJe*D5>x?Gcfrib|ozL$4bw=jx#kRr_z%K$v{mZO%%T2JK!|oU(1^lZY zm$0`<+>5AGLjg$cn=6mzK0=9y7sht9k}FP?hD2c05bxeV6w$65abR#r{5;Y@yE%6B ztyFPz=&|x>s!<>bP4^awfq5g@Ox;Jws~w7xCIBZDz*dU|oWEWhu*u ztEy_nz`0{KXUa;~#X19amNQJiJ1gQw}7OieXHbQVXC-H5|ZpS#2l+ zqVmQf#NqRVHnmO+?RemHfRVKEGs0mcacb5oKas)brC`Qr7v3sJK?k20zt&QYgM%=c z`wDo5teO-xck%?o{Q9ySBmQ*L-4<>RPLgXrGfR5eUNVj= z{I}Z$lU;(z6}>}K^n~-RZv2SqRqhJq@|umN#O(7w6Ids6&80OpB9NCxP7*t^BRDB4 z_E0PNdym}wWB>?kzIQ_|LO9Hd7OeDxwco~01@FtD`)WO9R`wNAp#X=aH# zD!P$@i^g=2oXr1t4qfOB;$$a{WtqGkHZ8k|r%V~#nDx@x8$jleU4WvwOCYY5wLi|f z(I$oAe)?%u7lBex1#~DzWA-g4d`X75!VwL`s1lJ95xUFg?(0}lI9hFmb?fs6uhN><$@GxGh#MT*yKwJ+N?TR2Yd z0%EnUu`%n)uIDZtpA9ABM>Ln^mUAn^_@?5Qc_qvsD&OFCV00%2ctFw`%%-7LUFN9B z4wQoRq#P^fdPif?1UVfRb?5# zb8SlAKAu6$i@zt%lHBp6eWw4hb%w1n)K2ElfcgIl^5O5~{<&9=2?TPkLBm;rVBn#~ zkqlYLCT(vhEWb>JsHZ?FLz|L$u+TTeZQ~LIdQ4B*2}kLh9#7~Q2W=5rW;p%~qStwK z$!VJ*P9pBbt35E|2L?q=(Z?-=rQzxEA!0OrcO(>1hK5F5^ojlBBLfCmOtl6Ii(6*3 zstoOdDPgL0hPFX3t`7$)27QygW$_(W=;GgpZ3AdTpJT8_Wq;Se{O_(lco)G%hgML| zGhjNZ6vn2sYV!L!+~pJBIzM|4IapbqSo$m)iY8E#i{`z>RIE$7crvirevF49=Vixz z4cT7iL`MP9hY6?6i!#amR<1I0UeQ3FlYU*TZb=|?c%SjKb;F65Ox2kA zc_Q%HO3OzxLmB5Kv%kzUE65kt92({oxW>|V338Yg?SIq>=gQvT3HN;4bumd|h%{F# z>_q%68hZR;>PLmAm#Lv0A)h7&{JT7FW%S?5u@jn$lcTc{IqvnLxM`oBHV&FcEk>*q$jMifB)NjnXDRI1r=yb~T z86$LrWX3ms=Vy-Z8~o43SIwzr0sM2zBw_>tT7Nh8zbVUrxz9t3vVG85Q?(xEfiyIz z=D$ssXT+;!cu!ux?@peXF*=%uX>}KPvs?ZXw{!u3{U=Z;XN|hDfIHBv6o}=y`*>yf9A#57%-~IM1q6p zEOmLGQ!;a=W~jjX;B0%6!6vRToh|54YCDXG$;}sgT04efTq@vCv+lhf&Y}ltdp?!> zOl7+ajMrDE8R+Ks`Vm)^8H0jF(|9*&n?m{HnHl|N%`BX=##!haasKHJoQ{pAq5tZb z7BV&yb5TS{xY;J~VqNQ!UO6{BVY=>f99C6xLn5O~R~}2vTiG}#$Qi~{dzWOK5mxnd zYD$Khh>5Nk3lT^(rJuHROa_tEI-{}OC8v&+cpsc1?bopX4;nMpKk213*>P@c8gOBM zoP0ncezHCem=&mKdXQ#XhGJJ1F-p?-p623Yg| zZMuO#YZ5hcuDYp0bL9IsR=$|I3Q<$56lS2lmFjQQ5aUu9vgi)Ngb!)ZcDoy$NrJ!9 zH-CVxQ0qTk7g@vm;*h+`sQywNm*dyFQ}j4D$Lg9P?+y}k#&1nA6SY~+t>lXw*%l6- zf5D>WA%=xAl(!nFk;e*jU+-LgC#^KAWP~X2++SRwj5(-!e_o^sRLJ0)tV-m*-I#UF zu-^XZ26RAZ7s-2RWV)l(zijJL*nocVx z?*$6j;{SFO!lD8?Z~&~{JZkwV8+aSfhqBH~8GQh@cHc>G6y{34A$OHik9C&bS@_1k zBD5~Gx@W`!T?;-~YJ{3M$t^D@LfChScNxQ0XgO64=sha|Hvf(Ml^JS_ZJaSsNJ-THt zi_pvh=w=w%@k{a~)Q#xIP;UJP6nKBGw-4-h0j3QW#N`(RaXHf9#3AN(LCtc73G*g7 z?83^c3&#}#=qcz56|Rvg?IeHraPK07nr#hl(3X8tSJ`@atfxDUK9g&AkQtE{>YP*c zH2c<27o!Mt0H1NHA7}l1QYh8uA0FCK6v1=-6RWc)ZAf$SV~(J5I!P{8o~xYR&zStJQa0G0TGe5rz{Izse_HGwg)!k%BHc*;kPnTLMPcQ%j7ckdEplsE!c(%Dh2L z-yS7##wXnt5Y2jXs(|wXm$ni)lBZfMmnPtRFMNsl`ucpbJkPybSP9^rc!!Xo=N!tN z-OI8lJl2=gwq+u@N|(6&F2`mc*IRE1{g<-mEmE1`J2Q2M=bVyz$JTjuWI>wQTdZ0{88Ma)tnJ}5|sU~NbH=Y45e)ITePe_&C*-YU@5p66inOL=0C-e~CBJTmW)2L60}G z@Y5%^szP8o^G;q+Fj)D@fSx!ti*#{dhB5l@RY$p#OFS%c@bWmmyUa^gr%&b}F~Fezh)jam zYBy5K^m$VGe}Hg*>0#XH|NTsXg3nYH2M@J8zq;*$k|N^@E^njZij|C*3rb1cF=Nh$ z@#{*o&FORcfyxM1o-^F~WMmY@0GL%fBDrUOh}h7rtSgcm;c>+u)tX~z8b zN(=m>ph{+2Q~82#0=IzeI6e4*Krt*p&Q=Z-AlrPD1284Mo7?VbIM@s`l+aUW@AwYP z{PodaVP6#Wsu@PHz<=h=?9{YX`e67H2$Fqu=O$|YPYmS0k2YE0CRFW!KYf`yje`M+ zSHD7jxWlDXn_Z}RyZ5D?|6x~!k+a+87yNxUvUV7ccf&t@dmjh_6Je@sF94+JRUaOk ziI@IS1`TpUMP_9GsLnVkf89qm*C~|XXj>_-Hyc8cuNH;jTN~7NrU>IC3UgF>XlFqo zvDK==^(eDt%0FMJsqi+*W}uA zBf7VJD(b}xGqSTIcp@7vYJZD3YiZBWlU$(D%+w%O+kfz!D#;7@?hOY#jT;Q z=$0>;^Nay1OfS*XanR>pHsry;+>kmbz_RC41KQ<~W*br3*xqNhF??Q6nBy(IEhB-y zIZY;Z5^U34kcXHIZj@hCMa%HfNkBlpu-Z1s>Wx+giNxUBS4v9CO$iuz^XKHZ)ADaw zW`Dk%&>sbBhDP~JONE!$J7SOQ@Is_%9WQ;0)hAa|hW`r~D2P+)e4@!H_=$*PJ zv$nMP8fmCYqOWx2#<+dU8EupF}Xw^$EE+_M%)f|Bk~)-`5PSZZ=->P~M-^6u1o= z(E^vKabw^!5NsdKHoN;<&3m0n*NqkgMW6^ECr5~@jD|092az2s7@)#%m#PFYG)Yxp zpg{buBZqwnlX86!cUaIRkS7XF(JSdQQD5WTkjY->=^Re~GciDD7w)|9t1t`I5J&7t zx~h`OsOx))=J%ZhU*?ux=xZO9;e^^^_tJ8?$M+OVMV~iZ7Qm#&D~VV4qUrtRRe8Zk zB~EPzDuFxLQ{B7s#PgtR*6>B)0nJCapT)hObtG^4xA2E>KvT@Y(ouw*pdY-a~n~gj_~#L zU6Pj=MIIIfIEut}J%3ose^&m$`sYr8@92aT4Drz~xTaF;Bgg68&eSbNRIapoi4I}= z9$SLixv)=zc09$c*N@;AQH_r$V*t4baPAzhOXVAAcC2ONx*~GhTOw!2TJhwFzPoYj z2gWPH8AKRk`c-WFeMnQ-YL~vj90%?iVA+sDPSHJ2K?dVHE=K)vTrySvhGhMHn?d$Y zGz1niYki?xN6=6av^2T#qpDXWNwxm8@Z)>p_$p<`n3KaKVt=3&(<`7tzd2MhgXV+q zn;1`rK?|G)>zvooB!0A(F?C{qE1_%_ycEegpYP$zrIMDIkzTZVSB<)f~m6; z0`Azdr&QUKWy42<-)(dduR)iFol<6(!3oMPdp z0?FLhiu{*oOka9}@HlUFr06`x;5uyzdJHpAlb11A-E*z-%j9uwjDkZfLJeoR)6B1 zrNkF3*}G%sH;eKJRX12+iVcSd&dB_RA#b`0ThcBf?!jpcCf_l}-_FMY7FN@zrl{N+ zb!7A0+q4()F=xdwf^oVW#1^Lr#`f+hf!YLD`S62zKYIo9w z5d8+rx!6Nsy7mP}~=QOS4|* z+6y)!ZZe5F`TE(|*xnnzl1Q+9A`(p0|L55*%-O|@AqE8R1@c;kwzU%0(fiwLbF{q z8MjiE4g0RxwqBy{JoAQTGNXW=G{6E*pM|tS*biml(NH*X;=Fkckes)fIk2ZLg z8-IUHt$xiPG5Ggd5X9goAO`220}Ml!k!qIkQ9=C@mznyd8dS4I;&!i*O30{O0In*5 zBY&R^K>2DY+tcf~lQ-pa`Kfho{2jm;WZ9Qie1r~Z&J?I>(Yx`A{~2*1c;v2)Y2by0 zmjs`PN^i7GpwR3Kd$_RpZEcpr`{56l3VzQI-c?TWu`cThje>g9JFY-WA0{e%6^s3` zB?T_#Z*gYa`tNrA03;{!VIcF{G3;KqCWEa4L6MWo2&TUfRVgom(^EswEI0=QgsOyc zC9)R#E~9zXGDKqHOWw4CcnFNQHGUSIWWypV{8v*X`{I^m+Zx4pe10oCc~pu-l?$fn9+zSbQKj)0o4}O$0Uw(3}~*@qZ#4i%up; zKBu5(ZlW|JX0H=nG{EYST_79VE2G|Ty&}^Y?H9X39d_?SYSuz9{_j}srq%G%R6*U= zXmT7#nHDwZsRxFMewl7f*_IMatix7?r^8K`{O5h9Am-w2E%rK}peSCAo_W8Q9(dCG zQNP;gLqa_Cz>~j^Q7{pzs(xSq zimOO(=tf!N_2weCpKu&L4K#l^^0=z<%5IZlPmkilz8h2o5D&WcV%NA7@;gHh?U+eS z{8e6^x)Y&^J1kHjlc|x0vedw{w?&GbKpLP>mB|0l|c0BW5svMFFeBHp{2{gL1d@2{l-fDynKK^t#CtJ6l z&nz6{3dB@EagNe<`U@0}!*NXdN6sv<%Q^U664XgxBGTFb%mUQ#zdvS#VZ?gqF*_ao zR>NKXkzKJm8xM7msz2D@lMc46Y>Y}71LTMGCQ>Qa6daSeU-yQ}o@~u-ggQG(D?*`g zynd|HXz~rPXGx*69GJk>hICTMSE}_5twd^9;K?O=`TWx^$O`;TszrSAXNh{ z4W``YKrHErgX-Y?e!fE2zJlGp#}wPaI$r2LQW_D`K+goa1M2|`i0JqWJ>&Z`)&z_^ z*){c5|Mplz^?pqyAb2|Yl5Vq(%&`0Wsz7O^230;YwoCyDxvXzz*U2A#a*Y&};Q!HT zyBGn6GJ3%Yz*hwlFPsxQBzfdz=>UknqQh$vgEMcev1$w@Gm*`IuK&%}wxJML;nPu&wZ6-y{l%qN$e8w3(W*-6N2OY3f=aocQ zk|ACiROkPVdL)7nZTjxO^T2@*cL_3w0;RNVo7wk>?cl?e<#VUT6OKw~qK(-Rx z3;sQswbHcKGL_WR%bg@{KQP8D+)^3T9+>A`bt$*eb)F%gL(TmP9$8GA+aB%BpU_g?7$)&h2{p*>n1Bf@8);4SvE}*MVP+o`fJ# zL2C2SUvGAyg0d7f1;JxSr=W;ZNUxhR<_(-@gF4;?B@H-MHK5UP{{7}rN5M^t8r4j% zrf(Os>@2rh?h_SoFfwixD71(fc9vptOg)2k>=VCNBe!V2q6M|xJ=+>unE&Cl1Q;J> zhV>7G6p)Qa$}NGUF{Z8X4u29zxfi6Jx{{rd(VuEiaiAmw@~$P9gn#5dJC}yr9yz9c z@@EdLZwO0RtDFCZmO!!G`DB6!};6Lsfv26A3Y+~SYK%?S#I7;R;MSRPxH z1_Oao>xRso^|$-?nJaCMOp{~eL1NtIUY|C>UR#?zFoKw0SlAx(AHbs7QuPd$?zQ}n zsHt4p)-cZ!lC4eD?3k>)*>#{s=*!)WwQdr&ww8<6Q`-D~uXcU8OX|8p?yE#o ztf*xFME5d%={iZpZ;nTW2D;|OINmI)_l!483uV;)_1DT7Os*EQxpKL_YwhU4lA&=FUz%^nnTw|dKT zElWbbYc+QLadEY+^sm}pD4%yXnP+L4DGMJ{-HjQ*=N8|km=<98eW`9v`lr8y353yk zzR?W~=zgAVWCeMl6_H1qhXZ}4o(~8hy1cuoWYKxsoTnKGR@2_Fa3#eeiM&PcE2IVR za#e}i)aAr<=Jj^FC55pn^YK_v)V>kEihU@3%x|*8ooul6&_vh`f3az=jt4|R$y$v`Y@FZ^-#8+t}%7B*GpEKj>U${9!)~Mgveq-TbxF~9htcQ zARP{)p8RI%h-TAd-`(1JP4WYlq$58&uVf`K9KywdF5dfeSk=(Z)r>k?VcDuhub2YR zJF+}+=&|*XVph#0|L$sVvpEliy)NmDE-lA)p9|m~uGRgv6|+Szmj59TEtzXi2dW{> z;7Tz?@p$qDH&Vf5CtU&YN;`nm0?|Zi#b8pK#CaGC(iu27I{JCPgPf&ut+UV_6KCx~ z?C?>JnuL*Q2)9aBgL#=z|4!*G@`(AM6Vy3VJbrQKbAdgmC{@jyVMtL7#;diR2Iwb>KpmUf{`A}NmnCYU~%KQPSty|!7X531Zm%MlrXjNO%@{o=T| zdQVV}Eu}B=Q!r7DvEpyeC+KtyZ~AiNO(Tu?5Q<{tk>ee010ZOZW^AOcl$}t=^)N$4 zUh%LNzE)}kTYsZ1V!Mq|rjht3FmqN+oyRTqb-kX89Z;U^u9>e)$Ef>&&;yn`^zHzY z0%LEU#f}FUHMhl1_u(}`-0cXxPbr~VQrD61b zLW|HnaVgVdgsq2(QIGqHB()N*X-sIN&tpGWijIm02Y0%cYeEuA}WOwEZKw>LSeDYm2F7 zwS@YtxU~j^)-TUPuB}HBjL}y;3U>^bwDP5m6psS4qz}~LSu0G~(Kee~bt6c#r5!yp z=zxPXdSgj@N2rv4dxqig`dWWs7FHjendE_wrkM7MIli|ocP!Nr+twNWBzA4{xA8FB ztnpX&VN*|kdDF`8j5_^{e%B!&Z)WmlJ|o*xIyZsAf$>G5QKg>y9eJWzwnnc^2pE>I z5GHmJ!Jx)upg4uTxYsH=n;B!~8C8+&bfx01)&k$WRj05kwVa}h{d|6C7l@tHK`%G1 z4{VP<2>sVAdS!MO%%NArM3qsp#=?QfS6Z)H>o4>;ja%$t%_SXnbM5gu`EeNn8XUH` zj$!RBr#uzJkIl!v8xXEWyRlS#J=x@B=usJ7)sNIhD!Qod&qgiHALKl~txcan_hzt@ zte}bT^X0Z>S#A83???8Jm}PU~$|n{!wL@atXNgTF%m0jmP{ZZK7BLGb0fEFOJG?gH zR{A5H#Pj)m|HMTc#tBQsRj52$Pc_7QZ`iD8TPQNIODfL?!WEoNQwdkIEVqN+I2AtI zAl{K|fpQSG^F8CtRdU>=7hN<>Sf-h1dWi+1?CNfrqcG!}YS^K+na~_pK;taDsR{P& zw&DOIn~4%QZEDrr_(sP!INdx_9h`2jOP}EmUn(Ha3=9$|S%K3?@&?1skXb8&gHSs_ zNZUKPYxPuXyLb1bCKq%5ObDC~A78$_px!fX=X`|31eJ%GsdtY-5|J4I%G_Ze96=3R zjp`Nqlr)(SZ`r2lyS?NSc~Br0*}Rw7`LQ!_;I7#iw*sAP!wA7LuL(1aed2?AY^Zw2 zrjrZ_Ro4k|(y*Wf%bpL3ps?#gaQD2-WK4*{EOppiFa}t@uDEm*Xy*o> z;?>-Yw2nW@W^`uDw~^a-6q|GeD0yk!{_anH1io(?z}%f6dXnAYM7R%IRa)|*>5CSo z8zLn{CjhZSVRZf=b?pF=6Yim@iz;nnAh_Vn?K_#EC{s-zt~azbMA&wi*fOaQxwdC? zxj3??bSkJ;QEp{b68!yXw}xaag35)R3|?7cViu@6bHx*r*QMz%`$82A!s*+NEdp3w zj6J`ecElAX%faoo6?p^eq*)Ym+MY=z%I6+MWDasJz@97ipZV%^JQ<{BkS_A|sWwNCJM zyeRIT+-1)CL?4lu4>pXC&Z`*@9sEyhKOlqayRz$j$Zr;?qr!HqoUAg#Yk97^)5qaV zv*kV@-)t$dJcXpA@a-ti1i!wmVYRj!610!*Qp^f8re3OMDqEf1Bh_0 zxUlsA^zBVbZqC14M+)=oV6U^@(rn(PrhvFucbt-iPfN{vv4_wo%oMa0Uahm2anV^P zf6H5Q@#u$a2;6JcMQ=0vMA{}^LPCM8zb?2Yrb936PB=DqS62fF#|JU2o){%e|r#y_K z&)eO^>$fU2oTq6_s};XQP^FU;7OA1ak=hvnOH?IG-fmPO|@3G5ZFx52Gzk|py;-2niLIBJL$$wb4EH5?X2 zNfYI$vtte8Y=UO~AbOpX_yfkhP9T)FCo!6fBBSJx_)9C7@b?Jc8V^OoRT%EekCuD? zQ4W3Oun}{QuDXe29lY)_Ke%SWoZyh+^l%-HuY|o z^XjB;ZN)%<`2DO6ing9T(uFQ>4Qwb4DZufk&d~yGo1Tk>GhX}n(*Deu4LkvImgPIz zBkt0rvFY#sWyzQ_Fp}NUmj})jJk~ovZkE?5M*12&+RH8+=q_EzL%6FJU1U}D-n=Ql zn@_%w4I+E_R;7x0H#9R=!#N(gHU^gq#pCY|>N_;xLEkU_WluBpQfjeY!SpV#q@h(Z zcyfhLoQB8tdFpR>*hahESke~73qYA-_FI8n`ipqBf()wp%jO4acW1TArvG({il;2Y&=SDVw4}R1Xb=(u{TM8QT%oa@X z!}hWFc!h0$xjB?7=Gg23Y=P3&`y%*L9?|j%0I*y9g&A~k50XZ%$*ewp^SCJYxVT2o zxFaTd`GjTq;Hq7D8o2;c2WxaqguO9rVrzNF!uwro|b^X8(N?` zk4j>-0Q;Xh5Uu*G3#*B?Tyqq^M^L zyHn2B_){unz0hSQnmaEb_aXb#M;*M1`Il759Rff|;Pmaq1(N>s`!I~Rg#R$y+9BCy zC`_mM5{!!ixJ&VbCgRi!iLr2JofoBX9tVZ`U&+r`nHcw&5Y`~dC47sRUT1l7<|6xc z-zWP7wFL0gwVOC!^$W=S!RX$dCz6eRKU;L%TxpK(N4XamNglb+9Df#VQ7qKyT8^rw z4g$en^jGTgn+hctS3VjcBgGWN#g<25r#)dty(nuwF1Euoc7sf9Mhy?$6ck4Q=O^6n&OV)RsQNjlEimK~m#?Zc9x&$72lK4W1E3)E!r zrLTYL^$2e?MGG8OGZNr4jDTL&Y}K}f@~e?$e8_WPl6QttOs#(s@nGEZMK+x@$Mc8F z3p=!&qAEg_oUgat_6QMX0DYe?%h&!cCz^n7E$E0%I8_~=y&QWbL`UI`fb8TNEsD79 zFN0-fQ6}vR-J-{UMK1BMD`+n}JVGHRXVApok=&(c&}<8OQIR|3h$9@UPXALcFi9g8 zUxX#7miV)l+n~QWIrav>ln9hX!Qq7oEU-nX8VY8sAs7OY)kK0RRPsp*ph?8xN~N#P zxp4KW4aK6s*^XquUJ1wACJM&7Be`aX)#`pc+1$P3#*zW(_pg+#-SN+*1ZoAgNL$Pe zpaMat)&2F|t}O_CEm!4h%(Q_@!J&=FQ3C9iee;*avTG7UYGg(>Y|rFL*?MsjKvR*x zI#eVUOpdZ`_h*>D2E&`2tRdy?-Sb6grV6fWYt&HwmR1k~1Plk~A91eEJ^8KJ+H`Nr zr07gNZTSy^&nk$H2{OQaQ*m82z1}Syv_L&p%Fl$snJoLr>S;cM$ZV~ zFmp$EUkFn?0{<*;k8zeTb2rr0+C$*gpe7pNJlN_!%C3k=` zoEwsGjG|wa-9U>B!0VVN;RX=pf)6RkqdT@Vizpdww^<3OB~x$U!d`d&*o;y3e-^!J zHfz#TRFGYYuQ2c@LW-MgPUn1#o@BDu*X|Q`Q-fHX$4vYU2<)ns3{`w}n`*g<@=?C+ zQ9n-c zI?b`5&z+`sus_*DI0%Z}S{r;tx6^p0U)Fmg%%QJ~reD=-h@cv!pRz3$4d zJ}IEpR;FqLV`1~?MSeYl`(|Efe>9ZjPJf)L=nV132iRhpgr48DOnHlkaZktCN;n14 z%?xwEP})%rX{WenPKcd*vRuMebt5Cfy%ns^pMEzmEq-`+L`BhL)jTDsyy&f%?4Pfi{ zZ7G)PXO(VovSKwuUup-a+|%gq zO4@RV{uak6rSvh1*ymU6p27*fkz} zKv2Vv$rCfOz|NY9i@Bu-j#c-HHMQg=(C=^DwaA7n`{bh!@Gs33Y0e1OFg>)QlChf8 z1*~s|&`9izeyy9REJXHkza~guSE!UVx>!)BktcT20@bB6J2#jK{Evsed-_;*x*JIg zY6N;4H89MAz}ccE6YC_=NK)sewsBC1LCsD-FkHgjBlN|TWom7b&<{oooZ0 zN{J#JeyUlbWq=!XR?f}uk|@Ed5I=veE$A$ncppUB%V;(W+q~=vt6m-I4;pI%%rPAR zcm{NZx`1a2FqT8!yh#n@tE37IRLY`%+g>{ZRnQSKX8EDqqfMQN8jyqNiyYfWRI_Jw z0ZiKNB|6t5CC0bFwwD)lwuZDYr?OfD-$M^WFNXgiJ6BZDAQ15UEPxo3Z!6Hu3sQ!F zg;DL4oYBv0cd81%GwJ=7T0+fFAL?$v=X{kYk`$`olX)#SndXWyu)|5Vf{HqB)zY;V z(n^_1;I6B?9Bqcf2F&Y@=IyGf(;2;%Uly_Iw~MTf0*bW6CST*lqqLKMC{gFd_XXJ_ zXYZWChX8eE--fao4Fn~A60 zW0-v>w8V$JEDeE^2YTX5KPOZ3U(e(pCDN%aH;g1N*Et26MP*!C*`ZncrC(Sw;a+39!%_bYd2)wIqdofTC*KvAsf1Oc;8T!T=>VGadr0TD$I1oBX>%FVw3H@3ZU z2FmLRd-d z3b(S~YU`JO1>h1TuGMpv8DLaA^ckYWbf4~P6Mr&p({31bLI#)WiS!c9Q2`Yi#w8Gm z4lNI^+gwn8TffjYjz18QYg>bkfX)h(Jz$MvUbAbAwSiu;TKj8riVDYE*m4<&;5@wA zk6n%S%q3VBPlreL`3?h3t69(uw0=LgM&oLRgZ)2hTSm)QQ3Pg zm&TAI8GozMK%*tFiz`lSP>!7a1<@U5H^DQ(dT`K!fr)$hfsxEC&$q9ebvueT#io@g z;wm=D_iIMZt|rofDNDhHGpw+zmVbd!JhBo+;sF9QP1Njc=v3Rn^DtX}V|Mrw32n9) z+oY{vQYY3=AQr}I%^_|oj88B$BKxzd+G|n}m&Y-b>=^B0(gMqNjO~sTDFxw!w((Vl zM*~v0LLHfEK>MB`rYF8#LG;(GbQ=`H{b`G1Bg6KZihZ=hxkc}*0Naz^Ql_+e-+Bua z)hr=iQL`F7*zDj=W<4Ju$yMTCM`-zzIU@mJby{&bK7{p$#p=Q}njjLkP;W*oH9me0CyT^|gYgQ>YV@T%2KdonF-m>FZL2x{EWr zMB9H7rrEZQA1_=|_=?vkZ1HGn9oWxPQx23G<(l|aLlSOLn83vdRNMZgF&;!;*3V=9 zs&Lw=P*fL>Hgnq|mvEd=CyLOk19Adqr$=85iS_sNX}JS;L!Ota73;wl>Q`jntgju@ zE^hNb8MY}fbEVsrUf5NVZZA#h(nD)5wP~gfu|evf z(Pz01oD&`Di&w<;Ur>a3avP1Qdp%j3pd0&R&6oqe{nWBznT)zbE*}*KTS54HR9%+0 zNW#rc2axcH@~dhU+sbZTw{y|T-+?wMQCRiHnM?qMRkDJ@;;;cpQF$UB>B!VO!QHdG z)H%`*zetQWDIhI`wKxqa1n`1G)=>Pn_lIRLmHwIH)P5Y;9f|GODt3t1(`y8dNm(?t3mOB6G330{HET}OY}B;yo0<2!?Wdz*=AUUNKI>)$3>Vj~!ZG2`Beb#J-I7A%ux% zz+_{}HU(8@bU2OvcB#0!iz1P)80mo&$FhX7XGqaz+pupzO@+B?6G#EC%cyKcYTbl_BK(7ofi9()6~J3s~w~-74uXSCV#aupp!g-iYm%2_5|MJPu=Tg5vh$ z6o)Oh$S)*2B)@pHlo2WEWdT2{&W6D&)h|Wtm~xfg_C)eGhES(hXzRJI)?YsESNzAv zko11}+Pme}mSfPw+My+{o@gr#BzD6;R=DD#-7rT`nOtf;?j3Y{yFj&}ff7p(V6)s1 zQ;FJwQmcnq`>?q}FM3b2t+362;;ic46ZBLwO%d-gO){IO@x-kML@U6>9(#G6@4|T^|5*`9el7M#GNSQ@pjpcfhGoK*v-9N(T7liVU1zqpuPN~*; z7T#80dsfyxQTEWwi+eU!Uxa^t-S}YRgJ0L(eV}vb{vf-Ad&v04q1}HT-W`u# zarMysi+g^#>b4vHN&ID3ypCJqmh-YVj@#ehqC*2R)P^gu`d(i3%s1s3)AW!fLG^DG zOY$Q}PJcloDKbW3sf$G3t7}N8XNuKK78Zm zc{JWexvs1IV|CnWe40|+s&G++VwY@RBxS8w+#amirWLU&w55%%5yce)ossmCmSLM< z(ENx=ZPuRMbp7?Z9Nxpp1oYVFlyO$7sAymZ^mZi;dW;X~f8$mx`A$AewTyF6Q9XaS z)IGE3+F^pEhYEd4vnx$(?_%{UDhX0gw_N!XtNtEDlhFM#48o8%IV`Zibjjsq?<_`S zaCE#?QY??j^<2Zp*KJ}L*IvT+A?6D*zka6~`Wg%^HVe8d8z&pkY8d6I++|Y3&&_ym zG&_@*es~2u5KCvUeq0=cU)Af&M(RIqH|se1B(q;RM#ls<=yed4oIB)I(>L97d3sUb zaG7TPv{1IM$TF4M-^7?LN39w}5VgOi9nKv=Zpm-?@^<>n%6cSnrrFP6U1k1}-}D1n zYrehGB0-D8935tVR_tc%%C`-M8$gA+GkvvtCS5d3ZYhk7+*wCZuiJzsxly7-hs4*c z5S>mjhzGS!k(te0mxDLVZ3efK!`v$vtf`tQ{mv($_s*=`VA>cgsAI#=el zN1o?|QJZD5NGl^hr#K*To7}%~Y33Hu=i^_hsr*)Vd(Im@-VFx>^X50Vk3HTU z)YC8YMG{qMjuk=Z#Ui;*sUceHlG@7kQQlF#vo*t70L{oW#{6YqiB&g7WFCoEembe3 z6y4D68WP?3u_$o%`8hLjgwCc@8qHRUwJl!1yA<5(HV*0$=5^{P&Yi;gO1oeA+BWH- z@Mceq$rq(H(*BJnOu#5TR+z}0g1xrXy%OCvaPY!#sajh-n~(Mzd=dZiqKlPhHis12 z@q6F<#Qn#4DuM(OnTO2Xjghr7?@vRlDfk{g3n00<-)&2;SYbubH=62}eJU&aN(S++ zOUY$1?)}iRF)&hViUqb>9C7W>^mU9~S(Kz!s-z9EkSk^Tat#0R0r;S)ax-!Ea`O1- zAfrwO@x;eE&8ux-(Un)1g!+WWdLQUht}%ICa~bvkHZUVj^3S;Su(yt7yNex$#g`ME zZKEc}wq94u8A`p2-t1tbXg{!nbsCO>qTbWyUA7-GPsz1o+)h^*k3X)M2)D3YBkXKA zu_D3aw87(bVjK8h&z6fIwzQ5RbCztnq9XrS>=CTTy2SKB{wMb)_WmsfXN()sv`}OUKCm>(> z+nST$4^$GgW-_gur9}x2BRDq`p1B&mB%1wGWB6cz+&j%L+%Io_%8}Y5J9I}^3=aVR z{ND{o>o@o5;m;ts%Ud+J$!4Z)4~R09>viE(eG(DlqB5s4tD~S90IbZfe$>{Sa zQ8`i3vFcGw*>joCu=qYu$)<%NBdv=OMJ&d>B$8)KbADslh$1q8o%u|UCoc7~@o(}% zJhR{|mG}v<;rj2P66DSZ69D&gUVZK0xUD$Nxh>dNf@5On6I=V9W<)8nErx?#f6UA4 zAZzPP#Y~$n!IPRa$sP2YUWBm8PeemsJZr>*E^NKM4!WfMUh5{N<7}WRrc;56gd6?! zmmY6+ywPNzoX%P>soLhJh1#>Tx-_wN+_02ay>C-@T38p-__u&}j%zS)b$Q5j@>#-; z%b{R%g7rRA#MqLNP$lgOk<0i_X~XL4b&I4Sobfr3phD9l;%=X5$R5JoRf=qBXba|j z$wA`^A7#ciD2BOCFCZ)6ao z?{)=NM6-YCHkTH%AifpyWQhJYlX%n%g_7PX?v%q0_MSYUfG%NdQkpHyz#yE5DNOHD1P8#R~RKy0r4Yog=vpC_X z;U?xCwcZq*-YxJxI+x5Vt1KQn6_a<(*DftMvRRo@VP-4h7cl$6^Ab|E?L6tFk94No zNRETgdr&0~LMeC+#`v=kRJ!Lz@`P(PMWq4uGyC#?d4^%d?i$hj8lW(l#q<2djf>96 zYCWH09COrf$_r?Iu3*VNedlC+1_OD4P@DP#8xMr2-fvv~785wX**B%%ccE)K> zPF3=GsN4_u@?`g^YL2TNiw8Uc4{#3=Y-5?>pq{cbXw^m4F2)sHlJsKe?=4<>xG8g%qaC|$o5UON=?~UGbTC~XE2P6{QnNd}xa;I#B;3yvpU+gddW@pG?i)LLHWApIk ztfj+2mgcC7Rm`R>hsAMYMymGH5W75a1kKY!n=J4=14;5dyNd1n5>c8lUZ-|#=a&P{ zVbS=Jf`OQm{6hf#DPpoX&&6Zpo>TqF%yKW4$DC6B@SoTHaV=Sm(Y(+SPF()V4#167 z5R{_!aq!Xfc3yeWI|N8!66dXC<@oe_4ftf3#Zw~ACntAbQ#6cG2s7e;fPkX*`Psd6 zGnm(N;k2t4u@`Q81~^$o&CCdEtPHR$m`%dsut(yRwg)x6x_sqO;{{$$NvkWcw>WEA zKqA4pH%hLpc=?WIyRkpGG^3O@Wa2vdtjh(i23Ec%|B1?Eq@HJ*erX}&!E6t(_xd&$LEyJzn*tH*D?H~_4C@F}TEVnZ# zSK`K+5}sd>Bz&UCYC7z)RZF7o!_q}QTQeUxl=!zvfVV(QEx&6#~N_THO^7U3eZw!-_Ws`UQ zr`Y_DGZjS|p>G4kuVB5COs*VzRH=({TeFWVgKgY;*FJ_*mR!;0x9jdAbty-+%7j^eLKEW2~(ZcgT{GMXF& zpXF1Cm^A;DGkc?Y`H5b=mc;rPaJZhe! zZcu*LWpcgeFnq<5`W;Yu9OU^SPom9Z72eD@oCuYc({u?yt14M;NWUHV#RNqz?0xLP0|R2afHF><}a zp1Hc0*(irGZ}*b7wD`WT-3{G&%YDM~f`4GVR#&{QYcg|@FYTg%;{(_yEcy)2#^ zwcbNTq9jb^9!AFQ{>xeBPFOWmzBeTGmX@1DKm}kxo8w0o;0}hWeEx1Ro^V-bivj5s zyaa4K=ZknBzaW5Gq}Tc`^&P_T_0xZY8oGT~jDqy%zr*w}C6|wSh0=~5H6?4WefHZZ z*o79BAE16Xx**t8OJDhD#K!DgnB-9hwzz17VHFw+WvV>pWqn3v`|d2Pt-3jiD~LV? zv$|EdSp^EG3sA}yl#j+Zhtie@q*-kbX8Z(DseuI~)+lXiduRhD@DF&MexLd?k1s6w zi$1aX{;PF+_WX2Dp?F2Y&{li|{9Ww&TT}y-Uqf|<)Rmpu2B#5>(~$^O#lsV=LQpnK zUd2|Fme(u?2TQhN*emAs*JNS)anDEU$zXvJ_Y0KSy&a!@tT)!SI3>sX zxpfkE4PrW^CjWkiR{h;})|QC-7<9Kr9;p}du1npC3hqi&|@*Fd?eN`N19)Th6mB%-S-wksy5am z`4z(f%1>PMVSjIQy5A8${VT8;%1LS{3d5Oxl!_+Bsy@2}U%RtXV5Ene-I(cPVxd+A4~ zwy+&MRf`)~Z}hq8tEHj$Jv<(ho8g!ioOyUQlN75EzC50iqOH|!X(b2jliJKiiHsV? z1)-|6a>-!+64eQskg*XzYn9PJ#wZJ{woiJ*bg0*J7Cm zP6hF*Hq_tcz(x#6IuP3nZH|?&%-Zu{UIrD^Xa%G5$92_9#D?!K7*F2CVDUJ3EduB) zgj0K+3d~`cGw=IHIcwlHJy58(b#M?lbqPmbS%)IsOwmP3YGA_d--q;cbH1^gk%?H} zpg(QCVb8;z;>q6W$srenPztuVrR++aT>>@H@boFZ#zG!(+bE+(F(&sf^nS^~p*l)e zT~K4hcEKP>sizP_kJiI3!tpPey7dhvZr4S%`F*So%*%6?^My;3JY4%8mqbO>d?{`r zP}Iu|b>!4bc>x6^A$7jCD1NQn{{YK~-XfnU?;QWt+Un6J$hStk#nJ4Gzf`vNI& zVr=0x&|K)rev>*zQyx@^NfY7n!N@lvdUL)!aOR&qdem(V zA`gzl5R{vGiCvSy`0sO)+g`71xeYhE_?6*4zsf6$9-2OE6eB|%i+(7m$QgPLegcP) z=##!sMuKB*FFySED)oGf-Q3K9y`oDFlPOAN3R6?L01+4gb7j|Db7}p=5_|;ZVIR(i z!?{oC`W{OiNpuV|f$nGmaNQ?JcHRN4Yv6EVHz2}|NZWoGWhwUj^Z-c>5zz|L)CV); z;l`ROmU10~a(qW(D^A}x%G;N&J>Y3JAYZlxHMA_r>pc*vW4Exig0MX4Du7I1A+^_( zOIt(tB_`5)9HCs7C>lV^#wwI~`3!0W6us=x-XplAOnTMHhkB@sqR*vy3{zJ+Zs)RW zWjGHlM?8#)mkNkPXFXowOufu${>nrx>kS8!%H({bf}A&63ID?dIjbN}9zOg0jg9!2LzKPj&>h`4 zHd|5+7UxfEIwC+Vwf`S33uG}7h>6g+e41%1KJUB=f(Dhk_DU);N-p%a9RiXhY{$KY zlQY>A>aKW0UeU5n;u+ZNk z7sKXRm|3B!hpZP(VgE#qe2HfgLlE^YNml#N{Q~^jm|y7Ne~7KpIHmRfFrB53y$}D^ zxD!|ZtIC~ua?};s(L2id05k-Rzfep<4>*d)B45I?BWvvQxvVYxtgcJ(c~OinRw<$D zuQ>!HU099;qeESU*HQEzSy`@B#c3BM@(N)NjCFq+6p^5_(6f7<#GDs(7ZI&ZZbXY2 zP(5%4F_F(Zk# zi*#adUKW`$+25rxo~P}#{GNI2gYFVZrE-K2V_z~i|2ex(21E**yuEKrU=z6cg@7gX4Z*%Gg+}i`1^e(z=Syo= z7FsrBm=v57*MS;_-MgH^P-+>egGvucO|G> zffvGB{^M<^blpP;udT7j-drqJ7q&p{g4ITXw0hSBT2#~>3{{j+F?{deWmLlwkIME) zVhLmCK?8S9sAnrzhI2z@8YKf(`#LtQKeY!IVhXp(rw7TwGu~;)%i%dh<)7g1KSPWQ zal5wl#bz(>itVNjoRRWemQ6suT>c#j>@^M9^~spmITv@L6QUIswsQ+P)LY-c@^pW@ z?K%L=ow6~4r@%uF<&n=n&5M$fx;OHYXhGBo>Df+P4$T;wmNuKc`17{ox&n54d8OZ$ z3)BD7i^;7e5MXO@brV^sS@px5IaY>aB7tyQr6P9F-%O=T1t=J}PqsXc7G&m3XFR)Z z73iy0mU9+pZlU>}B-;I>!&D|c9Zp+@gQqA1pSYVI$@_uE(AR3bds(Xbj!sahnA9MF z0C%lY`_tRxfh|97X0;iy+ypDD&;A3JE^=G>=_bqdL2KTJJ`M%u<#rfte3@T$ z#EC44p(=OjC$d>bowlCTF}C~O2JG4#sV*@I=Z(Ma2s9$@z?zfC9tG&4SS%HB_azH1 zNID=WVkHD;)bG`msUPKBuTkQ)0oa9aqH!nqDk$)OyJJ11bKvVc1#ef6|QNgv1krqW(zbY%+8P zlh;1q1F{f-D{l2^iHgwg{&@Hlmlp^?=}hE&OkR8XX9wLhG*m?%zhsd`=(u8y5vYnJ zlhPO7!W;>_n;Yq|0(|D3wN3b>_i^tdDNGo(W!4HSth}brd5}B_s9mKz-!Qj>U<<{I z6u;~_Y@&}t{mL*CgZ+j7_g+te&kfjEctJ!P9N-pEb_IvU*Sd4Er&FHERWN5f*KT6; zrB+Nr8%ri6Y*{ys4Fsx$PzPQ`4ejLpporkpuxM-)UJyh|2ad}#&T3xF`<96_ zVWHAJFi-H@@tAjqW*>X&K$5#Dp-do6+ zT*Rqb8vN+TzZ~{1VlHWoNKc(FQXq+wq0)hv9-S^5E}9H%gri8ypqUqTEB_M5^YW** z&FMAF38NejJD05Rk~s-8P*|8|t9J zqBRsG*$zEItT=!qk>u2KOEp_#6c!$P?=cRIf`y4K81#_|=&pANpcDrEbn+%_T<}Rx z4lM}Q9>Wbh|8*U;yyDFk9sMI2-+R$%q}y@I)_OFtY38g{>zYvBAuvP+MFUrum;61lb=FXX{@wAI_tO=G zmWnsFA~&6T>>P9uR60FPl$FMPgg=>Xdi1Eu4bH@0BeH!atbQa9u0&S98bqsM@hj%o zfFv{HP2x3Yc_ujEqhsE?h-9CfIl=$OY6yzKw5=X7A$VFr%IWoeqR?0;g*yWXgJmwW z+}Qj~IbOT!Z1DP$Ro^cZIqa#vf+NCxwtIQ10??Jwc6-&z_6lkew2sh%^kq1qLZZUZ zZ@xTbesQu!KSrVWm65|rhQ7V@139UCj6Z#@=dE+A^H0hw=zV{O;>DZ>1aP(>iOb{I z9pahWR{jsJ{QfgRRarE7RC@NNjfaReX}bC_gk|X5Ku&P^33c2Mr)aRv)x<PcJ|z+ZbnuH18KTmX%R6@t4x;_r`Yx=IVA0_>Ul@Jc z{?|VWhsJG(L_ghEutbP#i6DQB@=2qd~PUUawk9_xhY*^3$6pY+7Ls6 z`GDBxUy0SILst_|)~Hz+>8|Vb6eABT3{c?}7|`=tH_mDV^H9uLtCF7Cu+0;ZQLLwC5X`47aCbcjAfpncFhE7%8;#yj#snTABtK}$J$b`S{(OdRQT6Y{YIm6ahGMF72D=_8=H2TQPyymr&Wq>iMDe>`wfju72DL;fpi2q zYl7NeC@*8>!A5>w`PJaaKy7#mXxR%OrM*&N6vi4i^-yY=&MF;mwg}(vK)ejUI%dIq zJ+6o^`ITVO^?8*Tn{fOGj`q`3#CDbEZnP>3A*~pd8}rPtbiQBEaAlG7-+Wx9ibi|) z_Rw0G+{h!Ae|b7yuYrDZdUsBVYy|sL{ru8jt=J^LYd>#kkUp-n?QdRgwh;LFu|oGd z=oN%Yn=DhM7lG8CJH|-b0m-vb?^|kfgPlT)=UA50IUfhZYnUlfEgH{>jIu@cNM1@S zW%`AD3+K(&)sWBHz833IC-+Mq&iJ=(q^R(}+2@*S;C>)ck6d!<9POV|Asr|8UKjis zsJjEA2lNg^A}pb8M9mtlkBfwtIpzB%&Y75G+gcdWFhHF=99&sLL|z!l`ZOZ-`J0c_ zCMoA1zEmr`)X$fE?L}^gh}g-l+zF1hZ?+LH&S~ais&u~N-)cI>=y+_>RG#+@Z32vK zRMISa`M%;SdhtBRreb zVQ>XgiU>3(rcdTfrwqReS0>2EyQ>TI*!?LuTQ8jncb^mSV@i~lCfFz$= zu>+N*-r&cZk`9YWO^ijOISaSJ?A+FlNq7-12#Oq!q5ml;x>rcqscILrk}NcrK8?pR z7^R*1$NEpO+Vd;Y%O7>k2}-_&MOg4!7`S<1!T;y~v=k#-|LaVLrnkV&VJ48g&s2=c zE=p=u7ulnL?Dl(lc5H||2}{ibZ~(=&WiCZ~JX4;WdM6EcM<*^onxD%c?!eTW;VhUn z!jF6Loc|P(cX`@eeZ?Dy7F(yLB5I;s2a#TbwY;FRa(P1w5vqA3{y4{36+v-#xk%771i&bxY&A*H%YZGFf6@ic@xJQ%t(-rZ=Q0ajx1gKJ@sqqV?Bi9@q*gEV>`m z4ULkRUpAnQhwjB#ZKi%5KaS9$oo%gX3D@m*3IBxo{#{Ot#qp@5nF6SbNO1AX4(NGi zhmUONv?x0W-;QWovo2Vim#a3W9|9$WLZgd@1BFl%6?SfH0}3Xe`Q8;%4n9UohLUbR zfDdz@S~tsq2 zf~wfYdNpn`18AJI(`U_4)#E`gbJJ^B%$a71^&fhri76L%xZdZp*zi42w_E66DM7j^ zDqX}K4}GZhl9FZ9rHAj>D4v4K^dwqJ8g%jV&h$w%GVa!ZHz+k9c|R52)$4d|aK^srk>l(VfKJ11>3JNo?1l;&|b zloTO&t$m%6skEsG(!@u@V)~gV?Wd|u`x%9&cMqsmY#J|Z3#kmg@p(jgfrPOzXpwbWSOyY#QCM(zSyjUAeJs7|3(OJ08_9ocXZdt z=cUqX*7D*7iS^56UkB6BDU?eOAt_AeSJDfd>>i!~O4hG!$Ww+> zhnp98Eh_Ssy3#&o!7tLlQ*+X?c+5IR0o$-;y*M_3Jl_-$D%aR%vQg3N0i4~woa(Lo z4?@I`$84^F3%|-2r>wpBP$tgC^<$#d+ll0ga{+`(+|a$PS>y=$^+o4-eYvmU$#4Zu zL~tbXS)wAPi^T%py2T&)3vM0}gyyL8EiThjT!EfwmEbZJx@%4ak!)g3t%`klrb)=w91`av4qCWbnW)){a&BqhqVp&ASnYkgs0w0PHVh+Q9v zhw#N}-5j5@0X0sGVoxn^G{Rlztl>zG;{%Dy!+fZ(nzV}tN!qg$IV>NCT|E5K$YDVC z4QL3bVt!MpZtabCo!uq+ywaT{tHV8(TgR+`hEu6y%-}kf%uMT*st${OIak5Y7}sU* zr(vg2UX?Vs434Pk+|VOb=cd|!7~t5RhvoX)EFyTB!C}oeqo@}5jw$`0)g`T4Zm%HM4Zf;F|2)vtR6W}hGDWf0r3 zmA@hMV&7vQl!BniqkRVae;~PZ%($UL>=f`4hAB$8q4x0t1|wTK6b)_ZjmagwfI4D{AM|3Q0zX3c~!*Pc;*C> z6^{JhH{>I@kb+^*)464Z;iFVtD#H8IuZW5rudkKo{1!Jl$?41s9}0dW7B0_+ZZ9VN z!1RuIFMP@6mroHoC#L-gwdWt2calR}1+HC1hkV6IM1w*k3QkPAEaE%xEhk16lDxcs z)|nk7{y=wjVV3~`n8XzumZ|=jEb6Xq4D`~xgigRF>?~x>$F9V_Ki8h3RT-%cLJ-rK zG&!-T@pCVC-jMfag_Ak+zFAStJ)BzRCGT#K%Q(5m4IVwuvwOgG(H_y0E%6d)UACWD zC*OUw>u+wWQD!PC@{yv!4}k}INL@Qx@M@=Tw4?V6JlIfdS5w;9M4VtukC+96ZC&*QP>O`S)1rBcRDm_b_#jaAVrGNNKG-S$xtg8@tHZC3YqhJm^OtXOTvf7wCQvspS|Gi$Khp_V#Dqx5i$ zfEcK{O#2UD>)}z|Az*Qp1NvV-KbxS@ro9U@>p^+D_N)?p8oY9YZE`d)Ba%*Y!_L9i zfEue|9}91Zm*%Ly8QO>| zxT2~-nR%yZc>s|(M{Xzu&6!GF5G&WB)qzE(*h%M-=jsk;VyBsD@qT77*)h?e z@MYZle0D|gBi`<4piObqQW2gn%UKW$c{|kPm~lod6;b45u}?w=;5gs`-~qh8zTKQ+ z;&&yvTn7|a;i#a$HWZ5)Q*+`J6SvSX2kw{9!YQjuq2>CWsf6d|JL`E4GuR?Rk)4`j z4@ zWJ0%}X6}4Gq!{&<^0GhTM-Td@rG9i~1vu{9P$bY0v^BhM=LS;0MFe;pY(V^&%<6VH zMm&7rRKGP#Yx%7&EXG;Fo$fcRx$c&f*WE9xUAYH4sCq!0m{NQQC+4pC{r7`G1LITh zN|Ai*jfp!#W#d&HWQFf8fOKU&>fPgLg!e%}A}B1})di>VFAiEJ_vp9mj>?@7$}~Hm zQ$kb@;TOYb0;rbZwEVWo^ZvSx4FNxXj8W+CDw#!oUZmjrfB!AH51Pw~6arudC`$E! zZ$(6?>r+|HX%I$R!}{Iy6CAp%a%7VULqWNGH$1+KPA~uNB|_dY_;?^rChGenQ1tbM zhZOQN)pjB=30~eJ-kKe8Uh)cpC$5+M*7EYrJ|qq7l&yMGnCJx&L1p4Yf_m#YP}Y`` zCO+93p2=6kcghD%JKP?uz<^52q${;rmDg88_%eel!t3tT5I|5qBLXViS^~nbb5-a@ z^mk$v@J>>pOB~;$rF=~0%%r5n28r8gA3IOhs6Gr9)D#5$n{ ziB4W>3Gb6|0pUlSnaik8(YYrfb zwyLiFM5opEySx;ZX&9i@xE{?+5lEv~@u zsi3UDE-2S%^JCrXP&2SmjD=4Hn}X(q<{z0rAs77N#LU@Ao2UHoqbp8h&!j z2^W=Dpjvg}XJyT#E$1oyK@H*`reO}~f@L;uo?r6+?4Z4?ucoO;ljq=UIPk?lcxD*yX zf&-m#7Y(|@h!Xt$IcIB`Bzw*xdo-Na#GG-cx9XMdvcs=1rH=J2#C3whl>nY|5LOL|{y}UD2M6gFoSIO#ixbVI zB8(_|FQTI8%;1fqU~uo_M^=uCsf_=JWOerWpEj)M;}`|SK$MQu7WIX9+zu?nma&I! zr0FZK5Utnw>6Qj?&Nt&Z14VcdJFHpI#WIz8VU-IheFVcVob>-+wc%?q~9yr3QvZ1bqN0QwtS(bQrC5Ep^}c$J<99X z?b^ypl&4@xNOXjJ&^hG@<@o|DG>I>|-$!)?*t1k*;Jsso{?HQPPi}C+Re>-xkhK+f zna0lR@sp&o*8UvX;MZ%rk)QVOfu=_9j{ha-Uchybhqm+YR2_IM$XF1)vsUk=a--;5 zuF^ZN{s;7W=J=dkwd5Ho`f_>sQ4^ElBVuUh6U(zX<~>hs1q33zYeLjGwo&%ew9`R4 zi{XbHCgOh>WVTt0ZpD+tU<~hvYyX@B3h`kUbJSi}3ZT|^I#P#Kz1Pv69c#ZOw-^DOu9vQ14IR^#+MtvRom)muoaI z{I*T$9r}-7fROdi^|wn~K!k!>>`#So8RAVCWaKJuhF`&aG?ap!t8Lca3HW`WYGq$q zA}OtP2=dSV*F*k?!fs0zH7KGBD*8O$iq=Nx9^GgX>C@c&RPjf7qy_zS;)09!soz0f zVb-jogR9%#y{^O0KZUsGVO>!{YOZ^Elg*`3aYdb8ocL0v_xw`>&s@7;9xjDO4~tpC3@vtXW0qc zs(^tNM!7$YK3G`AyDCmT9+P)<{ko|Gdj(Ix4EJF5@t(5zqZuYpsEELhj_^MP`Xq+{ z^R)opp69?QrRV_X>R4w;FI;O5g}zb+C>2_I;NnI0+|fjkg4y`<=qw=Bo%&@+5fbb{ zyv=~@E?fDra8*52^@HpD$ONMhr&tt#y@j0ZeRiJEEfe|~)tekU*Y@I>$!Vc6QSWd+zvlhx zWP8lM$6*NT-}n>!F@h&r)Exr&cb&Vmoqv5VHazj>xJP>I0#Vl}tm-1cN3ZklIT!-A5*%(4|3VpS7u>vY=p(EgilzdKOr!j@3EjRj4r2Mz+D zTkWq}zZX!w3VyfxroOgD?WSX4rqt_>CT9#CfwbkW{Pj4wU3L>dC1 zf=%YLwEX^5x;+UcBimp+gqHX6OTYR-L1S&4J@9VC>wu6U##ab@_!oB3L?S);#RQ^u zAdFlhU(H1YNq)eSkhbhsmI-=4Ho3QrHK%PDHxb^;gLvVdeEM9+23zq_yxe5#9zhDJl_aLR>UN&%?)3SyBE3x2@mA;EhUfXGG>+U2y*?{go z;dSGa%^GUIh>6t&H6^G!3ISvZKhROUW&Qm}i1>02CN=hOCm_sP^<{nSI+?LwY5KF( zXU>gHjwEfrGZMFN)6j>W?`w+2^lvK^!eK>8DKS>VMyR1;riuIYLgO3~U685SJE))+ zW<|Of$Ym^wG-719_L43=Y-gL9`Z#f-|2$0s*XNi~y9&i&SN(pg3HDVd9zqqwmb+g- z3WPEYA~Q_&a0{_V>1?>qvd%)u0SYj}beV&%-5E|Ga_qashhT#UZctbpTGN|S7h<|M z37^_iSi&p5$idjsZG~>qqh=M9JBJ0L85qc@iQbqv;|C}Iw+?)xk;J~OxQ=tKIY_FU zZdRIw zQl8MLtjyh-SZr?bf+9$ifBqNTPdxyeR|*PxE}zY^IYun8pC!9j!_C(p)8>|sxHK_H zbH0Oa4gc;hJ8%6Ss@k;)p(0A&fWJ(SfZN@-8*2*S-y5%5j{?%F+YOQ2f_`)nI<~h= z!_pt6D6xiWpr|KA(_PQqYV&)2diRrwp7VTan^31%%-=>l2Jm>8G!7(Q-T(cwxUkr= zT50a1kkTY6ZelIg1{tE(OS1&9^9fs&c&Oicx1xw4~Btd^T8jIDzaYzz(th9+yVsfOb@c#wT*jF~F`l7_jj+OU7Xp)TS| z|6EcE4;X-Se4V>%8a-MX(K^4>V|}dJyQi;w;tsyFB}3SZJkV*NXg`^9HveR3-&eMM z(LqV;MGU7ZbVQRPc4c~Sc;z?4;Q(3Lhg1g-9;wCh2&&rH9>xvmL6R3&=Z;zk9Up%6 z_urWXVKS#JT%kYu+Pv%HMsS-xS8}F4=Ax+;ro_!wWR%Q&To{77q}JeBvE7%y?-?HU z+^{by#pR}7`rciThD*$TXOWPLPzdVAWabbnG$v*izh=!K*~>9wbiSeI<3{A)+&E7f z`Agz#ul_MiX@IYWcA|1eu{rhh;5J-WY1@z^bKuxj_3}Dc%f7jlQzg1}xtX7jQbC_9OI=^UY z_{eGC54@fk&W*h>>Cr&gdtR({Jj6s1fHb|W=dmR9LHWiHr`o$fX(Dfb z;^jA`%hwBTAp8ENIzt`mvtc}6u z8sUx6-mAkfGl27fBUXTUAb3u-PJ4g9w;@^u?nM?B*a@q~JUv;y%POsMbo!YteJCnK zmgE9&j#cB!U7yT2-A2FrnZqQ&(>4~|TQHfp`8kNs*z@~9VAs1Il{$h9jmAvdWrvzd z&~9G8KiXZB%m16H55}FqXCA{9+WHIfIk#u$+)D|nqgvgX%R^RClchRdpL z#F0VD)2+0HwD@@el;*5X<)9%om6`4=_WdhyqiAnu*K`sPa}!g=p;<~98it_0d<2|W z;DNk$A+YcSId#SC4`w*a$&_L3vCxfrn5B7Nz;9o*uar}^2lMOicv65hq%GeK7f?MM z_XAgQaWV(33E3Y@3XaKOric-J(-CWnKD+c+7N__d$p}5NOsp&V28{GN8CvDYtd9zu zZrC+K@eS?O_CHgOxmJA%@k)gCP&f7b72)m?`o1>z3`(cRBAgo$azhnTgiZj3J^>e8 zAA@maOGah8M7lOKd>9o*4~Q-J%48Ucn>iQAYEhf9_t;BwN?*_?m%hoB6yZco7A-ls z_3>}~S0c0sSgsyC_`lvGsO0&Z;6GiCTBgc)@K*UC7+7SdP}9qiFPEO^-d25aLc)xr z5C5yf)yZBN+hE@7OZAjH)KRiXwaZ;5KBleh79OItBxIroJYMknVnH<~F$%<-lrXs@ zxGHJ&&DMvZdjKzAwnyx|7G1WNk&P#p!i!9FCHma%HO9}?%%&N(>EJs9_Y*iP#~6cO zc<6%OA~x4mzfp?W zlK`32{k^4LQMRFA2h3hd+>9&X60uyC}o%YY3Bmyg; zJ%+J5@5?#ZzY!UlI6>tMM_MpnWJV2E?j3NL>GQ-q*vw-va5u_2VgzRj9C4TOJwFCW zmSB9IFV;tC(~JMmZLdn~3`(_O%T^nU0$Ijg?hyS5iTUp7KIGVK=#F_-o zm6zUhTXdZ4a+q!#_F%PsM)H|uh@hIv55H2`R*+k@clguZYn+b>;fG8$trH6EXuZb_ zay!^9oSInGa1m{KNAK?bWxq<6EDg0lUb^3vla>w!;+2ASox@KDt9ig32pt0*RrU; z^pre=m+tGjD3xl?6N-5+<`~BdY9G9Ne2awG3*Y)*xwyE8SUVTCLu%Pl(JPfnbk61F z%{mW(h{EAEK`JMtYe;&{*GYq9@kuZkF_ihCFwDYT>-d@*Zc|Oe*eiEl(N^qS5rxun z{ha=e)z|O?+Fua9n6mT!5Y_38FN|@USL^YBM*?uIkG#RbltT`Bi2*hqoqVxs*CBz- zuB|@w0=wIpJH^k%Ncd;U7f6-dSa`|Z0KOZmxixfTd5~Cwk)Dp&{+rYP?cV6CA{vlK~O4Q&ZY78Wly_X>ewwNh#H5}{t zQUjI0rKVejf#ttj-tRF`Ok+OCA{^7Hp2akF#nsM1Q=ih&HbOSBSSW|%Ap+K#o|r-CARNNvBx!BI7cSCwcZy{hSHBQL1D^k5fcJ~TH~^sp}+%}N6&s`=pu z+ljTfmY1@R3o!o3dcL`T)rdrPeBUqq871j}3Q~qad)O{ILB$V7yM9O|V+fo$Lw%Yx z&=EKz^mKapk+Xxa`bsNOWAXDwhYhFwXKOMckV{sDt~GzDBU5&K*jCROjeh1+NxjM| z(8A>duqwJYGfwDBpX0&Rk+9dF4_$yhz}dOIbYG-neoTt)(3zX57a9ueu$!C*5vM2A zSLtaC0?eW%dpC^d`={fy-@zN6?K{iMf|B+4P^9D&F?Ldi%Q$TC0e*f{ymFaB$7O^X z$TRO+4>DS0amvI8YJST$6il4CT{JO~>Wjh$&ek9W^7cEFg_jQF9!O!%#RK&J5!jm{ z2D-T`Geut}8gi#-!anSPN)hb0LsnJn``9j#O+)r3xxCB;+?3G=iJ5qik*zu{{bjm& zro5RZ5ZTJ>({t0>`-t*a%}Oe-p4%KF>Bb_9^7=ePgOESMSsA*_jAsS?mtfk0^(mv^ zfy4P1@?zuy|Yj9utoXd$>hfI;8-**qP(&##GHss z4Yo@lc3HS>e^Vz$s~-z_r?YosQ&$vF^Q?X$lLdd>LY@K6>t{%^K)7Lxo!VjVU<g~`@K-^Ql)MHlfrI9l-^`TN!#s7u;vCC{2x1 znjr!pZWyY85p9@Wr*WpYr_k_9R!RgJX@_s~n$) z7*-RTnFC|4UfwM-2!jlX3}&>#5A>5G0>=|PVDZ&(;3#f6l4Roh`lr@7ds_W)KpZwn zJBp)C=jo?^sG;Qdhb9Bm@?b1xhIGtaTn$KRA+eIp@o<`_b%o&>l3wEw3~_Y>1F$Bn z6;G$vvYLIA?lPa6HM^1L7rI6_*j3Ecc_uY6b8_=|W|f+6?Tyj`j`uN<7|nj7>+I;H zj~*+r(-vXBgw4nf$UdrzFlw3s0J@a@wR{r5+{yy^;#1}O)7>>UIh&0$D`7h|kD^on z)vgXm*TXz13ekMi^G|jH(f>BhEE_Cke=b!o@ z+A)n31=bYdMNRA$T*mlar!<_Bg|Vwxz+b zCsLBg*CaxB!pC2aGG780*mk-7Z%_j>3DT<9^IY!*b6opn=~G+Lb#BB8Kd{k?sNEJ` zJlf}{Q97aPPyie-G=f&^LdnA9N1~9%bL_Ci$TDLFf*pB2X&rw8#=n3c}t6 z*3pzGjiI1duB-2KI<@x=EX#)7`s(rgEKkSfk|@uW6JxoB*^qSt_2GgQU@Lf_O<&yF zr~1=ab1TkbHNP9oUfT?7EoVq!i(MAo*aW+t$OUS??T*#FB17)4qze?6h|h+JMIpWN?5U z?0xWe2oDMB7R=1?H*hT}fwQCqX#@D{8+8#)%#?RL)|LMA$N%&T>i)z8o2k!|k$I;P z^h-UC#?CB8)10|93@l;2@2Gz*#?H-n@+a4dydL&$MgduC*FKV69wRZFn0YX4U%{h_lsb&yMB8e5J4%=4ueay^aJ@ zVWX1bDl)DFpp0{C^DsqP^~(lp=4-ke2W0F0LiRlN(gR0;AOd5x6k}J+AwkpYRew&R znyzBjKAT4&f3jm5yPybGt`sGuGYM|QxuMWvflL<_SI*YuV-793l_pKjJS}{)Ca_*$ zb<^YH8aMmge1%MhU&-Y~$b*IbWC&|pCmkpF1(;CXU0yVW8;QNX&P8_6O#lzO`3yW! zMkN<0&-k=FeK>aiEohiD z0sE^z47$qyg}kvFbloE~JV&G5i1S_X^McuDoGJ(3t5&dAe;7HtJ@s&KvD}HrZb~qK^wD#E{3`jI6YHAFF>Leg2);R|A(G|O-AAH$!_C4 zPKZ3_Di(hu(5C-{4+csmxD^?ZOPnN?T$vjSqt55>Jz2a z$weuAC~r-OLzgE~hAFVhE%54C6YR=+%Urv0tWO9xw${Wf3b_2k*W1ft76!s<1IzAA zd}5-h>Y&%+il7;ZqhoIc#cxu&-`Q>qVjkEsDCix8CZ*TkV6TQqX1DReu2<(#L5s_K zD8Nslw|n6-1WbKYufNl{|4Y4AhXnm*<1fhKU%mCn`p8OzA^02Xl6elL)7J&-lGmNg z;rW|fJlqyPVcp(FKCeMa+)WO2U})7?@A+qeA0*YiXWKzLz{stj5&V`vsy|%D@a8(X z@oT?r`?A*39R@R2zep_ot=nXmzLoZhHMEHvcmBD8&@ZN81dVJs&lG0fAINHO3xrPdUKW zchREY(s^IG2RvHu|74p-ptsauD8~_8b;btskuM7CNH~T#Fm1Ze1(T|EC_Vo^x8EiO z;&@fa+-$oImm2f85j++3n&P_!anGBfjP@a9YzEXTXUjMtZa zIOF5an{q^8m}NlFZyl7Jf);f0FZ3l&k{sRpbXX0LE}PCSMIl<6PGsmD*M7aC1CAC@ z_E60$TG>L&!{sx*JbPQoMu3yP86JH$i2s=qth94ImG)9~VoIB7-su7HB#T4Y3NA2?&^d!gr`1_S^x4Wz1xA5Lq=*(~cY%y%_pSjN6VO;`} zQb>GqTbFlnMjMbteIu-G%AGHH>3sfSEaO-Gh4gVVGzvQN7rJ-7tQqS!@Uydms87Gb z!6uNa^cPK_mo$kAdNt@fi2FR%{gv%d!IQp1_?M#T2tP(%Mg2>&F}QwG!;(u~>@>n5 zk{-#)Tbq#`mJ#f!jt$@F8YF6R$#`x#YZto*m3#!S8ZizjAvmm*r`r7(Qt-pU+;@l~ z?+p1&cLsR>EjP>@J$#rnnti4OVlXq+e=2&$wY1`gfv&eRGiUGFQCai58u+hipGTF@ zx1i2>UbOKfylo8qIcQc`jfP5DUMQV}Wdi!OOGXBh2#_Tq2PZbQ-!&naQCB#tphaz zT5%6VlntS^id2zWtAYqo0l@(glo3WkzqVjSK%okXfE5cWBV{O?Xi*|EBBCH8LeeON?jQ1J$T!6VW%Hfk%F!XQtC0HzWXz(U0gi(9(pU~!DV`$gg^C=oVa6uPhHFz}rAXQq6a(EKT;V$a6Gtql}6>Xg|Z;u8$ zQjySOP&&avvkw;BCtS#>4eWfygbG=RVXgmOx&$&O70o4t645(0aRlh;zDQ@^!EED!d_*3iCI^#M3#p154z)mm)Shb-RmAM z$XnvfC^F+9yI!>jO8hg1p`kxiVfOvmU%&}ya$~B4E{Z*WzAikZ*X8QtzftmD{SJ@r z8oJ{#uDR^*Vf)a}xJEz$EE=$jgjO$nUJ7f+{Qkb0{PUgBIv0ma%GaZJ{(YO->xdE~ zsNVz%aOyTXUh6*yf%&LZR>0_x>F*~FnPZ;wbE1S{&71wt4_dO6aA?_JSFXQEI`WA2jK^V5iE?M)5D@CP}ymrhDt@nve)bg=VS*WpT; zYM5U}FI>oxk(LeGAz(7n9t=q@XnE!EXcB0Z%q6axAC*?Z{&7kR)igI(L)QhpT(D3n zdnnAy&x>q<S8J+O1}N?|j}hF*h3O^js!%PV^LkEdhM0grYbfkWK_Vhh9X3xIy75+N?upK0X%{Hf%jU=9TF=fX@ zg>Un!HbT$H6)8ltKnr;0GFXr`GQ~`=FL+aHCIdV>(N3)z}1x(-( zNL)3#Tj>*bYp<=ZeorrSd_%X3Lt^MRXzmA=`u%Fi2{)X5lOD|3Ov7|_KQ_xDHXnac zd=oDJ^3BNIhlAD+?qi5hKU&H^qO%gp8~e0<2M=Nf`dkbBJa4kJ!iAF{xT77l^~IHI ziCa;AXfWbD#~^bA20=k7oWR!`yDb6s^nsD9e*P=*BQ1PxPgDbQ>A$Q>DI>PGbJg>L zWj6+%4NL{_8M0gIdf(+9E~6K6HW{VXI$DBd;J~!Ny>Y{R7Hc^)PzSRQ%zinlz-z`U z@Gc00Z-=JaB!BYVbVzk-x!O>-J6W_}c+OakdaOB3k!37E4bT`wTDeWb*8-+{x=3eK zBN#?ZpmEds)WC)O!F_Sjc1OD+k)Z4zYgL3xueuDV#_xW&KT^Q5U zO+=~S5hxqox;^J6+C!7`$ZYdXJw0f=)iJ3zl2;_WH;KN1jlTi@|JQ13U# z%J}T@O0@TG^O^mYji~)oLZekh6X$wU4Y`*kqxur2AG%E>4YuAbuMZ5?2MeyTkL1v_ z3fO^!8h2uM)8o62_*Uy%sP3Boama-2;}lno7V;Az5qvVNhKX)Z@4gTM^kS{;FFHkV z^%PlzqN+XNbpZoXB?R%E0*dIv{eom@U#%DvVAkD_I>BV`L~%H7)Wb$^ba?~zTey8M z9-4AybFzxN`lA2cdTK2PssWq!9I&K}0^wCR#_jf@br7_d z0z9-%X=^)cSN8ZCT;Suy2+sX(8K@Fl=}|WvSeOmqojW;!_aI%>HFIas`@afs&2?A$ z6O^NekKv{9qbmZiH)KQF%$9cp+{nH8aPFbU2vvRjvo8E5$QxpjrF1(8f(1+Kpx`Uh zt?Cs%=8nv>mj!BjwE|m3j?2|446b8+cYR9#MqHB7jHPhwasloPNQ!RLVo2T>*ona2 zT6Ra7y$nIIPu+9Yok_^7;h89q==forl2(rO`ff2?>ELS|gjfkb+&8BE`}?#ofc~3a zXTB0NW#0gnhv4>|r~-08-F63Y%KP;GQlr{NxEH+Cx>!)5XQ~pj z|2b~26x8h5A*K5>06gxc9?ZPRD=hc`(MV~7(Ay?F>0G(`BhJ+~}?FfZX~g!`UXOm-FqdL`z#p&d51dpru$b-+SM%(6Se=y+d5 zyD&ZL#>l;)5#V8Nwy>Uu9C?9LR9CIKIB}BBvhKZm<3K%TILzhqA5B&VqsKn#rURU9 zamn|kjf431-F*~$O~LYLp1I_%=6|f(*$ZpXGk_lSJh#Z=gHJ=#G%!#6bAzF& z;NH5u_S>FlA{{IV*(>Bm9JWEbwa!jm z^zbfby4_@LOS3NR>)BlJV@!tioJaOjxE+n@J$S2q{=p7*I5B%;|GxfQyUq{@1h+tZ zcVvqu+PJw&(vEiQ)AHm~5HH4=7%w*r%V)XxQY)9(y$6lJ(~F zJ#1;0bwV$jwU-s*c}_Lv_D`1n2v4*`kA&qwq}}wx=D-h~8M$aKXOaC1n}(l5641bg z98O8{hPJ)iYh4(I)*P7WeI(>~UN4=DtR=JTK_R+|1Ku3ntCRfZrtjMo=%KV8AOHMc zK`1w5E|~$jt|4e7KDd?Ae3`5hSS9Nw0)*%T3pBFlpQz!tM)G3xJa96!^+J=LdJUa) z5#Z@U)?##)+s@BJqleNLlQlYk)9RiVa0+;}F7#-C5Lf4aiQh}!kRW~ELbK7@3zCil z=zW*WZrEPh-;)yyEjP3m|FaA|i|StHPiiBs9=^wD+DB4^gP=|#8eB(UCe)J}2R-YddKY?q z`5hSXZ*rVJf#Ql0>rgx+*dS(s`(`SJc7tAcqw+@zX!jcGKuxq=G96;c8iDuqY7P9e z(2DU@^}PI7 z<*D?-Ku3ORJ<*jO=dQ>F)GX@a_JtA#DqUXtLvP%I2WT#&*UM;mPgT!r(QxwP$Hp{U zBlN~CKuqDg1Zw+UD3BQJn``DLx=*25n*91N77;2Iow&7vy>$1hcO2{-zO<7!D+@O7 zUBmGA&;r)%-g2n2FH!UGmUG>s_qSO?azZO($rC$e%nUZ+&?h!@UgLd^fG%{s@#vr{AunoQqOB0Q8-N{7gF76b`-d8Ho#iD=lTt zoKzqk%A}J~$<<;LRFvol_#7ofyL}CMdZKlno6VT(D|E8P_X!|ao_p6hR`--%`NZwFrJ-4D!v=__HVv2ls*RoZ@1^P>Du$`X`_iUBVLD(%tu~&`H}4@;foV5ujE} zP#>tE@X;O&wP!BKR7IUYOVGRyVpgr;hjUl@A?W6j@5pT8$PcdjF)B6vh36y2c!kN4@IMz$wT=umPK2vniH@;K};f zL)~!r>r}UW2pFr^@%_tpPzL_0r#5mVz1i;*hT0qzp(WHkLzV6l@+W{z5mrrt7Fc{k zac#VJ>)eEteu{V@#D-9sDz=}Ab5FhsA%(oOq@I!O9|_LsQa{J28PO>uEZpt_DblWs z^IfE6aP)OSegle8OCvO?(x-4I*^rsHM4x&`3~f&yrl>ZY`N>)p-q?b7t%Z9@I?h+| zOS|AcL3!N9{SYpCFyrnr=%$t`zM#8wLL zN-g^Gxat+bysYf9Gk^>h?8A9XKNZsva4FE|-S14eY${yGvOy7&fl8SF;PY?k1lHa1 z^n)zSWx}zu673J})B}!jHZj4=_UXirMnMe+y!RBxZF{J-SOep~qcg@xOuTwJLC?T*D; zzy0>-j$P9KPtRzH{HjKVRP6SvX@&=g*6; z1g?p^pr-%xlNno{tXMyXnL~*S=1IakMAX=~8mp}+Mp{~pP8rv^)yLC-xe zi#jXpHJ13dda&GMbo0-(9XLm{jp^{%&9lDA2o52*|CLKB-rAK$_p8E9hkP1DR%f7* z`aI4fBn z46Wm0ck}L}l!xgyWzC+VunAyxASZ-AF}hTPDIeM`j)4ag;%4;xNzvOE+pNv(Vs#Td zZ|J=gz1^u6dYcC^y5w%L-9>`ykz2hYTVdGbhnr`WZ@M&1LpcVth|-#&0AQewuTKKb znS|OKvObQ~S>`A8{#k}jCR%+ARA7g?I>qV}6kt27O!klQwFOdrG!I+0>=`0g4 zy(@3Xob1rh9T4I4!Re|T)+xv`AXf7yAtEWXT_n`rc-?L0R#7rsB;8?#gUPzx(18if zN)foczF%8=YBsi2VhagF<+>qEH8MHn)D)9T*T>`Xwsf(EV9}lU68$cwR;p;*3AlUJ z>)B3LNMe-4d~>3I)H!E}_{ES&+ud1P<${X%gQ>PvIJBDQt1h|o8Z-a|Lr2}2tg8Lo zx(_CgPQUWxLS8#`dd6Zmzi2W$UKW@XN!G2zCDig>ig5Wmh_Zuu?|##5`T-h$b|p^N z_7DWGbk3K&PW|vSXkIB?%;>7+DPZ(XL8gEi)UEvN3l{MPM65V<;dx zA9FgjTe2Zh(=Vul<-485(XBkbm`N4n1zFCGv#U+&gOfQ4Mx+IDv%4e2aroTOYm2I~ zvP}u?+?-{h@o_i`CGsELre4IV?8==+wa`22=DL-ct6B-r6dDaTqx3|xvm?BfV>=aQ zjm|qGRUexiJRt8!kAw)TjD< zm&<6bnFjg;9RUqIq8zFiRw-VnfaQFz7E1Sz77cT$Ri$UU%Gt-t60wX5Sot-PsNa4% zGQbl`B=x~|F}7!VUd3epI~d2c7{bIPPMFm5(EZC$Lw z{pv^ut8#fF)|%1Gz6WXbFx7i* z)IM`W*A;$7D~ZeFja>W~$J<$0oY&-<4`&X`?xzDwCFbRX5*%50k++5y82B?lb!vtrnWO3gq$e zRQO1FxwpuzY9(Gw@iFNsaY^p$)c?tOMcyGbD(8VqKC|htHMR^WB`q>>zX71Lziq6#cu6O%74O>W#%s^m4Wg~ zw3TPY;laUH8p_zuY%%-oI^2BT@FT0HIabw7a+7-=TP>#J&5fkw^v(CbK^AtGY)(u| zWm?B9(MdDk`jR&!UXT}5_6^yc=-xTBk0fQ(H$wV5wi=f|_rKn9v|5ZSUf(4cnv8gh z(#cUGS)tkRHm8`3h6?#$upaWES1oifq<$xh(nd(oO+RXGN9p_EM{{gvH)ck##Qxfy z=ID;p2d^Db_FbP5iHvZ4a+$}0Y7WLQ4-`a2ux!8tRU7F?1JkHEn9hX7$m$~5eJyJ+ zn#ZG3qSj(I&cqiy)>kME^NX?&+YxzFs8UqoDsQY-$+Q;ZtJ6(6IclNy*kE_JYH^D# zcY3j|iDfD;cTnQ|T78xD8|2xBW~ejh&EyWh%@L7sWuR& zY!5!}=)$nNTH&)3eMxCgcsxC$3ZC>{+JaK;9|3ahX5mzZ<}(s)IvqJ)b5TU}xZ7HB zgU@y$lITR)nK)f)gCuxAaw{J|3|r4Md8LhCIo5b(65hybz2-)7`|scWPpL3WYOjl+_+kE z?XG2^8c9D77C{Fx+n+|*^K&XsmsR}-T(EM!)9{VC(5jlju?);(PmAfeRzox6@wTXi zo}7kU1dS>S3daLN|@)G zo)!53DSP)IOA|FaF)dS(;dO8rGM88NAc(j-#?~N7FWJB($(j=4SOHpV8CS=30~gubBY2-fSzkKr#< zq8~!{85Lj{gRoGvj6MM4LY5#q*}q3zyEYR6hBrOdlw-eYcj8GGJ)5ZhU>oF?1F(u^ zVsf-*A~n`^UnGl)!JihC=ysh?iCWypP8h@R|5JD~s6sn+TQz#C-^&t0_Qr(^S7Rn! zAV_bW-%;$mv@+EpPwlW`=-Vys3&V~|y6g*c4#)Q3^g z<1saZl;kXUQ1ONTr)AZMy|Dg;=EPfn9YJ> z+x2q+7Pt0?CAemol~JCD9f|QZO0@f%m%fK_-3dN=D-p3G9^N4iR0E)c!{*8Z%}cUi z5dm#Cx2~(90k70a82k~BY}AVOeiX@$XSFxxv%{>7{tRN(OxL+UkZ%ZYUcEb~Kb5x$ z7%G%I1L=s{mCpc`houhfEC2OZK!L}cg&m9Z?M|EBqc@`2t@GREQ4{I(6t%4iEJZtB z-I#s<&GB{z_Xow?m5bQXsEcwWURV5ju;f~8x~Xy_UPJ=W9JZ}vtLZv;<|i+f`M4C$ zX^P$UZjXT$lo7?QH`N;%@Xn~?W~T~b#H0vT|eVf!7lA zEm#WrXLpYwOP#W|4!R_6%elX&)x0dw8(xrV`>y)B<090mP6il0YL`Y_6`P?yP!2>n z%V$d}!LmU!+3B#?(oH{Zu0c6R^I_@O znQPNhXbJr#QK*U({Vd}Yd^CQlmmK&g!A)i4H)aiAV@t{ONMr9p>NI9x6xMl0s4K-W z?`ubN(=P%xsG48uY!&nROq^5IRD@WlpG3vwCr4h;wfRnKf_50yI2nAi@TY;tDr0;w z-eKV`i9WBP4Z)k^w&j`Zmlz)p%{D8nh(jm$Kf}Wf|A}d+nGBmCmnnNL zZ*-qLzmf|F0Lzo1Nfp7`oD5y91Fy~9w@KlZz8tnp#7?v&-paK=UPXjh9l{?z^Iaig z6=+>c){FLi;{h%kwdI`UmgdL~ zbRT_zS|K6C;3+XXhnfQ{gFDlkEoc{5*~xVLayU?HM@#?WZlhYoEZf(mL&T!q@2ULD zE35!}RCP*xf1X}r>5D^L9``eEDINJsQ}BB6D0SRKcO5dwRzjk&~nppo?LU8|UR zuSTHYs9cPJQqz7%QthJmzkXy@j5!;lPtgv%%lt9t~^%e&56 z13>N#b^zH>^JArmoqV(rHlwe=oXF6twJbi3ENxilpBcq&Iewe@qfdsBjK%Rl$pnNV zB15gn+A0r~gmoXRjV zJiR*qJNE$Nt`@9m9aq<+0p=aNS24F+JmirFxpC7hW)rm~dbK|>`@}wTosf<#7%L@O zR!khKBa|T&Mc{QLMzhnU>~O(9bam5AjBo!TE%v29=4u^`DTUBRZHlRul0qpONC!Eg zBR@{pF@$||&B6oyl6J>~CeZJ0%EbX4O;aii zW~{pmQK7mpD1KDz_bBVGQxZk-dY7Yz+@DAaJ@%qrq)UH^L6%^uS<9o{O8LAcQwt5g zG$dOXwpYOYHMRu?XGO{bS0_c!HhB_wLAN{D{y%uuL?kjeW-*X>wbQT{#k{QYh@PCJ zr6xnEycG)04wcPBIw0ubs}bWX_-*b>(RYQsi+}GjON8>ZUMLCuj~$Qt`-H{U>}Z49 z3;W;1ZtL@U^9R4$Lh!`gEa;(njc&`P7229R?UuZZd!A?)+*zeG*yqD1?lKCg&<9?^or&D>eU^rupPs!+8}HBD zlW~fev$Cs`?w9-cy6Y9uG%qEchNmC{Z0NH^3c2&1znpE5L!zx}7l;kq9|UQCO~c?y zUYJ=y3=q12e#%l~Ubgmh>mU5ep4Xjig=Yhd8!TpO?m4}Pc3AJq=`7KX=_46{Z<->|_4^You=$2KDn2VJtuu5YQF<`E;RIHFht-~)+wELQK_uy~hGhBVnd z&VqEIiqt+g3Xb_yPVg@s^pz$XWwwkMeSFfH?=xzrO|SBNyGT2VU(-=(Xcb#ykXg^; zl?I7>h+ zrX|+R_UlLfXw%P-jH-$r;_mS2y#!uaXD!B(5XOY^-JFkdr!o@kS=(p!wNh4i(8%!a)H4zpe^ZR!+9D*$gh5) z>8J`%RQc<4&P@Mk->Uoj!G+7-ILzL4I)0^U=cgcnTFCo2hD-Sz1hR7&uM4cIHTzCW z&{JbpU$Duf)!Sn_a^o9T=_ku-e?{HS{z7rTy-rQyDdv_Yc^AuQdFkBzk)5|9qhK$m zo~0JkS9IE;koVhPe+f%vbR$RiE1#8HrNu?xT?t_KNw5g=iCVnAQ&pb5z?M}c{xQ-U zTNTs+HMbTxMz1n^pgp20Y1MDkC1_y%bNXQHxc>vZ2v@rHdG(&4zs)^vn-M$P{Kbxw zIiwm|F6xq@&;13+>fyr6y;qYRV+;r5W+LnDk4#>zAPYJ^sp9-vmz9g-_N_2+( zc)Z3gatj_s6>YNP4iJ*g2(L9s^GN(5r)Ys^hf*QT0kQ+Y6G;T&t`2q<4|0)5I@ey}>sSQc(v>ne}O=P8{#7(O4xkGw|p<`Adf zU5BNj#K}y7fTH~kvh>TF8>+8?oIB<6wM~rl?KM{EiTd{3gNN%JX1tAce=_XR{sShX zvL_yYN%fAqjsU$ZMEvGAwhzTcErtn=Jfk-Ie#u)Qa|A!mp1_*x(CjNH68SV_fI1&e zGVzzEJuMNwIZ}u`s)+QqfE#WCVqSxN;FDE6v~LoUQmPepbY3KzJQqRTkXaLk9pz}K z^bthzJHIF5ZJYLKi(DTA<2fDp2g^vc3=Y zbc@X|`YV#-aj`A7-RCCjRSsYnqm*f$iM;W6x)K8ISBQ8S2LL+w)?v#OC~pin9$gpc z?W;l4xj~!_`P@}g5!uko4~+)@99`&Qp%RlR2n^bRWAw8PT(KBhBjxN7iMC}))?uVq zBU;lHPWMlYiH(I}e7^ehCu_m=0DW4J)R+3ke*4hL6ld-<$C1r~?HU5WCs=c6Rpg)? zoI~wK5^+y6T2uHjCqHU5Rmk}2Ok|#gHfY_X^aJp-xyd|U57s%c!A7^3^=H}+?ld^* zIr4NsIqDi?KbUsm{eY$la#RzZyj4KP^I@w{nWAgNC8`fzK4?kJeGhhmJ-EJr+f?2zxKw&7R&w+!ys4Z2vqf2oAoUM*M zh@D4{prXe4euL4 zl@JE9pI}F$a+TX&1DqI*0rk&<%QDTI!7beA&j`_{$lI2sIO$xmHIydJ^E6lKE{HlE z08AFLQEWQH#INjla==Zp!#=MNdAFUfDIPN9wEsj*r(^W>u>RC|J-y;g{4jl2u|m34zWDZ;%S^CTHr+Eo-#NxRQTbO=bVi9I+ z8{|juYIgEEa@;x%XRE`G1a|+eZ)bPYW1DfpX=0Kx>ai4P{}TrSnqvFGVaGc5JXdJ7 z?rJV;#!JTj3U>1HVUmDI)nIx>0_y_P64uU>Bb< zeY9jl`Jkzd+l}S3QpC*jX@5H9Q<(!a+L}P8NHE`MsCpa+xNcW5=0ESC*fMzeJ79hK z&UtaT>~Fi|nXBF`tu-y~Wax|v3u?t^EDCmcsq^-ziU4!1kaNXsenG2KI#UES%9-q) zF|}+|os5efsBFgFVAz~8#pXcEr6uX*wh5qTjyZ=^{S~#2efp5y0?+lT8KK})SkuUT z*|#B3D|$&JS9slYt9BZ68gnF*LJH?h1yz>Hcdn!0CIszFYDd`>I-cZR;Y)ZfSA`uv z6=NcfS;`)3Ny}=N<>&3GHtJxpcYRzOX#EXSk%7qLhHtY=_@irl-;*$Le*~xu{k=x75^(kcnW6U!LD%2c#t2PJyegqPV55(dFgb0Lk;X2xlYkn!f5{E6l(+BQSzsK>6;(6r;#qA4}}12OzAk$9T{@&8Ok9 zL~D{tkE4e2Ie4)IT~cCnYs|i+#ob(9k_#Fe4sbW0?Oy$iwEZOm4ERa&jY73-tm-)p7-!bMW2;_pSI)@h{@s3t?_MHS*;^e(WEkChQ1d!7%)TxYS1 ziSxsQP5c1!vMkD;oxkcfxz-n))#yy$3w_CYT#%T04=EO9Th1nzNg<&kjzuLTVgOuMS) z+N~GYrs$L8Z=>SzxGhy-8xPdojueclok<9D5wbe4H08Z0(RbkYVk%8=FyVP-xsJ1Y zBHYC3^OpRcp*ca8Mk8^kGY~~gii(DFU!tMn{67`R&JxKzJMsB*2Tm-vDtqiOq7_ia zyY)Y`h~Sif5GFkx_#{u~?L}%OsZ~3goVjWSoa{+Z)zggvn-C>x4n?erAs$eG#sh$r zPPCcxU*%w~9MhK9(e<&kgo9h~v8CtksDBu{wEYl`rMll~eEcSQ&&`EIKkq_cL8>h` zU^sDdOGqii(oI$6D5LSwkz5+8EWz(}Knn{SPi3t^ldR&r`qMjE0g#9{j2Yz}utwX^ zIBZ{;bNN~`f{&!N1?L{VZ5!9P$u9;yrDoH`UWsz*I8hRRbb-Fz=s5o2A1wrQc z%J>;!+_QxqCnO~;I6Epo_-#jBSuI*STGLpJvJ=?D(Gd60brpvt0sv*MlussNI6Gr% z=pG@>C-gD1XG6OGj{iowH#N9zWs5#G8YPtK@qokwX-OA3{DC-dLGh`;vWv-Q#ouM- zMMWjE)utQ6#hWN!LFw{nhzCVX%IC85S7Kcs6z+ai5iHCVx6lh-75&;xO0ppEcJelu zEQWF#Q^rn|qg4-@Nhu~X{xPbcb>4|>XGz|N`8CqG0m9({VIkZqSI0hvMyB)1D&=%l zZO2FN{uB0b7WJpNTopZGqWN%!mqDG*o?I;z>6K2=j@giPqI=+UT>Kk1aL)>d9=J8u zyla`wIVXc%Nk$oLJXBt(k|GFZyw&pG8MB)=AQi;XpUva(bKGQSZuG_D@2Kpyl7_2^ zTDlY`(GFvFMBAI;z?VT$k;$C%8hOReQOUfE^Sv#K`x-c812{2IAqk$SibrY(P?iI8 z>0HSF?ZeyiRZ#8Vtfd`A@K3ug3%!w&?ctLBQQM=8^5_`^#bw!L?>&*FQSyU&{p;g> zhr3fkoB*$w-bl_@qWv+O*2EgKvdi*imf-FCw%F)vFo;2gk+$2md5cbw`O{ymZ!8mP{9o?~! zYBzKg&|PGD;P=(#WCo?zETKYDN+^l1#D8=lH zg7)G#a*IJ~1Au?5I?Zf%1VNNjWg5h)kGQrVbF#hOc&5KU7tCiX$g_R@C8qzAuM;y# zI`lbMvXQnc6V8*2=#M)e{lihBoijn+Y79bIRi3YQaLYS={53k_OVvUHL5^EExmc|e zlOK#{L*aB}N1#^fMskqvNj6O&PJf;m6dukjaQ6QFpM^FrOH|hEquV~}T`3$Di@@-Q zEZPOp0K2NHZ0^a!GCM4sGAhB}-_G_QZ)|!XE1>PZofchVFYq#3)6XenU3218(4^Uq zjb(am<ckzf^=1jzTITpNLcA^T#*es}ROYuh zJ7uy)wQ0X#kxehT&y3zY5Dz<07EwD*Vwp00t36c6Q2ScXvWX=S+*0IKfdgHyOelm^ z8U<>Lmj5LYuP5Cs$o@?g7eLVTqiH>=*k8B;Ur6BDg@co;p-`}WD zed6swVv;r|kr>{0)PDmH$Z?RP@cYn}Oem~Ig#|Rz{nEJ-fBc%_y=xB_Z0hQ>iIqI| z-6}srx})AbN@MgVKE!)!j1tST4BJv$w5V=zPE2R%+o&9NlQ9umPw~r+xPv=%r}68N z7#e_jSRDE_cE)hv=BD%w^_Z`z@tY>I)H06-k4FFAOp)mKaSRxWSXnZnhWL-~drI&j z#3ETyt)WaqgUW3^MXoDL+5skWM9J&6y#5t*J^Ch9UHynw;$IRCt~&MH>()iW&`g%- zJo{wHK3rMZSSyKY`e&?`+b#QEFSTOxWR4mUV(I&^9Co8|6v>}(n2~p4JNXoJLU50e zC8}W0k_jc=sOARmd_UiUTCtWNhpFddc~dF7F* zkykUZ$#Jwl9D@Y(L{AB>aB~(Ihy63Ppz*;qRD{vvMQ#($CP1;xR4iPy)ZjJZ6vHSix`S|}Jik^mZ2TO0$ zC9hQp^~3Z}OLkSf67=FbH=_e9n1PnuKdv-{uXiu2UE6Fw3LKQI|AMR*+R%u@p7CjZ z#Be~~Iv#w=w@tQeZiFyaM#_kua!vb8tYZ>FO7Npwgj;7H$MT@%MWNvMzCqJa4GO z$s`puN6pwcXe@qOc-H0hFht4K58BOsDjD{V)67gZF|FrT8SNZZrbu{L5~8RSA7^A~u&8Y?#_r$P_Yx8OJR9m-9ukCeYVs8?(BP4iNaIVJmzc~kZ1 zN0-{<45x|=yXp@1YNa<8AMk&u#_mdB4*Su4^VlV+3FNZ_>d-b}`~xN4J1e|J!vlMa zWK`*)>~FDIhSNTyv2%B`-FfYNSZ3AW5x-3o!@1pE-@x3TN z>1b?7$tFKNfGVcO2W$uy7qvy-Z0N3#7bH@e=jF5Ag1*{wMYpt8Dad0qq^>nu6^}kv z6mX9Ep_1BmQ&)ZB@rqzk;?+dY>O;9Jv+x4Cb+OmIVo~7sF^B+V;agCXz8xdp!D@-V zz!~WHDNQZZcn>M~ekAmSoX8x8DnA9*W>rju4hp7=dF>ev`gqyfs9M95A*B7VM5U<9~$m^-O?9Gwta*9R1hjzcfzja;niv;q%(IkZO zr=CSf0Q=~><&zV=B+*Q6-zgWTBK~jY_HOh&BYGZH#-mQPr^-wCDIc+NGF*+q<@jiv z<*F`bxOUI_DIahePt8lH+P><@JkJ0XH>tdsyY3M9myphFOT);SfzX<|h44tta9GjX z?h`k+c+`4=D&`w>Nh7ZLv9z2hqDW#gp644evi^_MgNQcVbK}+gDlt-?VEEKKfboCl z%sdB|qu}~e;(;wwJy1yC&NdhKoib~A&ri37BVlNT->Lh@%Gz3eR)6;?#}PplM#?*l zB&>=)$)ie{Wuu!mZGenw!!%1@G#Ss4{+gMfn2s7 zQ+t0Xd}upnJ})wFyu?mIP?=>@3X-;I^fiRZU4x;)I*&S1jiPWW?|ejtIaQ3QU>Q^vUvN;xzFqz{zU{O`&fFK#<%I6SROp0+ z0-28n-!)DpI*PQJ?4ef&9NtLuni9b-7IhWKSi46PajLCe*n)rs{@~#5>t9Y9cm-oa z^*B1Vq(s3@qtLJSifZY$Gm%S!XFl&XtBlx8-ut8B ze@8kedM*rV=f>wpTNZhoXLvMfra0jiWU_hc9;)f7zWaWKJYnIA@d2FD(k3D0%)6bm zMwG*pQyb@lH@T?z0F5c1PSTIw^Tyng-`#(DDQ3wfw%Ne5;FQDps21Z4@Jl{rX^Tln z%kE2ZEQuJ*FY=|+g_INff*G-P+I_qS=;kXYq(Ee-l%iil&}C8eK#UaZZ)1~tGCeWU zmD0MfQ5+Pm!p)=K|NIK+%{kSYrRTg5$A7|v*T|n)wMH|ePWcm6nQyC40+ZURWEgmz zMadfAQ$F-{={BO&bywuXQ+1p*dHfQBie97N9h2~fNEFZ(8%Z<^dh-WHk)^ouMgawH zkwIsjQ1ZtJ+#KbPCCf)?sGy<~we%P#KAefs*^7>oOWWC5#aS&FS**8o*R>9E3kvtvDE@T3Kz*#GL}v>ax(d#r zkSX#z|2QrS1;6=5{@5j>6zN%jc!V4#b!8MtEChqcL8Njc>IF48jj!S3D3bkjhsK1C zm!dxXUgVbV&0wE=!@ExtFK22*z3OyNf!Q4rxWujfE{#4jx^<*>1%fO zltj0bo_1)hwGga7Wb`F!B`Zm&q&TeQ%84Xeq=--%K_3N6uO5U-0Mh1umR_+z$B&rL-M?Ya{P2Ei)L<6hUXYc@`ve;?S7@5FC;`&q81$zZm*eewpA&c zpy2Bft8{Yk{%Yo_Mn9t|XXD-v*Uw)e-m^p%ctN6)qN)XgclofMk!P+QZRR7-i28rLYW~2N@NINsZ>ms>W zF3WEIpySm%4;xL}@JEXvr*uH1KuaH4Gw0xE{70p}SpsKZ*?}%y)k1k3u8po90I2|h z2*;xGX*b7e21ruJA&;_(EBIQzzX+2B6%S_3y3`jYx1QE6mh;r%)MjmDvURXu!iLrn zETSAA!nt4M9iI#U<>uNrLDSRhsP}EtO6~13oV6Oo%^~9{d|wCgNHih_c@-S_&Unj~ zhZre@*Tk0GfYvfjh@OOQM3puNelI(V8dR{`3INw(&$dFN0r2HI(!WHttv)4?v(bs6 z26i%aI5pGCA~7x@+=}yuC}?%U=<^6tO6^2*d|+@g!%VlVe|eg(*{oM>Ve*cAa%2ms z)q6X+SgBCJoGSP>D*uZ+n?4`ena+!~>wg_qCX_`ic-ohsuRLggS{L-WB>+KEKMw6x z9!Lap+lLQkEM!N@M8iuh%Lbkolyb0ZC{Ssx6icE1T*V6y?Emxty>j|sSzphBisq-l zf6h%D;;qK3{0 z0(43Lr#w&C>lVikOmS)L-=F^PK08~g-A8r<^^u5JN#sT~(KMoj=`HG*tnrK6c~V`N zyg&z&ETLXHc838ADyX~&Iza9l~Mz3A^t=YUIigK#wKONnj6me&`V-&W84!e z>D<_C?IXM;qoUKYWOWvcym1Ca(pg|}{=7814z7I_O8))b8_NheXDMG$GyVU^n_rccUH*Wyp_K>BK%NPfX$~bpmxp=qO$xM7M5+qlXVs6 zl&km{iKyg$HYcD|z>jjLA~ADURrEETB7eww{cdh_^y_Ig1-SgS#X4|gwSaCm#~k!HaR!GC=BzEg|^7s>zJ>Z!)^IXy;vIkGpJtM+*_mId|eCaks4gh zGpY$F1k3Afm9o&uG2SAE$tIcHAHRsr;y5o7xIkm0vhGyl*+%qv)NTRest)xw3+~lG zpE15z6Yf7IvRV`Ipuf*&M!kzGo0l(sJiQ{2=^iW>bE3tRBi{+5K6=*RUS8l7^M4bT z;Vss06!fPsHyrZ3mDY8vog9q_j;aP!q2EEQ?t$*2w0XP68wN)) zroAdCg_G4X>3pt;Liv{1MtP7hg7d8EE--oj(t#3QHo?+*+VV=FWNYIVHy8OeBO%G% zZAqHH_I$ZK(fTRZxa0ER*|nz0%4po!xPSt0Dxl^^1p#bCdbR_diQQzRkj%hB1s~OH z#*4+%gmrW-m(sRGz~gL;X6BBFb!gEvB-J*8NqF}={BP@@Nz;9pa>iM^{Ym*1r_Pg> zFv1(3dYcWs5z4y>QofkVd_UDpvj(@FC7Q59fL|1IQDz{PD&iyPzi2?_QNa`>hIV~P zZIV_a?{x%|sgAk-;2nR}sdgsZ)5gp{w%yp@E0_rAtmxi8B~gpCkoe6jq{P1&`K{=0 znLgAdbE5@U*D-zk8Hq$ves8J3(03aNN+{!#{EbfUq(Qx+_zksP2rrRiEpU`Gg2A(k zySt6>oe8H%bi%bg-^_ak;?1hi&4Vd8>( z?)Ff~(g)et!a!d(ul@N|t_b!)B=ro}tTEb->93coAmCVSIw~e({W;}EJc9E@1I$hS zUIoDfVc#jS?|JVcy7x_a@Bi1{)y6b&hjA7YHBoRz4ABBbU|HNIY{;kzQl{dzWWhLQ z42G<_EIOvPt4vzg(z>bmGNsX}=x}tPh7XLfDOr)17VRivl@mMAP@vFTxgam?(UxB6 zmD^L{N>|1&y->#sk_vr>zJ7j4TD~?fcMKj;%{q!C>e;638WEYrI!X=P zBPjNcODtXqqz-T=jN;*19bu!;suNW`Y{|K4b`A6&(W=;s6%DTF2p9DG-Ek?y%cKXy z_g1!5D2?xNky<>p(cTV)J$8K8RoUBeIf^;^=KyHb$B=gpwGs6Yve=PyPx$`$#O^Ov z&A3*eNzW>sv%3(jqm)cRnu@blg$R1K#RyWEA98n!4vyxE$zrHQYp zuw|<8bh(;N7W_9ros0LbXb8#RK}|`@2^|KF>e7it#V4&U&GLx3F*)J)2t_z#`Tr0??@Z5GQ3kVx>RMgX|?R$D5ZSgFP-HpSU1{Y4c2$3B=#pe zN%br9=Ao|f+w;sW$KH|_`|T?1x~a9Nu1BAeDk(@?1QI}p&O^FildI`#p5ZIVGu>(y zaoeJwcd?9AUv{Y868b&75MKGiTXD-wuHTmcdR7-BCJ_(bNMoGeE=!6=Hf|h1#!Tbr zBy{3ZuTu6thva1q=P@rr!)|3OslIr0SeYVAgn}-8i@+k_rzLhbmvIB?#a`$|pSA>p zE5r((mk#gYCr9OJg;HPkfB2SrkQi~POF*4#=$iZGZ;x9R<8+GR2h zLVvv=ve@H&dI)#&n%1OK)m7%IvOJP16=boRze~|6Ms=Q8LlJ3vTJ^20IBwZv(YC>H zi?9gQs~+GksnFe&f8aa-~Z&W0=E zPjbf=U@ew}#y3e5?^F%nR7aXVUas;S7wMc(uibTKl*K995_YUKHT!rJ`J-OYVNo4t;@ z4`_<@+%|qA;a`Xr#P|6jKRU5SZEao8{ma5z5hIafjrr1p9-Z^S|Qei1OAoS9W!VpXR)8u&hQrhA7*_#XyuwurwRIP z`fzCnb83EM47x+iU1My`SFjOe7W5(Gp$vEg&??$2W^k4P4+cCK@Cc|X2<9IQcrf4* vpbG`@QwBU3@L<3ro^b=l4gRNYfKzka?VlBu8#_Bf;PZZF)~25~?EL00%SoU4 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MotionController_left_black.png.meta b/StandardAssets/Textures/MotionController_left_black.png.meta new file mode 100644 index 000000000..03596ee90 --- /dev/null +++ b/StandardAssets/Textures/MotionController_left_black.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: d12dfda02efb4709a9d4883d8be0d5d4 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: a30d1852fe3236140a0fbdb6f84f8d22 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/MotionController_left_black_scaled.png b/StandardAssets/Textures/MotionController_left_black_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..af821e7ef6249ba360d6c5d7225bb2c1dad60d08 GIT binary patch literal 11681 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MotionController_left_black_scaled.png.meta b/StandardAssets/Textures/MotionController_left_black_scaled.png.meta new file mode 100644 index 000000000..1ec24a5e6 --- /dev/null +++ b/StandardAssets/Textures/MotionController_left_black_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: cf2120554dd4435bb096cb972eecfe28 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: a30d1852fe3236140a0fbdb6f84f8d22 + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/MotionController_left_white.png b/StandardAssets/Textures/MotionController_left_white.png new file mode 100644 index 0000000000000000000000000000000000000000..e1f725467144419ea03a5caf088828d7debdedac GIT binary patch literal 312953 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 Pfd{Qvw>)R*)_wmC0#j71 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MotionController_left_white.png.meta b/StandardAssets/Textures/MotionController_left_white.png.meta new file mode 100644 index 000000000..783a010ea --- /dev/null +++ b/StandardAssets/Textures/MotionController_left_white.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 2c6e990a32224fd2a842bccaf716362b +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1642274e7a8aab14dbffc7967808741d + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/MotionController_left_white_scaled.png b/StandardAssets/Textures/MotionController_left_white_scaled.png new file mode 100644 index 0000000000000000000000000000000000000000..104cfbd567906dfda6af5fea275dba23d336378d GIT binary patch literal 11561 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 literal 0 HcmV?d00001 diff --git a/StandardAssets/Textures/MotionController_left_white_scaled.png.meta b/StandardAssets/Textures/MotionController_left_white_scaled.png.meta new file mode 100644 index 000000000..62f779347 --- /dev/null +++ b/StandardAssets/Textures/MotionController_left_white_scaled.png.meta @@ -0,0 +1,106 @@ +fileFormatVersion: 2 +guid: 56bdefd3a72047ab92f9eda2ecd182e0 +TextureImporter: + fileIDToRecycleName: {} + externalObjects: {} + serializedVersion: 5 + mipmaps: + mipMapMode: 0 + enableMipMap: 0 + sRGBTexture: 1 + linearTexture: 0 + fadeOut: 0 + borderMipMap: 0 + mipMapsPreserveCoverage: 0 + alphaTestReferenceValue: 0.5 + mipMapFadeDistanceStart: 1 + mipMapFadeDistanceEnd: 3 + bumpmap: + convertToNormalMap: 0 + externalNormalMap: 0 + heightScale: 0.25 + normalMapFilter: 0 + isReadable: 0 + grayScaleToAlpha: 0 + generateCubemap: 6 + cubemapConvolution: 0 + seamlessCubemap: 0 + textureFormat: 1 + maxTextureSize: 2048 + textureSettings: + serializedVersion: 2 + filterMode: -1 + aniso: -1 + mipBias: -1 + wrapU: 1 + wrapV: 1 + wrapW: -1 + nPOTScale: 0 + lightmap: 0 + compressionQuality: 50 + spriteMode: 1 + spriteExtrude: 1 + spriteMeshType: 1 + alignment: 0 + spritePivot: {x: 0.5, y: 0.5} + spritePixelsToUnits: 100 + spriteBorder: {x: 0, y: 0, z: 0, w: 0} + spriteGenerateFallbackPhysicsShape: 1 + alphaUsage: 1 + alphaIsTransparency: 1 + spriteTessellationDetail: -1 + textureType: 8 + textureShape: 1 + singleChannelComponent: 0 + maxTextureSizeSet: 0 + compressionQualitySet: 0 + textureFormatSet: 0 + platformSettings: + - serializedVersion: 2 + buildTarget: DefaultTexturePlatform + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Standalone + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + - serializedVersion: 2 + buildTarget: Windows Store Apps + maxTextureSize: 1024 + resizeAlgorithm: 0 + textureFormat: -1 + textureCompression: 1 + compressionQuality: 50 + crunchedCompression: 0 + allowsAlphaSplitting: 0 + overridden: 0 + androidETC2FallbackOverride: 0 + spriteSheet: + serializedVersion: 2 + sprites: [] + outline: [] + physicsShape: [] + bones: [] + spriteID: 1642274e7a8aab14dbffc7967808741d + vertices: [] + indices: + edges: [] + weights: [] + spritePackingTag: + userData: + assetBundleName: + assetBundleVariant: diff --git a/StandardAssets/Textures/MotionController_right_black.png b/StandardAssets/Textures/MotionController_right_black.png new file mode 100644 index 0000000000000000000000000000000000000000..4bf2484f29b01b9b6b2e10d1a37ffc8beb0c07ab GIT binary patch literal 311430 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