using System; using System.CodeDom.Compiler; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Diagnostics; using System.Reflection; using System.Runtime.CompilerServices; using System.Runtime.InteropServices; using System.Security; using System.Security.Permissions; using System.Text; using Unity.Collections; using Unity.Jobs; using Unity.Mathematics; using Unity.Profiling; using Unity.XR.CoreUtils; using Unity.XR.CoreUtils.Bindings; using Unity.XR.CoreUtils.Bindings.Variables; using Unity.XR.CoreUtils.Collections; using Unity.XR.CoreUtils.Datums; using UnityEngine.EventSystems; using UnityEngine.Events; using UnityEngine.Experimental.XR.Interaction; using UnityEngine.InputSystem; using UnityEngine.InputSystem.Controls; using UnityEngine.InputSystem.Layouts; using UnityEngine.InputSystem.LowLevel; using UnityEngine.InputSystem.UI; using UnityEngine.InputSystem.Utilities; using UnityEngine.InputSystem.XR; using UnityEngine.Pool; using UnityEngine.Rendering; using UnityEngine.SceneManagement; using UnityEngine.Scripting; using UnityEngine.Scripting.APIUpdating; using UnityEngine.Serialization; using UnityEngine.SpatialTracking; using UnityEngine.UI; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Jobs; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Receiver; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Receiver.Primitives; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Rendering; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.State; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Theme; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Theme.Audio; using UnityEngine.XR.Interaction.Toolkit.AffordanceSystem.Theme.Primitives; using UnityEngine.XR.Interaction.Toolkit.Attachment; using UnityEngine.XR.Interaction.Toolkit.Filtering; using UnityEngine.XR.Interaction.Toolkit.Inputs; using UnityEngine.XR.Interaction.Toolkit.Inputs.Simulation.Hands; using UnityEngine.XR.Interaction.Toolkit.Locomotion.Teleportation; using UnityEngine.XR.Interaction.Toolkit.Transformers; using UnityEngine.XR.Interaction.Toolkit.UI; using UnityEngine.XR.Interaction.Toolkit.Utilities; using UnityEngine.XR.Interaction.Toolkit.Utilities.Collections; using UnityEngine.XR.Interaction.Toolkit.Utilities.Curves; using UnityEngine.XR.Interaction.Toolkit.Utilities.Internal; using UnityEngine.XR.Interaction.Toolkit.Utilities.Pooling; using UnityEngine.XR.Interaction.Toolkit.Utilities.Tweenables.Primitives; using UnityEngine.XR.Interaction.Toolkit.Utilities.Tweenables.SmartTweenableVariables; using UnityEngine.XR.OpenXR.Features.Interactions; [assembly: CompilationRelaxations(8)] [assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)] [assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)] [assembly: InternalsVisibleTo("Unity.XR.Interaction.Toolkit.Editor")] [assembly: InternalsVisibleTo("Unity.XR.Interaction.Toolkit.Samples.StarterAssets.Editor")] [assembly: InternalsVisibleTo("Unity.XR.Interaction.Toolkit.Tests")] [assembly: InternalsVisibleTo("Unity.XR.Interaction.Toolkit.Editor.Tests")] [assembly: InternalsVisibleTo("Unity.XR.Interaction.Toolkit.Samples.StarterAssets")] [assembly: InternalsVisibleTo("Unity.XR.Interaction.Toolkit.Samples.ARStarterAssets")] [assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)] [assembly: AssemblyVersion("0.0.0.0")] [module: UnverifiableCode] [CompilerGenerated] [EditorBrowsable(EditorBrowsableState.Never)] [GeneratedCode("Unity.MonoScriptGenerator.MonoScriptInfoGenerator", null)] internal class UnitySourceGeneratedAssemblyMonoScriptTypes_v1 { private struct MonoScriptData { public byte[] FilePathsData; public byte[] TypesData; public int TotalTypes; public int TotalFiles; public bool IsEditorOnly; } [MethodImpl(MethodImplOptions.AggressiveInlining)] private static MonoScriptData Get() { return new MonoScriptData { FilePathsData = new byte[32761] { 0, 0, 0, 1, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 74, 111, 98, 115, 92, 67, 111, 108, 111, 114, 84, 119, 101, 101, 110, 74, 111, 98, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 74, 111, 98, 115, 92, 70, 108, 111, 97, 116, 84, 119, 101, 101, 110, 74, 111, 98, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 103, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 74, 111, 98, 115, 92, 73, 84, 119, 101, 101, 110, 74, 111, 98, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 74, 111, 98, 115, 92, 84, 119, 101, 101, 110, 74, 111, 98, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 65, 117, 100, 105, 111, 92, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 125, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 66, 97, 115, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 130, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 66, 97, 115, 101, 65, 115, 121, 110, 99, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 136, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 66, 97, 115, 101, 83, 121, 110, 99, 104, 114, 111, 110, 111, 117, 115, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 73, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 73, 65, 115, 121, 110, 99, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 73, 83, 121, 110, 99, 104, 114, 111, 110, 111, 117, 115, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 132, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 132, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 70, 108, 111, 97, 116, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 137, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 142, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 69, 117, 108, 101, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 134, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 50, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 134, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 51, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 134, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 52, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 136, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 66, 108, 101, 110, 100, 83, 104, 97, 112, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 151, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 67, 111, 108, 111, 114, 71, 114, 97, 100, 105, 101, 110, 116, 76, 105, 110, 101, 82, 101, 110, 100, 101, 114, 101, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 147, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 67, 111, 108, 111, 114, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 147, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 70, 108, 111, 97, 116, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 86, 101, 99, 116, 111, 114, 50, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 86, 101, 99, 116, 111, 114, 51, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 149, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 86, 101, 99, 116, 111, 114, 52, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 152, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, 110, 92, 85, 110, 105, 102, 111, 114, 109, 84, 114, 97, 110, 115, 102, 111, 114, 109, 83, 99, 97, 108, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 129, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 99, 101, 105, 118, 101, 114, 92, 85, 73, 92, 73, 109, 97, 103, 101, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 77, 97, 116, 101, 114, 105, 97, 108, 72, 101, 108, 112, 101, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 77, 97, 116, 101, 114, 105, 97, 108, 73, 110, 115, 116, 97, 110, 99, 101, 72, 101, 108, 112, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 82, 101, 110, 100, 101, 114, 105, 110, 103, 92, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 66, 108, 111, 99, 107, 72, 101, 108, 112, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 83, 116, 97, 116, 101, 92, 68, 97, 116, 97, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 124, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 83, 116, 97, 116, 101, 92, 68, 97, 116, 97, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 83, 104, 111, 114, 116, 99, 117, 116, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 83, 116, 97, 116, 101, 92, 80, 114, 111, 118, 105, 100, 101, 114, 92, 66, 97, 115, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 141, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 83, 116, 97, 116, 101, 92, 80, 114, 111, 118, 105, 100, 101, 114, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 139, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 83, 116, 97, 116, 101, 92, 80, 114, 111, 118, 105, 100, 101, 114, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 65, 117, 100, 105, 111, 92, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 66, 97, 115, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 70, 108, 111, 97, 116, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 50, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 51, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 92, 84, 104, 101, 109, 101, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 52, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 113, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 65, 110, 110, 111, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 66, 97, 115, 101, 71, 101, 115, 116, 117, 114, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 80, 108, 97, 99, 101, 109, 101, 110, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 111, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 82, 111, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 83, 99, 97, 108, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 83, 101, 108, 101, 99, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 65, 82, 84, 114, 97, 110, 115, 108, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 65, 82, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 65, 82, 71, 101, 115, 116, 117, 114, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 94, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 67, 97, 114, 100, 105, 110, 97, 108, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 6, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 92, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 97, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 73, 110, 112, 117, 116, 65, 99, 116, 105, 111, 110, 77, 97, 110, 97, 103, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 73, 110, 112, 117, 116, 65, 99, 116, 105, 111, 110, 80, 114, 111, 112, 101, 114, 116, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 109, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 92, 83, 101, 99, 116, 111, 114, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 72, 97, 110, 100, 115, 92, 72, 97, 110, 100, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 67, 97, 112, 116, 117, 114, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 72, 97, 110, 100, 115, 92, 72, 97, 110, 100, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 78, 97, 109, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 72, 97, 110, 100, 115, 92, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 97, 110, 100, 83, 116, 97, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 83, 105, 109, 117, 108, 97, 116, 101, 100, 73, 110, 112, 117, 116, 76, 97, 121, 111, 117, 116, 76, 111, 97, 100, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 113, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 76, 111, 97, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 111, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 83, 116, 97, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 77, 68, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 109, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 92, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 77, 68, 83, 116, 97, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 88, 82, 72, 97, 110, 100, 83, 107, 101, 108, 101, 116, 111, 110, 80, 111, 107, 101, 68, 105, 115, 112, 108, 97, 99, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 101, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 88, 82, 73, 110, 112, 117, 116, 77, 111, 100, 97, 108, 105, 116, 121, 77, 97, 110, 97, 103, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 88, 82, 73, 110, 112, 117, 116, 84, 114, 97, 99, 107, 105, 110, 103, 65, 103, 103, 114, 101, 103, 97, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 100, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 112, 117, 116, 115, 92, 88, 82, 84, 114, 97, 110, 115, 102, 111, 114, 109, 83, 116, 97, 98, 105, 108, 105, 122, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 92, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 84, 114, 97, 99, 107, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 92, 73, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 92, 73, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 84, 114, 97, 99, 107, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 67, 97, 110, 70, 111, 99, 117, 115, 77, 117, 108, 116, 105, 112, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 67, 97, 110, 83, 101, 108, 101, 99, 116, 77, 117, 108, 116, 105, 112, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 65, 116, 116, 114, 105, 98, 117, 116, 101, 115, 92, 88, 82, 84, 97, 114, 103, 101, 116, 69, 118, 97, 108, 117, 97, 116, 111, 114, 69, 110, 97, 98, 108, 101, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 73, 88, 82, 83, 99, 97, 108, 101, 86, 97, 108, 117, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 82, 101, 99, 111, 114, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 82, 101, 99, 111, 114, 100, 105, 110, 103, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 82, 101, 99, 111, 114, 100, 105, 110, 103, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 113, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 83, 116, 97, 116, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 124, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 83, 116, 97, 116, 101, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 83, 99, 114, 101, 101, 110, 83, 112, 97, 99, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 130, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 115, 92, 88, 82, 83, 99, 114, 101, 101, 110, 83, 112, 97, 99, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 72, 111, 118, 101, 114, 92, 73, 88, 82, 72, 111, 118, 101, 114, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 142, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 73, 88, 82, 70, 105, 108, 116, 101, 114, 76, 105, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 73, 77, 117, 108, 116, 105, 80, 111, 107, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 73, 80, 111, 107, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 73, 88, 82, 80, 111, 107, 101, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 80, 111, 107, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 80, 111, 107, 101, 84, 104, 114, 101, 115, 104, 111, 108, 100, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 80, 111, 107, 101, 84, 104, 114, 101, 115, 104, 111, 108, 100, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 125, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 80, 111, 107, 101, 84, 104, 114, 101, 115, 104, 111, 108, 100, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 111, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 88, 82, 80, 111, 107, 101, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 80, 111, 107, 101, 92, 88, 82, 80, 111, 107, 101, 76, 111, 103, 105, 99, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 83, 101, 108, 101, 99, 116, 92, 73, 88, 82, 83, 101, 108, 101, 99, 116, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 138, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 69, 118, 97, 108, 117, 97, 116, 111, 114, 115, 92, 73, 88, 82, 84, 97, 114, 103, 101, 116, 69, 118, 97, 108, 117, 97, 116, 111, 114, 76, 105, 110, 107, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 132, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 69, 118, 97, 108, 117, 97, 116, 111, 114, 115, 92, 88, 82, 65, 110, 103, 108, 101, 71, 97, 122, 101, 69, 118, 97, 108, 117, 97, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 69, 118, 97, 108, 117, 97, 116, 111, 114, 115, 92, 88, 82, 68, 105, 115, 116, 97, 110, 99, 101, 69, 118, 97, 108, 117, 97, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 135, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 69, 118, 97, 108, 117, 97, 116, 111, 114, 115, 92, 88, 82, 76, 97, 115, 116, 83, 101, 108, 101, 99, 116, 101, 100, 69, 118, 97, 108, 117, 97, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 129, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 69, 118, 97, 108, 117, 97, 116, 111, 114, 115, 92, 88, 82, 84, 97, 114, 103, 101, 116, 69, 118, 97, 108, 117, 97, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 124, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 70, 105, 108, 116, 101, 114, 115, 92, 73, 88, 82, 84, 97, 114, 103, 101, 116, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 70, 105, 108, 116, 101, 114, 115, 92, 88, 82, 66, 97, 115, 101, 84, 97, 114, 103, 101, 116, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 70, 105, 108, 116, 101, 114, 105, 110, 103, 92, 84, 97, 114, 103, 101, 116, 92, 70, 105, 108, 116, 101, 114, 115, 92, 88, 82, 84, 97, 114, 103, 101, 116, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 68, 105, 115, 116, 97, 110, 99, 101, 73, 110, 102, 111, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 73, 88, 82, 65, 99, 116, 105, 118, 97, 116, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 118, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 73, 88, 82, 70, 111, 99, 117, 115, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 118, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 73, 88, 82, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 113, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 132, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 73, 88, 82, 83, 101, 108, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 86, 105, 115, 117, 97, 108, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 67, 117, 115, 116, 111, 109, 82, 101, 116, 105, 99, 108, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 129, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 86, 105, 115, 117, 97, 108, 92, 88, 82, 84, 105, 110, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 86, 105, 115, 117, 97, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 88, 82, 71, 114, 97, 98, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 88, 82, 71, 114, 97, 98, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 83, 110, 97, 112, 86, 111, 108, 117, 109, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 118, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 115, 92, 88, 82, 83, 105, 109, 112, 108, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 117, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 65, 99, 116, 105, 118, 97, 116, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 71, 114, 111, 117, 112, 77, 101, 109, 98, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 79, 118, 101, 114, 114, 105, 100, 101, 71, 114, 111, 117, 112, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 109, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 82, 97, 121, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 83, 101, 108, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 73, 88, 82, 84, 97, 114, 103, 101, 116, 80, 114, 105, 111, 114, 105, 116, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 86, 105, 115, 117, 97, 108, 92, 73, 88, 82, 67, 117, 115, 116, 111, 109, 82, 101, 116, 105, 99, 108, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 130, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 86, 105, 115, 117, 97, 108, 92, 73, 88, 82, 82, 101, 116, 105, 99, 108, 101, 68, 105, 114, 101, 99, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 125, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 86, 105, 115, 117, 97, 108, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 76, 105, 110, 101, 86, 105, 115, 117, 97, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 86, 105, 115, 117, 97, 108, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 82, 101, 116, 105, 99, 108, 101, 86, 105, 115, 117, 97, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 133, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 123, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 68, 105, 114, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 125, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 68, 105, 114, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 71, 97, 122, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 80, 111, 107, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 111, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 82, 97, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 82, 97, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 83, 111, 99, 107, 101, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 125, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 115, 92, 88, 82, 83, 111, 99, 107, 101, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 111, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 76, 97, 121, 101, 114, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 76, 97, 121, 101, 114, 77, 97, 115, 107, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 76, 97, 121, 101, 114, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 76, 97, 121, 101, 114, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 79, 118, 101, 114, 114, 105, 100, 101, 115, 92, 73, 88, 82, 65, 105, 109, 65, 115, 115, 105, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 79, 118, 101, 114, 114, 105, 100, 101, 115, 92, 73, 88, 82, 79, 118, 101, 114, 114, 105, 100, 101, 115, 71, 97, 122, 101, 65, 117, 116, 111, 83, 101, 108, 101, 99, 116, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 79, 118, 101, 114, 114, 105, 100, 101, 115, 92, 88, 82, 71, 97, 122, 101, 65, 115, 115, 105, 115, 116, 97, 110, 99, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 73, 88, 82, 68, 114, 111, 112, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 73, 88, 82, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 118, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 88, 82, 66, 97, 115, 101, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 122, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 88, 82, 68, 117, 97, 108, 71, 114, 97, 98, 70, 114, 101, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 121, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 88, 82, 71, 101, 110, 101, 114, 97, 108, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 88, 82, 76, 101, 103, 97, 99, 121, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 124, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 88, 82, 83, 105, 110, 103, 108, 101, 71, 114, 97, 98, 70, 114, 101, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 92, 88, 82, 83, 111, 99, 107, 101, 116, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 46, 99, 115, 0, 0, 0, 26, 0, 0, 0, 103, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 69, 118, 101, 110, 116, 115, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 69, 118, 101, 110, 116, 115, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 77, 97, 110, 97, 103, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 77, 97, 110, 97, 103, 101, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 85, 112, 100, 97, 116, 101, 79, 114, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 104, 97, 114, 97, 99, 116, 101, 114, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 68, 114, 105, 118, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 104, 97, 114, 97, 99, 116, 101, 114, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 68, 114, 105, 118, 101, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 108, 105, 109, 98, 92, 67, 108, 105, 109, 98, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 102, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 108, 105, 109, 98, 92, 67, 108, 105, 109, 98, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 102, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 108, 105, 109, 98, 92, 67, 108, 105, 109, 98, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 108, 105, 109, 98, 92, 67, 108, 105, 109, 98, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 108, 105, 109, 98, 92, 67, 108, 105, 109, 98, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 108, 105, 109, 98, 92, 67, 108, 105, 109, 98, 84, 101, 108, 101, 112, 111, 114, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 106, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 115, 116, 114, 97, 105, 110, 101, 100, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 92, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 92, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 120, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 92, 68, 101, 118, 105, 99, 101, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 92, 68, 101, 118, 105, 99, 101, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 71, 114, 97, 98, 92, 71, 114, 97, 98, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 113, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 71, 114, 97, 98, 92, 84, 119, 111, 72, 97, 110, 100, 101, 100, 71, 114, 97, 98, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 101, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 83, 121, 115, 116, 101, 109, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 83, 121, 115, 116, 101, 109, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 83, 110, 97, 112, 84, 117, 114, 110, 92, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 83, 110, 97, 112, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 83, 110, 97, 112, 84, 117, 114, 110, 92, 68, 101, 118, 105, 99, 101, 66, 97, 115, 101, 100, 83, 110, 97, 112, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 112, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 83, 110, 97, 112, 84, 117, 114, 110, 92, 83, 110, 97, 112, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 66, 97, 115, 101, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 137, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 66, 97, 115, 101, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 130, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 70, 117, 114, 116, 104, 101, 115, 116, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 71, 97, 122, 101, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 129, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 73, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 86, 111, 108, 117, 109, 101, 65, 110, 99, 104, 111, 114, 70, 105, 108, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 116, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 114, 101, 97, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 127, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 77, 117, 108, 116, 105, 65, 110, 99, 104, 111, 114, 86, 111, 108, 117, 109, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 118, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 130, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 86, 111, 108, 117, 109, 101, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 135, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 86, 111, 108, 117, 109, 101, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 143, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 92, 84, 101, 108, 101, 112, 111, 114, 116, 86, 111, 108, 117, 109, 101, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 46, 99, 115, 0, 0, 0, 7, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 84, 117, 110, 110, 101, 108, 105, 110, 103, 86, 105, 103, 110, 101, 116, 116, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 66, 111, 100, 121, 85, 73, 92, 70, 111, 108, 108, 111, 119, 80, 114, 101, 115, 101, 116, 68, 97, 116, 117, 109, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 66, 111, 100, 121, 85, 73, 92, 72, 97, 110, 100, 77, 101, 110, 117, 46, 99, 115, 0, 0, 0, 5, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 67, 97, 110, 118, 97, 115, 79, 112, 116, 105, 109, 105, 122, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 67, 97, 110, 118, 97, 115, 84, 114, 97, 99, 107, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 76, 97, 122, 121, 70, 111, 108, 108, 111, 119, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 77, 111, 117, 115, 101, 77, 111, 100, 101, 108, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 78, 97, 118, 105, 103, 97, 116, 105, 111, 110, 77, 111, 100, 101, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 102, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 85, 73, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 67, 97, 99, 104, 101, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 85, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 84, 111, 117, 99, 104, 77, 111, 100, 101, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 97, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 69, 118, 101, 110, 116, 68, 97, 116, 97, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 71, 114, 97, 112, 104, 105, 99, 82, 97, 121, 99, 97, 115, 116, 101, 114, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 93, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 77, 111, 100, 101, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 77, 111, 100, 101, 108, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 3, 0, 0, 0, 104, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 80, 104, 121, 115, 105, 99, 115, 82, 97, 121, 99, 97, 115, 116, 101, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 88, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 46, 99, 115, 0, 0, 0, 4, 0, 0, 0, 95, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 46, 69, 118, 101, 110, 116, 115, 46, 99, 115, 0, 0, 0, 5, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 88, 82, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 101, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 73, 92, 88, 82, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 98, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 66, 117, 114, 115, 116, 71, 97, 122, 101, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 98, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 66, 117, 114, 115, 116, 77, 97, 116, 104, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 99, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 66, 117, 114, 115, 116, 80, 104, 121, 115, 105, 99, 115, 85, 116, 105, 108, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 105, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 115, 92, 78, 97, 116, 105, 118, 101, 67, 117, 114, 118, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 105, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 67, 111, 109, 112, 111, 110, 101, 110, 116, 76, 111, 99, 97, 116, 111, 114, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 101, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 67, 117, 114, 118, 101, 115, 92, 67, 117, 114, 118, 101, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 96, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 68, 105, 115, 112, 108, 97, 121, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 108, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 68, 105, 115, 112, 111, 115, 97, 98, 108, 101, 77, 97, 110, 97, 103, 101, 114, 83, 105, 110, 103, 108, 101, 116, 111, 110, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 105, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 69, 120, 112, 111, 115, 101, 100, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 109, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 70, 105, 108, 116, 101, 114, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 115, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 92, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 110, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 92, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 85, 116, 105, 108, 105, 116, 121, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 100, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 80, 111, 111, 108, 105, 110, 103, 92, 76, 105, 110, 107, 101, 100, 80, 111, 111, 108, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 102, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 80, 111, 111, 108, 105, 110, 103, 92, 80, 111, 111, 108, 101, 100, 79, 98, 106, 101, 99, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 93, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 80, 114, 111, 106, 101, 99, 116, 80, 97, 116, 104, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 98, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 107, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 82, 101, 113, 117, 105, 114, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 103, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 83, 109, 97, 108, 108, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 102, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 77, 111, 110, 105, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 103, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 114, 105, 103, 103, 101, 114, 67, 111, 110, 116, 97, 99, 116, 77, 111, 110, 105, 116, 111, 114, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 67, 111, 108, 111, 114, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 126, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 70, 108, 111, 97, 116, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 131, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 50, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 51, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 128, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 92, 86, 101, 99, 116, 111, 114, 52, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 155, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 83, 109, 97, 114, 116, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 115, 92, 83, 109, 97, 114, 116, 70, 111, 108, 108, 111, 119, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 152, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 83, 109, 97, 114, 116, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 115, 92, 83, 109, 97, 114, 116, 70, 111, 108, 108, 111, 119, 86, 101, 99, 116, 111, 114, 51, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 119, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 65, 115, 121, 110, 99, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 114, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 125, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 85, 116, 105, 108, 105, 116, 105, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 92, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 83, 121, 110, 99, 104, 114, 111, 110, 111, 117, 115, 66, 97, 115, 101, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 87, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 92, 71, 105, 122, 109, 111, 72, 101, 108, 112, 101, 114, 115, 46, 99, 115, 0, 0, 0, 2, 0, 0, 0, 87, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 92, 73, 110, 112, 117, 116, 72, 101, 108, 112, 101, 114, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 89, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 92, 83, 111, 114, 116, 105, 110, 103, 72, 101, 108, 112, 101, 114, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 80, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 92, 88, 82, 82, 105, 103, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 91, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 92, 88, 82, 82, 105, 103, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 90, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 72, 101, 108, 112, 85, 82, 76, 67, 111, 110, 115, 116, 97, 110, 116, 115, 46, 99, 115, 0, 0, 0, 1, 0, 0, 0, 101, 92, 76, 105, 98, 114, 97, 114, 121, 92, 80, 97, 99, 107, 97, 103, 101, 67, 97, 99, 104, 101, 92, 99, 111, 109, 46, 117, 110, 105, 116, 121, 46, 120, 114, 46, 105, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 116, 111, 111, 108, 107, 105, 116, 64, 50, 46, 54, 46, 53, 92, 82, 117, 110, 116, 105, 109, 101, 92, 88, 82, 72, 101, 108, 112, 85, 82, 76, 67, 111, 110, 115, 116, 97, 110, 116, 115, 46, 100, 101, 112, 114, 101, 99, 97, 116, 101, 100, 46, 99, 115 }, TypesData = new byte[28056] { 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 67, 111, 108, 111, 114, 84, 119, 101, 101, 110, 74, 111, 98, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 70, 108, 111, 97, 116, 84, 119, 101, 101, 110, 74, 111, 98, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 70, 108, 111, 97, 116, 50, 84, 119, 101, 101, 110, 74, 111, 98, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 70, 108, 111, 97, 116, 51, 84, 119, 101, 101, 110, 74, 111, 98, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 70, 108, 111, 97, 116, 52, 84, 119, 101, 101, 110, 74, 111, 98, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 73, 84, 119, 101, 101, 110, 74, 111, 98, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 74, 111, 98, 115, 124, 84, 119, 101, 101, 110, 74, 111, 98, 68, 97, 116, 97, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 65, 117, 100, 105, 111, 124, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 88, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 66, 97, 115, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 93, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 66, 97, 115, 101, 65, 115, 121, 110, 99, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 99, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 66, 97, 115, 101, 83, 121, 110, 99, 104, 114, 111, 110, 111, 117, 115, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 1, 0, 0, 0, 85, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 73, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 1, 0, 0, 0, 85, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 73, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 73, 65, 115, 121, 110, 99, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 96, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 124, 73, 83, 121, 110, 99, 104, 114, 111, 110, 111, 117, 115, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 95, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 95, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 70, 108, 111, 97, 116, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 100, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 105, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 69, 117, 108, 101, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 97, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 50, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 97, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 51, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 97, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 52, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 99, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 66, 108, 101, 110, 100, 83, 104, 97, 112, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 114, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 67, 111, 108, 111, 114, 71, 114, 97, 100, 105, 101, 110, 116, 76, 105, 110, 101, 82, 101, 110, 100, 101, 114, 101, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 110, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 67, 111, 108, 111, 114, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 131, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 46, 67, 111, 108, 111, 114, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 124, 83, 104, 97, 100, 101, 114, 80, 114, 111, 112, 101, 114, 116, 121, 76, 111, 111, 107, 117, 112, 0, 0, 0, 0, 110, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 70, 108, 111, 97, 116, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 112, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 86, 101, 99, 116, 111, 114, 50, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 112, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 86, 101, 99, 116, 111, 114, 51, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 112, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 86, 101, 99, 116, 111, 114, 52, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 115, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 97, 116, 105, 111, 110, 124, 85, 110, 105, 102, 111, 114, 109, 84, 114, 97, 110, 115, 102, 111, 114, 109, 83, 99, 97, 108, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 92, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 99, 101, 105, 118, 101, 114, 46, 85, 73, 124, 73, 109, 97, 103, 101, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 82, 101, 99, 101, 105, 118, 101, 114, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 77, 97, 116, 101, 114, 105, 97, 108, 72, 101, 108, 112, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 84, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 77, 97, 116, 101, 114, 105, 97, 108, 73, 110, 115, 116, 97, 110, 99, 101, 72, 101, 108, 112, 101, 114, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 82, 101, 110, 100, 101, 114, 105, 110, 103, 124, 77, 97, 116, 101, 114, 105, 97, 108, 80, 114, 111, 112, 101, 114, 116, 121, 66, 108, 111, 99, 107, 72, 101, 108, 112, 101, 114, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 0, 0, 0, 0, 82, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 83, 104, 111, 114, 116, 99, 117, 116, 115, 0, 0, 0, 0, 85, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 66, 97, 115, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 95, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 93, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 116, 97, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 88, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 65, 117, 100, 105, 111, 124, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 97, 0, 0, 0, 0, 84, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 65, 117, 100, 105, 111, 124, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 97, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 65, 117, 100, 105, 111, 124, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 65, 117, 100, 105, 111, 124, 65, 117, 100, 105, 111, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 124, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 97, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 124, 66, 97, 115, 101, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 102, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 94, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 67, 111, 108, 111, 114, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 70, 108, 111, 97, 116, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 102, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 70, 108, 111, 97, 116, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 94, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 70, 108, 111, 97, 116, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 50, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 104, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 50, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 96, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 50, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 51, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 104, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 51, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 96, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 51, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 52, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 0, 0, 0, 0, 104, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 52, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 96, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 84, 104, 101, 109, 101, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 52, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 84, 104, 101, 109, 101, 68, 97, 116, 117, 109, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 65, 110, 110, 111, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 66, 97, 115, 101, 71, 101, 115, 116, 117, 114, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 80, 108, 97, 99, 101, 109, 101, 110, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 82, 111, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 83, 99, 97, 108, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 83, 101, 108, 101, 99, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 84, 114, 97, 110, 115, 108, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 82, 124, 65, 82, 71, 101, 115, 116, 117, 114, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 67, 97, 114, 100, 105, 110, 97, 108, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 124, 86, 101, 99, 116, 111, 114, 51, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 124, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 124, 73, 110, 116, 101, 103, 101, 114, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 0, 0, 0, 0, 76, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 124, 66, 117, 116, 116, 111, 110, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 124, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 0, 0, 0, 0, 98, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 67, 111, 109, 112, 111, 115, 105, 116, 101, 115, 46, 70, 97, 108, 108, 98, 97, 99, 107, 67, 111, 109, 112, 111, 115, 105, 116, 101, 124, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 67, 111, 109, 112, 111, 115, 105, 116, 101, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 73, 110, 112, 117, 116, 65, 99, 116, 105, 111, 110, 77, 97, 110, 97, 103, 101, 114, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 73, 110, 112, 117, 116, 65, 99, 116, 105, 111, 110, 80, 114, 111, 112, 101, 114, 116, 121, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 115, 124, 83, 101, 99, 116, 111, 114, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 46, 72, 97, 110, 100, 115, 124, 72, 97, 110, 100, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 67, 97, 112, 116, 117, 114, 101, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 46, 72, 97, 110, 100, 115, 124, 72, 97, 110, 100, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 78, 97, 109, 101, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 46, 72, 97, 110, 100, 115, 124, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 97, 110, 100, 83, 116, 97, 116, 101, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 83, 105, 109, 117, 108, 97, 116, 101, 100, 73, 110, 112, 117, 116, 76, 97, 121, 111, 117, 116, 76, 111, 97, 100, 101, 114, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 0, 0, 0, 0, 94, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 46, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 124, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 97, 110, 100, 69, 120, 112, 114, 101, 115, 115, 105, 111, 110, 0, 0, 0, 0, 78, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 84, 97, 114, 103, 101, 116, 101, 100, 68, 101, 118, 105, 99, 101, 115, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 76, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 76, 111, 97, 100, 101, 114, 0, 0, 0, 0, 78, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 68, 101, 118, 105, 99, 101, 83, 105, 109, 117, 108, 97, 116, 111, 114, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 74, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 83, 116, 97, 116, 101, 0, 0, 0, 0, 67, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 77, 68, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 83, 105, 109, 117, 108, 97, 116, 105, 111, 110, 124, 88, 82, 83, 105, 109, 117, 108, 97, 116, 101, 100, 72, 77, 68, 83, 116, 97, 116, 101, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 88, 82, 72, 97, 110, 100, 83, 107, 101, 108, 101, 116, 111, 110, 80, 111, 107, 101, 68, 105, 115, 112, 108, 97, 99, 101, 114, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 88, 82, 73, 110, 112, 117, 116, 77, 111, 100, 97, 108, 105, 116, 121, 77, 97, 110, 97, 103, 101, 114, 0, 0, 0, 0, 85, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 88, 82, 73, 110, 112, 117, 116, 77, 111, 100, 97, 108, 105, 116, 121, 77, 97, 110, 97, 103, 101, 114, 124, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 77, 111, 110, 105, 116, 111, 114, 0, 0, 0, 0, 83, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 88, 82, 73, 110, 112, 117, 116, 77, 111, 100, 97, 108, 105, 116, 121, 77, 97, 110, 97, 103, 101, 114, 124, 73, 110, 112, 117, 116, 68, 101, 118, 105, 99, 101, 77, 111, 110, 105, 116, 111, 114, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 84, 114, 97, 99, 107, 105, 110, 103, 83, 116, 97, 116, 117, 115, 0, 0, 0, 0, 67, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 88, 82, 73, 110, 112, 117, 116, 84, 114, 97, 99, 107, 105, 110, 103, 65, 103, 103, 114, 101, 103, 97, 116, 111, 114, 0, 0, 0, 0, 83, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 46, 88, 82, 73, 110, 112, 117, 116, 84, 114, 97, 99, 107, 105, 110, 103, 65, 103, 103, 114, 101, 103, 97, 116, 111, 114, 124, 67, 104, 97, 114, 97, 99, 116, 101, 114, 105, 115, 116, 105, 99, 115, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 115, 124, 88, 82, 84, 114, 97, 110, 115, 102, 111, 114, 109, 83, 116, 97, 98, 105, 108, 105, 122, 101, 114, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 124, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 84, 114, 97, 99, 107, 101, 114, 0, 0, 0, 0, 74, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 124, 73, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 83, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 124, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 80, 114, 111, 118, 105, 100, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 73, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 116, 116, 97, 99, 104, 109, 101, 110, 116, 124, 73, 65, 116, 116, 97, 99, 104, 80, 111, 105, 110, 116, 86, 101, 108, 111, 99, 105, 116, 121, 84, 114, 97, 99, 107, 101, 114, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 97, 110, 70, 111, 99, 117, 115, 77, 117, 108, 116, 105, 112, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 97, 110, 83, 101, 108, 101, 99, 116, 77, 117, 108, 116, 105, 112, 108, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 78, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 84, 97, 114, 103, 101, 116, 69, 118, 97, 108, 117, 97, 116, 111, 114, 69, 110, 97, 98, 108, 101, 100, 65, 116, 116, 114, 105, 98, 117, 116, 101, 1, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 1, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 83, 99, 97, 108, 101, 86, 97, 108, 117, 101, 80, 114, 111, 118, 105, 100, 101, 114, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 82, 101, 99, 111, 114, 100, 101, 114, 1, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 82, 101, 99, 111, 114, 100, 105, 110, 103, 1, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 82, 101, 99, 111, 114, 100, 105, 110, 103, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 97, 116, 101, 1, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 83, 116, 97, 116, 101, 1, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 83, 116, 97, 116, 101, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 97, 116, 101, 1, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 99, 114, 101, 101, 110, 83, 112, 97, 99, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 1, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 99, 114, 101, 101, 110, 83, 112, 97, 99, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 73, 88, 82, 72, 111, 118, 101, 114, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 72, 111, 118, 101, 114, 70, 105, 108, 116, 101, 114, 68, 101, 108, 101, 103, 97, 116, 101, 0, 0, 0, 0, 73, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 70, 105, 108, 116, 101, 114, 68, 101, 108, 101, 103, 97, 116, 101, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 70, 105, 108, 116, 101, 114, 76, 105, 115, 116, 0, 0, 0, 0, 85, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 73, 77, 117, 108, 116, 105, 80, 111, 107, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 65, 102, 102, 111, 114, 100, 97, 110, 99, 101, 83, 121, 115, 116, 101, 109, 46, 83, 116, 97, 116, 101, 124, 73, 80, 111, 107, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 73, 88, 82, 80, 111, 107, 101, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 80, 111, 107, 101, 83, 116, 97, 116, 101, 68, 97, 116, 97, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 80, 111, 107, 101, 84, 104, 114, 101, 115, 104, 111, 108, 100, 68, 97, 116, 97, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 80, 111, 107, 101, 84, 104, 114, 101, 115, 104, 111, 108, 100, 68, 97, 116, 117, 109, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 80, 111, 107, 101, 84, 104, 114, 101, 115, 104, 111, 108, 100, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 80, 111, 107, 101, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 80, 111, 107, 101, 76, 111, 103, 105, 99, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 73, 88, 82, 83, 101, 108, 101, 99, 116, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 67, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 83, 101, 108, 101, 99, 116, 70, 105, 108, 116, 101, 114, 68, 101, 108, 101, 103, 97, 116, 101, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 73, 88, 82, 84, 97, 114, 103, 101, 116, 69, 118, 97, 108, 117, 97, 116, 111, 114, 76, 105, 110, 107, 97, 98, 108, 101, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 65, 110, 103, 108, 101, 71, 97, 122, 101, 69, 118, 97, 108, 117, 97, 116, 111, 114, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 68, 105, 115, 116, 97, 110, 99, 101, 69, 118, 97, 108, 117, 97, 116, 111, 114, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 76, 97, 115, 116, 83, 101, 108, 101, 99, 116, 101, 100, 69, 118, 97, 108, 117, 97, 116, 111, 114, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 84, 97, 114, 103, 101, 116, 69, 118, 97, 108, 117, 97, 116, 111, 114, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 73, 88, 82, 84, 97, 114, 103, 101, 116, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 66, 97, 115, 101, 84, 97, 114, 103, 101, 116, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 70, 105, 108, 116, 101, 114, 105, 110, 103, 124, 88, 82, 84, 97, 114, 103, 101, 116, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 68, 105, 115, 116, 97, 110, 99, 101, 73, 110, 102, 111, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 65, 99, 116, 105, 118, 97, 116, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 70, 111, 99, 117, 115, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 70, 111, 99, 117, 115, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 83, 101, 108, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 101, 108, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 67, 117, 115, 116, 111, 109, 82, 101, 116, 105, 99, 108, 101, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 84, 105, 110, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 86, 105, 115, 117, 97, 108, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 84, 105, 110, 116, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 86, 105, 115, 117, 97, 108, 124, 83, 104, 97, 100, 101, 114, 80, 114, 111, 112, 101, 114, 116, 121, 76, 111, 111, 107, 117, 112, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 71, 114, 97, 98, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 71, 114, 97, 98, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 83, 110, 97, 112, 86, 111, 108, 117, 109, 101, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 105, 109, 112, 108, 101, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 65, 99, 116, 105, 118, 97, 116, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 71, 114, 111, 117, 112, 77, 101, 109, 98, 101, 114, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 71, 114, 111, 117, 112, 77, 101, 109, 98, 101, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 79, 118, 101, 114, 114, 105, 100, 101, 71, 114, 111, 117, 112, 0, 0, 0, 0, 67, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 83, 116, 114, 101, 110, 103, 116, 104, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 82, 97, 121, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 83, 101, 108, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 101, 108, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 69, 120, 116, 101, 110, 115, 105, 111, 110, 115, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 84, 97, 114, 103, 101, 116, 80, 114, 105, 111, 114, 105, 116, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 67, 117, 115, 116, 111, 109, 82, 101, 116, 105, 99, 108, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 82, 101, 116, 105, 99, 108, 101, 68, 105, 114, 101, 99, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 76, 105, 110, 101, 82, 101, 110, 100, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 65, 100, 118, 97, 110, 99, 101, 100, 76, 105, 110, 101, 82, 101, 110, 100, 101, 114, 97, 98, 108, 101, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 76, 105, 110, 101, 86, 105, 115, 117, 97, 108, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 82, 101, 116, 105, 99, 108, 101, 86, 105, 115, 117, 97, 108, 1, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 68, 105, 114, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 68, 105, 114, 101, 99, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 71, 97, 122, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 124, 71, 114, 111, 117, 112, 78, 97, 109, 101, 115, 0, 0, 0, 0, 81, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 124, 71, 114, 111, 117, 112, 77, 101, 109, 98, 101, 114, 65, 110, 100, 79, 118, 101, 114, 114, 105, 100, 101, 115, 80, 97, 105, 114, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 80, 111, 107, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 80, 111, 107, 101, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 124, 80, 111, 107, 101, 67, 111, 108, 108, 105, 115, 105, 111, 110, 1, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 82, 97, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 82, 97, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 124, 82, 97, 121, 99, 97, 115, 116, 72, 105, 116, 67, 111, 109, 112, 97, 114, 101, 114, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 82, 97, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 124, 83, 97, 109, 112, 108, 101, 80, 111, 105, 110, 116, 1, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 82, 97, 121, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 111, 99, 107, 101, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 74, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 83, 111, 99, 107, 101, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 124, 83, 104, 97, 100, 101, 114, 80, 114, 111, 112, 101, 114, 116, 121, 76, 111, 111, 107, 117, 112, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 83, 111, 99, 107, 101, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 76, 97, 121, 101, 114, 77, 97, 115, 107, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 76, 97, 121, 101, 114, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 65, 105, 109, 65, 115, 115, 105, 115, 116, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 88, 82, 79, 118, 101, 114, 114, 105, 100, 101, 115, 71, 97, 122, 101, 65, 117, 116, 111, 83, 101, 108, 101, 99, 116, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 71, 97, 122, 101, 65, 115, 115, 105, 115, 116, 97, 110, 99, 101, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 88, 82, 71, 97, 122, 101, 65, 115, 115, 105, 115, 116, 97, 110, 99, 101, 124, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 68, 97, 116, 97, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 68, 114, 111, 112, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 73, 88, 82, 68, 114, 111, 112, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 73, 88, 82, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 88, 82, 66, 97, 115, 101, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 73, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 88, 82, 68, 117, 97, 108, 71, 114, 97, 98, 70, 114, 101, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 88, 82, 71, 101, 110, 101, 114, 97, 108, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 88, 82, 76, 101, 103, 97, 99, 121, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 75, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 88, 82, 83, 105, 110, 103, 108, 101, 71, 114, 97, 98, 70, 114, 101, 101, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 115, 124, 88, 82, 83, 111, 99, 107, 101, 116, 71, 114, 97, 98, 84, 114, 97, 110, 115, 102, 111, 114, 109, 101, 114, 1, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 101, 108, 101, 112, 111, 114, 116, 105, 110, 103, 69, 118, 101, 110, 116, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 101, 108, 101, 112, 111, 114, 116, 105, 110, 103, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 72, 111, 118, 101, 114, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 72, 111, 118, 101, 114, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 72, 111, 118, 101, 114, 69, 120, 105, 116, 69, 118, 101, 110, 116, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 72, 111, 118, 101, 114, 69, 120, 105, 116, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 83, 101, 108, 101, 99, 116, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 83, 101, 108, 101, 99, 116, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 83, 101, 108, 101, 99, 116, 69, 120, 105, 116, 69, 118, 101, 110, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 83, 101, 108, 101, 99, 116, 69, 120, 105, 116, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 70, 111, 99, 117, 115, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 70, 111, 99, 117, 115, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 70, 111, 99, 117, 115, 69, 120, 105, 116, 69, 118, 101, 110, 116, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 70, 111, 99, 117, 115, 69, 120, 105, 116, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 118, 97, 116, 101, 69, 118, 101, 110, 116, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 118, 97, 116, 101, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 68, 101, 97, 99, 116, 105, 118, 97, 116, 101, 69, 118, 101, 110, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 68, 101, 97, 99, 116, 105, 118, 97, 116, 101, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 66, 97, 115, 101, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 72, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 71, 114, 111, 117, 112, 85, 110, 114, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 85, 110, 114, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 85, 110, 114, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 69, 118, 101, 110, 116, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 69, 118, 101, 110, 116, 1, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 66, 97, 115, 101, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 85, 110, 114, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 85, 110, 114, 101, 103, 105, 115, 116, 101, 114, 101, 100, 69, 118, 101, 110, 116, 65, 114, 103, 115, 1, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 77, 97, 110, 97, 103, 101, 114, 1, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 77, 97, 110, 97, 103, 101, 114, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 85, 112, 100, 97, 116, 101, 79, 114, 100, 101, 114, 1, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 104, 97, 114, 97, 99, 116, 101, 114, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 68, 114, 105, 118, 101, 114, 1, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 104, 97, 114, 97, 99, 116, 101, 114, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 68, 114, 105, 118, 101, 114, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 108, 105, 109, 98, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 108, 105, 109, 98, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 108, 105, 109, 98, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 108, 105, 109, 98, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 108, 105, 109, 98, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 78, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 67, 108, 105, 109, 98, 105, 110, 103, 124, 67, 108, 105, 109, 98, 84, 101, 108, 101, 112, 111, 114, 116, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 111, 110, 115, 116, 114, 97, 105, 110, 101, 100, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 68, 101, 118, 105, 99, 101, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 68, 101, 118, 105, 99, 101, 66, 97, 115, 101, 100, 67, 111, 110, 116, 105, 110, 117, 111, 117, 115, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 71, 114, 97, 98, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 119, 111, 72, 97, 110, 100, 101, 100, 71, 114, 97, 98, 77, 111, 118, 101, 80, 114, 111, 118, 105, 100, 101, 114, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 83, 121, 115, 116, 101, 109, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 83, 121, 115, 116, 101, 109, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 65, 99, 116, 105, 111, 110, 66, 97, 115, 101, 100, 83, 110, 97, 112, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 68, 101, 118, 105, 99, 101, 66, 97, 115, 101, 100, 83, 110, 97, 112, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 83, 110, 97, 112, 84, 117, 114, 110, 80, 114, 111, 118, 105, 100, 101, 114, 66, 97, 115, 101, 0, 0, 0, 0, 50, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 101, 108, 101, 112, 111, 114, 116, 82, 101, 113, 117, 101, 115, 116, 1, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 66, 97, 115, 101, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 1, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 66, 97, 115, 101, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 0, 0, 0, 0, 93, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 70, 117, 114, 116, 104, 101, 115, 116, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 71, 97, 122, 101, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 92, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 73, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 86, 111, 108, 117, 109, 101, 65, 110, 99, 104, 111, 114, 70, 105, 108, 116, 101, 114, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 110, 99, 104, 111, 114, 0, 0, 0, 0, 52, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 65, 114, 101, 97, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 77, 117, 108, 116, 105, 65, 110, 99, 104, 111, 114, 86, 111, 108, 117, 109, 101, 0, 0, 0, 0, 120, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 77, 117, 108, 116, 105, 65, 110, 99, 104, 111, 114, 86, 111, 108, 117, 109, 101, 124, 68, 101, 102, 97, 117, 108, 116, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 70, 105, 108, 116, 101, 114, 67, 97, 99, 104, 101, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 93, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 84, 101, 108, 101, 112, 111, 114, 116, 86, 111, 108, 117, 109, 101, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 98, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 84, 101, 108, 101, 112, 111, 114, 116, 86, 111, 108, 117, 109, 101, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 0, 0, 0, 0, 106, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 46, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 124, 84, 101, 108, 101, 112, 111, 114, 116, 86, 111, 108, 117, 109, 101, 68, 101, 115, 116, 105, 110, 97, 116, 105, 111, 110, 83, 101, 116, 116, 105, 110, 103, 115, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 86, 105, 103, 110, 101, 116, 116, 101, 80, 97, 114, 97, 109, 101, 116, 101, 114, 115, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 86, 105, 103, 110, 101, 116, 116, 101, 80, 97, 114, 97, 109, 101, 116, 101, 114, 115, 124, 68, 101, 102, 97, 117, 108, 116, 115, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 84, 117, 110, 110, 101, 108, 105, 110, 103, 86, 105, 103, 110, 101, 116, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 86, 105, 103, 110, 101, 116, 116, 101, 80, 114, 111, 118, 105, 100, 101, 114, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 84, 117, 110, 110, 101, 108, 105, 110, 103, 86, 105, 103, 110, 101, 116, 116, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 0, 0, 0, 0, 83, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 117, 110, 110, 101, 108, 105, 110, 103, 86, 105, 103, 110, 101, 116, 116, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 124, 83, 104, 97, 100, 101, 114, 80, 114, 111, 112, 101, 114, 116, 121, 76, 111, 111, 107, 117, 112, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 84, 117, 110, 110, 101, 108, 105, 110, 103, 86, 105, 103, 110, 101, 116, 116, 101, 67, 111, 110, 116, 114, 111, 108, 108, 101, 114, 124, 80, 114, 111, 118, 105, 100, 101, 114, 82, 101, 99, 111, 114, 100, 0, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 66, 111, 100, 121, 85, 73, 124, 70, 111, 108, 108, 111, 119, 80, 114, 101, 115, 101, 116, 0, 0, 0, 0, 70, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 66, 111, 100, 121, 85, 73, 124, 70, 111, 108, 108, 111, 119, 80, 114, 101, 115, 101, 116, 68, 97, 116, 117, 109, 80, 114, 111, 112, 101, 114, 116, 121, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 66, 111, 100, 121, 85, 73, 124, 70, 111, 108, 108, 111, 119, 80, 114, 101, 115, 101, 116, 68, 97, 116, 117, 109, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 66, 111, 100, 121, 85, 73, 124, 72, 97, 110, 100, 77, 101, 110, 117, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 67, 97, 110, 118, 97, 115, 79, 112, 116, 105, 109, 105, 122, 101, 114, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 67, 97, 110, 118, 97, 115, 79, 112, 116, 105, 109, 105, 122, 101, 114, 124, 67, 97, 110, 118, 97, 115, 83, 116, 97, 116, 101, 0, 0, 0, 0, 80, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 67, 97, 110, 118, 97, 115, 79, 112, 116, 105, 109, 105, 122, 101, 114, 43, 67, 97, 110, 118, 97, 115, 83, 116, 97, 116, 101, 124, 67, 97, 110, 118, 97, 115, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 86, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 67, 97, 110, 118, 97, 115, 79, 112, 116, 105, 109, 105, 122, 101, 114, 43, 67, 97, 110, 118, 97, 115, 83, 116, 97, 116, 101, 124, 67, 97, 110, 118, 97, 115, 83, 99, 97, 108, 101, 114, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 67, 97, 110, 118, 97, 115, 79, 112, 116, 105, 109, 105, 122, 101, 114, 43, 67, 97, 110, 118, 97, 115, 83, 116, 97, 116, 101, 124, 71, 114, 97, 112, 104, 105, 99, 82, 97, 121, 99, 97, 115, 116, 101, 114, 83, 101, 116, 116, 105, 110, 103, 115, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 67, 97, 110, 118, 97, 115, 84, 114, 97, 99, 107, 101, 114, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 76, 97, 122, 121, 70, 111, 108, 108, 111, 119, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 77, 111, 117, 115, 101, 66, 117, 116, 116, 111, 110, 77, 111, 100, 101, 108, 1, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 124, 73, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 68, 97, 116, 97, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 77, 111, 117, 115, 101, 77, 111, 100, 101, 108, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 124, 73, 110, 116, 101, 114, 110, 97, 108, 68, 97, 116, 97, 0, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 78, 97, 118, 105, 103, 97, 116, 105, 111, 110, 77, 111, 100, 101, 108, 1, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 124, 73, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 68, 97, 116, 97, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 85, 73, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 67, 97, 99, 104, 101, 0, 0, 0, 0, 48, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 84, 111, 117, 99, 104, 77, 111, 100, 101, 108, 1, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 124, 73, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 68, 97, 116, 97, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 69, 118, 101, 110, 116, 68, 97, 116, 97, 0, 0, 0, 0, 67, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 71, 114, 97, 112, 104, 105, 99, 82, 97, 121, 99, 97, 115, 116, 101, 114, 0, 0, 0, 0, 82, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 71, 114, 97, 112, 104, 105, 99, 82, 97, 121, 99, 97, 115, 116, 101, 114, 124, 82, 97, 121, 99, 97, 115, 116, 72, 105, 116, 68, 97, 116, 97, 0, 0, 0, 0, 86, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 71, 114, 97, 112, 104, 105, 99, 82, 97, 121, 99, 97, 115, 116, 101, 114, 124, 82, 97, 121, 99, 97, 115, 116, 72, 105, 116, 67, 111, 109, 112, 97, 114, 101, 114, 1, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 77, 111, 100, 101, 108, 1, 0, 0, 0, 57, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 124, 73, 109, 112, 108, 101, 109, 101, 110, 116, 97, 116, 105, 111, 110, 68, 97, 116, 97, 1, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 77, 111, 100, 101, 108, 0, 0, 0, 0, 67, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 80, 104, 121, 115, 105, 99, 115, 82, 97, 121, 99, 97, 115, 116, 101, 114, 0, 0, 0, 0, 90, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 80, 104, 121, 115, 105, 99, 115, 82, 97, 121, 99, 97, 115, 116, 101, 114, 124, 82, 97, 121, 99, 97, 115, 116, 72, 105, 116, 65, 114, 114, 97, 121, 83, 101, 103, 109, 101, 110, 116, 0, 0, 0, 0, 86, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 84, 114, 97, 99, 107, 101, 100, 68, 101, 118, 105, 99, 101, 80, 104, 121, 115, 105, 99, 115, 82, 97, 121, 99, 97, 115, 116, 101, 114, 124, 82, 97, 121, 99, 97, 115, 116, 72, 105, 116, 67, 111, 109, 112, 97, 114, 101, 114, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 1, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 0, 0, 0, 0, 55, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 85, 73, 72, 111, 118, 101, 114, 69, 110, 116, 101, 114, 69, 118, 101, 110, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 85, 73, 72, 111, 118, 101, 114, 69, 120, 105, 116, 69, 118, 101, 110, 116, 0, 0, 0, 0, 54, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 85, 73, 72, 111, 118, 101, 114, 69, 118, 101, 110, 116, 65, 114, 103, 115, 0, 0, 0, 0, 51, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 73, 85, 73, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 73, 85, 73, 72, 111, 118, 101, 114, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 88, 82, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 0, 0, 0, 0, 74, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 88, 82, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 124, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 73, 110, 116, 101, 114, 97, 99, 116, 111, 114, 0, 0, 0, 0, 69, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 46, 88, 82, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 124, 82, 101, 103, 105, 115, 116, 101, 114, 101, 100, 84, 111, 117, 99, 104, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 73, 124, 88, 82, 85, 73, 73, 110, 112, 117, 116, 77, 111, 100, 117, 108, 101, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 66, 117, 114, 115, 116, 71, 97, 122, 101, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 66, 117, 114, 115, 116, 77, 97, 116, 104, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 66, 117, 114, 115, 116, 80, 104, 121, 115, 105, 99, 115, 85, 116, 105, 108, 115, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 67, 111, 108, 108, 101, 99, 116, 105, 111, 110, 115, 124, 78, 97, 116, 105, 118, 101, 67, 117, 114, 118, 101, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 67, 111, 109, 112, 111, 110, 101, 110, 116, 76, 111, 99, 97, 116, 111, 114, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 64, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 67, 117, 114, 118, 101, 115, 124, 67, 117, 114, 118, 101, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 59, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 68, 105, 115, 112, 108, 97, 121, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 71, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 68, 105, 115, 112, 111, 115, 97, 98, 108, 101, 77, 97, 110, 97, 103, 101, 114, 83, 105, 110, 103, 108, 101, 116, 111, 110, 0, 0, 0, 0, 68, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 69, 120, 112, 111, 115, 101, 100, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 0, 0, 0, 0, 60, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 88, 82, 70, 105, 108, 116, 101, 114, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 93, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 88, 82, 73, 110, 116, 101, 114, 97, 99, 116, 97, 98, 108, 101, 85, 116, 105, 108, 105, 116, 121, 124, 65, 108, 108, 111, 119, 84, 114, 105, 103, 103, 101, 114, 67, 111, 108, 108, 105, 100, 101, 114, 115, 83, 99, 111, 112, 101, 0, 0, 0, 0, 62, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 76, 111, 99, 111, 109, 111, 116, 105, 111, 110, 85, 116, 105, 108, 105, 116, 121, 0, 0, 0, 0, 63, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 80, 111, 111, 108, 105, 110, 103, 124, 76, 105, 110, 107, 101, 100, 80, 111, 111, 108, 0, 0, 0, 0, 78, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 80, 111, 111, 108, 105, 110, 103, 46, 76, 105, 110, 107, 101, 100, 80, 111, 111, 108, 124, 76, 105, 110, 107, 101, 100, 80, 111, 111, 108, 73, 116, 101, 109, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 80, 111, 111, 108, 105, 110, 103, 124, 80, 111, 111, 108, 101, 100, 79, 98, 106, 101, 99, 116, 0, 0, 0, 0, 56, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 80, 114, 111, 106, 101, 99, 116, 80, 97, 116, 104, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 66, 97, 115, 101, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 0, 0, 0, 0, 61, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 0, 0, 0, 0, 79, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 73, 110, 116, 101, 114, 110, 97, 108, 124, 82, 101, 113, 117, 105, 114, 101, 73, 110, 116, 101, 114, 102, 97, 99, 101, 65, 116, 116, 114, 105, 98, 117, 116, 101, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 83, 109, 97, 108, 108, 82, 101, 103, 105, 115, 116, 114, 97, 116, 105, 111, 110, 76, 105, 115, 116, 0, 0, 0, 0, 65, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 84, 101, 108, 101, 112, 111, 114, 116, 97, 116, 105, 111, 110, 77, 111, 110, 105, 116, 111, 114, 0, 0, 0, 0, 66, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 124, 84, 114, 105, 103, 103, 101, 114, 67, 111, 110, 116, 97, 99, 116, 77, 111, 110, 105, 116, 111, 114, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 67, 111, 108, 111, 114, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 89, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 70, 108, 111, 97, 116, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 94, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 50, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 51, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 91, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 80, 114, 105, 109, 105, 116, 105, 118, 101, 115, 124, 86, 101, 99, 116, 111, 114, 52, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 118, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 83, 109, 97, 114, 116, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 115, 124, 83, 109, 97, 114, 116, 70, 111, 108, 108, 111, 119, 81, 117, 97, 116, 101, 114, 110, 105, 111, 110, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 115, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 46, 83, 109, 97, 114, 116, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 115, 124, 83, 109, 97, 114, 116, 70, 111, 108, 108, 111, 119, 86, 101, 99, 116, 111, 114, 51, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 0, 0, 0, 0, 82, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 124, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 65, 115, 121, 110, 99, 66, 97, 115, 101, 0, 0, 0, 0, 77, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 124, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 66, 97, 115, 101, 0, 0, 0, 0, 88, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 85, 116, 105, 108, 105, 116, 105, 101, 115, 46, 84, 119, 101, 101, 110, 97, 98, 108, 101, 115, 124, 84, 119, 101, 101, 110, 97, 98, 108, 101, 86, 97, 114, 105, 97, 98, 108, 101, 83, 121, 110, 99, 104, 114, 111, 110, 111, 117, 115, 66, 97, 115, 101, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 71, 105, 122, 109, 111, 72, 101, 108, 112, 101, 114, 115, 0, 0, 0, 0, 47, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 73, 110, 112, 117, 116, 72, 101, 108, 112, 101, 114, 115, 0, 0, 0, 0, 58, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 46, 73, 110, 112, 117, 116, 72, 101, 108, 112, 101, 114, 115, 124, 66, 117, 116, 116, 111, 110, 73, 110, 102, 111, 0, 0, 0, 0, 49, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 83, 111, 114, 116, 105, 110, 103, 72, 101, 108, 112, 101, 114, 115, 1, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 82, 105, 103, 1, 0, 0, 0, 40, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 82, 105, 103, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 72, 101, 108, 112, 85, 82, 76, 67, 111, 110, 115, 116, 97, 110, 116, 115, 1, 0, 0, 0, 53, 85, 110, 105, 116, 121, 69, 110, 103, 105, 110, 101, 46, 88, 82, 46, 73, 110, 116, 101, 114, 97, 99, 116, 105, 111, 110, 46, 84, 111, 111, 108, 107, 105, 116, 124, 88, 82, 72, 101, 108, 112, 85, 82, 76, 67, 111, 110, 115, 116, 97, 110, 116, 115 }, TotalFiles = 263, TotalTypes = 383, IsEditorOnly = false }; } } namespace UnityEngine.XR.Interaction.Toolkit { [AttributeUsage(AttributeTargets.Class)] public sealed class CanFocusMultipleAttribute : Attribute { public bool allowMultiple { get; } public CanFocusMultipleAttribute(bool allowMultiple = true) { this.allowMultiple = allowMultiple; } } [AttributeUsage(AttributeTargets.Class)] public sealed class CanSelectMultipleAttribute : Attribute { public bool allowMultiple { get; } public CanSelectMultipleAttribute(bool allowMultiple = true) { this.allowMultiple = allowMultiple; } } [AddComponentMenu("XR/XR Controller (Action-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ActionBasedController.html")] public class ActionBasedController : XRBaseController { [SerializeField] private InputActionProperty m_PositionAction = new InputActionProperty(new InputAction("Position", (InputActionType)0, (string)null, (string)null, (string)null, "Vector3")); [SerializeField] private InputActionProperty m_RotationAction = new InputActionProperty(new InputAction("Rotation", (InputActionType)0, (string)null, (string)null, (string)null, "Quaternion")); [SerializeField] private InputActionProperty m_IsTrackedAction = new InputActionProperty(new InputAction("Is Tracked", (InputActionType)1, (string)null, (string)null, (string)null, (string)null) { wantsInitialStateCheck = true }); [SerializeField] private InputActionProperty m_TrackingStateAction = new InputActionProperty(new InputAction("Tracking State", (InputActionType)0, (string)null, (string)null, (string)null, "Integer")); [SerializeField] private InputActionProperty m_SelectAction = new InputActionProperty(new InputAction("Select", (InputActionType)1, (string)null, (string)null, (string)null, (string)null)); [SerializeField] private InputActionProperty m_SelectActionValue = new InputActionProperty(new InputAction("Select Value", (InputActionType)0, (string)null, (string)null, (string)null, "Axis")); [SerializeField] private InputActionProperty m_ActivateAction = new InputActionProperty(new InputAction("Activate", (InputActionType)1, (string)null, (string)null, (string)null, (string)null)); [SerializeField] private InputActionProperty m_ActivateActionValue = new InputActionProperty(new InputAction("Activate Value", (InputActionType)0, (string)null, (string)null, (string)null, "Axis")); [SerializeField] private InputActionProperty m_UIPressAction = new InputActionProperty(new InputAction("UI Press", (InputActionType)1, (string)null, (string)null, (string)null, (string)null)); [SerializeField] private InputActionProperty m_UIPressActionValue = new InputActionProperty(new InputAction("UI Press Value", (InputActionType)0, (string)null, (string)null, (string)null, "Axis")); [SerializeField] private InputActionProperty m_UIScrollAction = new InputActionProperty(new InputAction("UI Scroll", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] private InputActionProperty m_HapticDeviceAction = new InputActionProperty(new InputAction("Haptic Device", (InputActionType)2, (string)null, (string)null, (string)null, (string)null)); [SerializeField] private InputActionProperty m_RotateAnchorAction = new InputActionProperty(new InputAction("Rotate Anchor", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] private InputActionProperty m_DirectionalAnchorRotationAction = new InputActionProperty(new InputAction("Directional Anchor Rotation", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] private InputActionProperty m_TranslateAnchorAction = new InputActionProperty(new InputAction("Translate Anchor", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] private InputActionProperty m_ScaleToggleAction = new InputActionProperty(new InputAction("Scale Toggle", (InputActionType)1, (string)null, (string)null, (string)null, (string)null)); [SerializeField] private InputActionProperty m_ScaleDeltaAction = new InputActionProperty(new InputAction("Scale Delta", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); private bool m_HasCheckedDisabledTrackingInputReferenceActions; private bool m_HasCheckedDisabledInputReferenceActions; [SerializeField] private float m_ButtonPressPoint = 0.5f; public InputActionProperty positionAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PositionAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_PositionAction, value); } } public InputActionProperty rotationAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RotationAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_RotationAction, value); } } public InputActionProperty isTrackedAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_IsTrackedAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_IsTrackedAction, value); } } public InputActionProperty trackingStateAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TrackingStateAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_TrackingStateAction, value); } } public InputActionProperty selectAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_SelectAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_SelectAction, value); } } public InputActionProperty selectActionValue { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_SelectActionValue; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_SelectActionValue, value); } } public InputActionProperty activateAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_ActivateAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_ActivateAction, value); } } public InputActionProperty activateActionValue { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_ActivateActionValue; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_ActivateActionValue, value); } } public InputActionProperty uiPressAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_UIPressAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_UIPressAction, value); } } public InputActionProperty uiPressActionValue { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_UIPressActionValue; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_UIPressActionValue, value); } } public InputActionProperty uiScrollAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_UIScrollAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_UIScrollAction, value); } } public InputActionProperty hapticDeviceAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_HapticDeviceAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_HapticDeviceAction, value); } } public InputActionProperty rotateAnchorAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RotateAnchorAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_RotateAnchorAction, value); } } public InputActionProperty directionalAnchorRotationAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_DirectionalAnchorRotationAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_DirectionalAnchorRotationAction, value); } } public InputActionProperty translateAnchorAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TranslateAnchorAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_TranslateAnchorAction, value); } } public InputActionProperty scaleToggleAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_ScaleToggleAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_ScaleToggleAction, value); } } public InputActionProperty scaleDeltaAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_ScaleDeltaAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_ScaleDeltaAction, value); } } [Obsolete("Deprecated, this obsolete property is not used when Input System version is 1.1.0 or higher. Configure press point on the action or binding instead.", true)] public float buttonPressPoint { get { return m_ButtonPressPoint; } set { m_ButtonPressPoint = value; } } protected override void OnEnable() { base.OnEnable(); EnableAllDirectActions(); } protected override void OnDisable() { base.OnDisable(); DisableAllDirectActions(); } protected override void UpdateTrackingInput(XRControllerState controllerState) { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0263: Unknown result type (might be due to invalid IL or missing references) //IL_0269: Unknown result type (might be due to invalid IL or missing references) //IL_0255: Unknown result type (might be due to invalid IL or missing references) //IL_025a: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_0273: Unknown result type (might be due to invalid IL or missing references) //IL_0210: Unknown result type (might be due to invalid IL or missing references) //IL_023f: Unknown result type (might be due to invalid IL or missing references) //IL_0241: Unknown result type (might be due to invalid IL or missing references) //IL_022b: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_0236: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) base.UpdateTrackingInput(controllerState); if (controllerState == null) { return; } InputAction action = ((InputActionProperty)(ref m_PositionAction)).action; InputAction action2 = ((InputActionProperty)(ref m_RotationAction)).action; InputAction action3 = ((InputActionProperty)(ref m_IsTrackedAction)).action; InputAction action4 = ((InputActionProperty)(ref m_TrackingStateAction)).action; if (!m_HasCheckedDisabledTrackingInputReferenceActions && (action != null || action2 != null)) { if (IsDisabledReferenceAction(m_PositionAction) || IsDisabledReferenceAction(m_RotationAction)) { Debug.LogWarning((object)"'Enable Input Tracking' is enabled, but Position and/or Rotation Action is disabled. The pose of the controller will not be updated correctly until the Input Actions are enabled. Input Actions in an Input Action Asset must be explicitly enabled to read the current value of the action. The Input Action Manager behavior can be added to a GameObject in a Scene and used to enable all Input Actions in a referenced Input Action Asset.", (Object)(object)this); } m_HasCheckedDisabledTrackingInputReferenceActions = true; } controllerState.isTracked = false; controllerState.inputTrackingState = (InputTrackingState)0; if (action3 != null && action3.bindings.Count > 0) { controllerState.isTracked = IsPressed(action3); } else { object obj; if (action4 == null) { obj = null; } else { InputControl activeControl = action4.activeControl; obj = ((activeControl != null) ? activeControl.device : null); } TrackedDevice val = (TrackedDevice)((obj is TrackedDevice) ? obj : null); if (val != null) { controllerState.isTracked = val.isTracked.isPressed; } else { object obj2; if (action == null) { obj2 = null; } else { InputControl activeControl2 = action.activeControl; obj2 = ((activeControl2 != null) ? activeControl2.device : null); } object obj3 = ((obj2 is TrackedDevice) ? obj2 : null); object obj4; if (action2 == null) { obj4 = null; } else { InputControl activeControl3 = action2.activeControl; obj4 = ((activeControl3 != null) ? activeControl3.device : null); } TrackedDevice val2 = (TrackedDevice)((obj4 is TrackedDevice) ? obj4 : null); bool flag = obj3 != null && ((TrackedDevice)obj3).isTracked.isPressed; if (obj3 != val2) { bool flag2 = val2 != null && val2.isTracked.isPressed; controllerState.isTracked = flag && flag2; } else { controllerState.isTracked = flag; } } } if (action4 != null && action4.bindings.Count > 0) { controllerState.inputTrackingState = (InputTrackingState)action4.ReadValue(); } else { object obj5; if (action3 == null) { obj5 = null; } else { InputControl activeControl4 = action3.activeControl; obj5 = ((activeControl4 != null) ? activeControl4.device : null); } TrackedDevice val3 = (TrackedDevice)((obj5 is TrackedDevice) ? obj5 : null); if (val3 != null) { controllerState.inputTrackingState = (InputTrackingState)((InputControl)(object)val3.trackingState).ReadValue(); } else { object obj6; if (action == null) { obj6 = null; } else { InputControl activeControl5 = action.activeControl; obj6 = ((activeControl5 != null) ? activeControl5.device : null); } TrackedDevice val4 = (TrackedDevice)((obj6 is TrackedDevice) ? obj6 : null); object obj7; if (action2 == null) { obj7 = null; } else { InputControl activeControl6 = action2.activeControl; obj7 = ((activeControl6 != null) ? activeControl6.device : null); } TrackedDevice val5 = (TrackedDevice)((obj7 is TrackedDevice) ? obj7 : null); InputTrackingState val6 = (InputTrackingState)((val4 != null) ? ((InputControl)(object)val4.trackingState).ReadValue() : 0); if (val4 != val5) { InputTrackingState val7 = (InputTrackingState)((val5 != null) ? ((InputControl)(object)val5.trackingState).ReadValue() : 0); controllerState.inputTrackingState = (InputTrackingState)((val6 & 1) | (val7 & 2)); } else { controllerState.inputTrackingState = val6; } } } if (action != null && (controllerState.inputTrackingState & 1) != 0) { controllerState.position = action.ReadValue(); } if (action2 != null && (controllerState.inputTrackingState & 2) != 0) { controllerState.rotation = action2.ReadValue(); } } protected override void UpdateInput(XRControllerState controllerState) { //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) base.UpdateInput(controllerState); if (controllerState == null) { return; } if (!m_HasCheckedDisabledInputReferenceActions && (((InputActionProperty)(ref m_SelectAction)).action != null || ((InputActionProperty)(ref m_ActivateAction)).action != null || ((InputActionProperty)(ref m_UIPressAction)).action != null)) { if (IsDisabledReferenceAction(m_SelectAction) || IsDisabledReferenceAction(m_ActivateAction) || IsDisabledReferenceAction(m_UIPressAction)) { Debug.LogWarning((object)"'Enable Input Actions' is enabled, but Select, Activate, and/or UI Press Action is disabled. The controller input will not be handled correctly until the Input Actions are enabled. Input Actions in an Input Action Asset must be explicitly enabled to read the current value of the action. The Input Action Manager behavior can be added to a GameObject in a Scene and used to enable all Input Actions in a referenced Input Action Asset.", (Object)(object)this); } m_HasCheckedDisabledInputReferenceActions = true; } controllerState.ResetFrameDependentStates(); InputAction action = ((InputActionProperty)(ref m_SelectActionValue)).action; if (action == null || action.bindings.Count <= 0) { action = ((InputActionProperty)(ref m_SelectAction)).action; } controllerState.selectInteractionState.SetFrameState(IsPressed(((InputActionProperty)(ref m_SelectAction)).action), ReadValue(action)); InputAction action2 = ((InputActionProperty)(ref m_ActivateActionValue)).action; if (action2 == null || action2.bindings.Count <= 0) { action2 = ((InputActionProperty)(ref m_ActivateAction)).action; } controllerState.activateInteractionState.SetFrameState(IsPressed(((InputActionProperty)(ref m_ActivateAction)).action), ReadValue(action2)); InputAction action3 = ((InputActionProperty)(ref m_UIPressActionValue)).action; if (action3 == null || action3.bindings.Count <= 0) { action3 = ((InputActionProperty)(ref m_UIPressAction)).action; } controllerState.uiPressInteractionState.SetFrameState(IsPressed(((InputActionProperty)(ref m_UIPressAction)).action), ReadValue(action3)); InputAction action4 = ((InputActionProperty)(ref m_UIScrollAction)).action; if (action4 != null) { controllerState.uiScrollValue = action4.ReadValue(); } } protected virtual bool IsPressed(InputAction action) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Invalid comparison between Unknown and I4 if (action == null) { return false; } return (int)action.phase == 3; } protected virtual float ReadValue(InputAction action) { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) if (action == null) { return 0f; } if (action.activeControl is AxisControl) { return action.ReadValue(); } if (action.activeControl is Vector2Control) { Vector2 val = action.ReadValue(); return ((Vector2)(ref val)).magnitude; } if (!IsPressed(action)) { return 0f; } return 1f; } public override bool SendHapticImpulse(float amplitude, float duration) { InputAction action = ((InputActionProperty)(ref m_HapticDeviceAction)).action; object obj; if (action == null) { obj = null; } else { InputControl activeControl = action.activeControl; obj = ((activeControl != null) ? activeControl.device : null); } XRControllerWithRumble val = (XRControllerWithRumble)((obj is XRControllerWithRumble) ? obj : null); if (val != null) { val.SendImpulse(amplitude, duration); return true; } return false; } private void EnableAllDirectActions() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) m_PositionAction.EnableDirectAction(); m_RotationAction.EnableDirectAction(); m_IsTrackedAction.EnableDirectAction(); m_TrackingStateAction.EnableDirectAction(); m_SelectAction.EnableDirectAction(); m_SelectActionValue.EnableDirectAction(); m_ActivateAction.EnableDirectAction(); m_ActivateActionValue.EnableDirectAction(); m_UIPressAction.EnableDirectAction(); m_UIPressActionValue.EnableDirectAction(); m_UIScrollAction.EnableDirectAction(); m_HapticDeviceAction.EnableDirectAction(); m_RotateAnchorAction.EnableDirectAction(); m_DirectionalAnchorRotationAction.EnableDirectAction(); m_TranslateAnchorAction.EnableDirectAction(); m_ScaleToggleAction.EnableDirectAction(); m_ScaleDeltaAction.EnableDirectAction(); } private void DisableAllDirectActions() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) m_PositionAction.DisableDirectAction(); m_RotationAction.DisableDirectAction(); m_IsTrackedAction.DisableDirectAction(); m_TrackingStateAction.DisableDirectAction(); m_SelectAction.DisableDirectAction(); m_SelectActionValue.DisableDirectAction(); m_ActivateAction.DisableDirectAction(); m_ActivateActionValue.DisableDirectAction(); m_UIPressAction.DisableDirectAction(); m_UIPressActionValue.DisableDirectAction(); m_UIScrollAction.DisableDirectAction(); m_HapticDeviceAction.DisableDirectAction(); m_RotateAnchorAction.DisableDirectAction(); m_DirectionalAnchorRotationAction.DisableDirectAction(); m_TranslateAnchorAction.DisableDirectAction(); m_ScaleToggleAction.DisableDirectAction(); m_ScaleDeltaAction.DisableDirectAction(); } private void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { property.DisableDirectAction(); } property = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { property.EnableDirectAction(); } } private static bool IsDisabledReferenceAction(InputActionProperty property) { if ((Object)(object)((InputActionProperty)(ref property)).reference != (Object)null && ((InputActionProperty)(ref property)).reference.action != null) { return !((InputActionProperty)(ref property)).reference.action.enabled; } return false; } } public enum ScaleMode { None, Input, Distance } public interface IXRScaleValueProvider { ScaleMode scaleMode { get; set; } float scaleValue { get; } } [DefaultExecutionOrder(-29990)] [DisallowMultipleComponent] public abstract class XRBaseController : MonoBehaviour { public enum UpdateType { UpdateAndBeforeRender, Update, BeforeRender, Fixed } [SerializeField] private UpdateType m_UpdateTrackingType; [SerializeField] private bool m_EnableInputTracking = true; [SerializeField] private bool m_EnableInputActions = true; [SerializeField] private Transform m_ModelPrefab; [SerializeField] [FormerlySerializedAs("m_ModelTransform")] private Transform m_ModelParent; [SerializeField] private Transform m_Model; [SerializeField] private bool m_AnimateModel; [SerializeField] private string m_ModelSelectTransition; [SerializeField] private string m_ModelDeSelectTransition; private bool m_HideControllerModel; private InteractionState m_SelectInteractionState; private InteractionState m_ActivateInteractionState; private InteractionState m_UIPressInteractionState; private Vector2 m_UIScrollValue; private XRControllerState m_ControllerState; private bool m_CreateControllerState = true; private Animator m_ModelAnimator; private bool m_HasWarnedAnimatorMissing; private bool m_PerformSetup = true; public UpdateType updateTrackingType { get { return m_UpdateTrackingType; } set { m_UpdateTrackingType = value; } } public bool enableInputTracking { get { return m_EnableInputTracking; } set { m_EnableInputTracking = value; } } public bool enableInputActions { get { return m_EnableInputActions; } set { m_EnableInputActions = value; } } public Transform modelPrefab { get { return m_ModelPrefab; } set { m_ModelPrefab = value; } } public Transform modelParent { get { return m_ModelParent; } set { m_ModelParent = value; if ((Object)(object)m_Model != (Object)null) { m_Model.parent = m_ModelParent; } } } public Transform model { get { return m_Model; } set { m_Model = value; } } public bool animateModel { get { return m_AnimateModel; } set { m_AnimateModel = value; } } public string modelSelectTransition { get { return m_ModelSelectTransition; } set { m_ModelSelectTransition = value; } } public string modelDeSelectTransition { get { return m_ModelDeSelectTransition; } set { m_ModelDeSelectTransition = value; } } public bool hideControllerModel { get { return m_HideControllerModel; } set { m_HideControllerModel = value; if ((Object)(object)m_Model != (Object)null) { ((Component)m_Model).gameObject.SetActive(!m_HideControllerModel); } } } public InteractionState selectInteractionState => m_SelectInteractionState; public InteractionState activateInteractionState => m_ActivateInteractionState; public InteractionState uiPressInteractionState => m_UIPressInteractionState; public Vector2 uiScrollValue => m_UIScrollValue; public XRControllerState currentControllerState { get { SetupControllerState(); return m_ControllerState; } set { m_ControllerState = value; m_CreateControllerState = false; } } [Obsolete("modelTransform has been deprecated due to being renamed. Use modelParent instead. (UnityUpgradable) -> modelParent")] public Transform modelTransform { get { return modelParent; } set { modelParent = value; } } [Obsolete("anchorControlDeadzone is obsolete. Please configure deadzone on the Rotate Anchor and Translate Anchor Actions.", true)] public float anchorControlDeadzone { get; set; } [Obsolete("anchorControlOffAxisDeadzone is obsolete. Please configure deadzone on the Rotate Anchor and Translate Anchor Actions.", true)] public float anchorControlOffAxisDeadzone { get; set; } protected virtual void Awake() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_ModelParent == (Object)null) { m_ModelParent = new GameObject("[" + ((Object)((Component)this).gameObject).name + "] Model Parent").transform; m_ModelParent.SetParent(((Component)this).transform, false); m_ModelParent.localPosition = Vector3.zero; m_ModelParent.localRotation = Quaternion.identity; } } protected virtual void OnEnable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown Application.onBeforeRender += new UnityAction(OnBeforeRender); } protected virtual void OnDisable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown Application.onBeforeRender -= new UnityAction(OnBeforeRender); } protected void Update() { UpdateController(); } private void SetupModel() { if ((Object)(object)m_Model == (Object)null) { GameObject val = GetModelPrefab(); if ((Object)(object)val != (Object)null) { m_Model = Object.Instantiate(val, m_ModelParent).transform; } } if ((Object)(object)m_Model != (Object)null) { ((Component)m_Model).gameObject.SetActive(!m_HideControllerModel); } } private void SetupControllerState() { if (m_ControllerState == null && m_CreateControllerState) { m_ControllerState = new XRControllerState(); } } protected virtual GameObject GetModelPrefab() { if (!((Object)(object)m_ModelPrefab != (Object)null)) { return null; } return ((Component)m_ModelPrefab).gameObject; } protected virtual void UpdateController() { if (m_PerformSetup) { SetupModel(); SetupControllerState(); m_PerformSetup = false; } if (m_EnableInputTracking && (m_UpdateTrackingType == UpdateType.Update || m_UpdateTrackingType == UpdateType.UpdateAndBeforeRender)) { UpdateTrackingInput(m_ControllerState); } if (m_EnableInputActions) { UpdateInput(m_ControllerState); UpdateControllerModelAnimation(); } ApplyControllerState(XRInteractionUpdateOrder.UpdatePhase.Dynamic, m_ControllerState); } protected virtual void OnBeforeRender() { if (m_EnableInputTracking && (m_UpdateTrackingType == UpdateType.BeforeRender || m_UpdateTrackingType == UpdateType.UpdateAndBeforeRender)) { UpdateTrackingInput(m_ControllerState); } ApplyControllerState(XRInteractionUpdateOrder.UpdatePhase.OnBeforeRender, m_ControllerState); } protected virtual void FixedUpdate() { if (m_EnableInputTracking && m_UpdateTrackingType == UpdateType.Fixed) { UpdateTrackingInput(m_ControllerState); } ApplyControllerState(XRInteractionUpdateOrder.UpdatePhase.Fixed, m_ControllerState); } protected virtual void ApplyControllerState(XRInteractionUpdateOrder.UpdatePhase updatePhase, XRControllerState controllerState) { //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) if (controllerState == null) { return; } if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { m_SelectInteractionState = controllerState.selectInteractionState; m_ActivateInteractionState = controllerState.activateInteractionState; m_UIPressInteractionState = controllerState.uiPressInteractionState; m_UIScrollValue = controllerState.uiScrollValue; } if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic || updatePhase == XRInteractionUpdateOrder.UpdatePhase.OnBeforeRender || updatePhase == XRInteractionUpdateOrder.UpdatePhase.Fixed) { if ((controllerState.inputTrackingState & 1) != 0) { ((Component)this).transform.localPosition = controllerState.position; } if ((controllerState.inputTrackingState & 2) != 0) { ((Component)this).transform.localRotation = controllerState.rotation; } } } protected virtual void UpdateTrackingInput(XRControllerState controllerState) { } protected virtual void UpdateInput(XRControllerState controllerState) { } protected virtual void UpdateControllerModelAnimation() { if (!m_AnimateModel || !((Object)(object)m_Model != (Object)null)) { return; } if (((Object)(object)m_ModelAnimator == (Object)null || (Object)(object)((Component)m_ModelAnimator).gameObject != (Object)(object)((Component)m_Model).gameObject) && !((Component)m_Model).TryGetComponent(ref m_ModelAnimator)) { if (!m_HasWarnedAnimatorMissing) { Debug.LogWarning((object)"Animate Model is enabled, but there is no Animator component on the model. Unable to activate named triggers to animate the model.", (Object)(object)this); m_HasWarnedAnimatorMissing = true; } } else if (m_SelectInteractionState.activatedThisFrame) { m_ModelAnimator.SetTrigger(m_ModelSelectTransition); } else if (m_SelectInteractionState.deactivatedThisFrame) { m_ModelAnimator.SetTrigger(m_ModelDeSelectTransition); } } public virtual bool SendHapticImpulse(float amplitude, float duration) { return false; } [Obsolete("GetControllerState has been deprecated. Use currentControllerState instead.")] public virtual bool GetControllerState(out XRControllerState controllerState) { controllerState = currentControllerState; return false; } [Obsolete("SetControllerState has been deprecated. Use currentControllerState instead.")] public virtual void SetControllerState(XRControllerState controllerState) { currentControllerState = controllerState; } } [AddComponentMenu("XR/XR Controller (Device-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRController.html")] public class XRController : XRBaseController { [SerializeField] private XRNode m_ControllerNode = (XRNode)5; private XRNode m_InputDeviceControllerNode; [SerializeField] private InputHelpers.Button m_SelectUsage = InputHelpers.Button.Grip; [SerializeField] private InputHelpers.Button m_ActivateUsage = InputHelpers.Button.Trigger; [SerializeField] private InputHelpers.Button m_UIPressUsage = InputHelpers.Button.Trigger; [SerializeField] private float m_AxisToPressThreshold = 0.1f; [SerializeField] private InputHelpers.Button m_RotateAnchorLeft = InputHelpers.Button.PrimaryAxis2DLeft; [SerializeField] private InputHelpers.Button m_RotateAnchorRight = InputHelpers.Button.PrimaryAxis2DRight; [SerializeField] private InputHelpers.Button m_MoveObjectIn = InputHelpers.Button.PrimaryAxis2DUp; [SerializeField] private InputHelpers.Button m_MoveObjectOut = InputHelpers.Button.PrimaryAxis2DDown; [SerializeField] private InputHelpers.Axis2D m_DirectionalAnchorRotation = InputHelpers.Axis2D.PrimaryAxis2D; [SerializeField] private BasePoseProvider m_PoseProvider; private InputDevice m_InputDevice; public XRNode controllerNode { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_ControllerNode; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_ControllerNode = value; } } public InputHelpers.Button selectUsage { get { return m_SelectUsage; } set { m_SelectUsage = value; } } public InputHelpers.Button activateUsage { get { return m_ActivateUsage; } set { m_ActivateUsage = value; } } public InputHelpers.Button uiPressUsage { get { return m_UIPressUsage; } set { m_UIPressUsage = value; } } public float axisToPressThreshold { get { return m_AxisToPressThreshold; } set { m_AxisToPressThreshold = value; } } public InputHelpers.Button rotateObjectLeft { get { return m_RotateAnchorLeft; } set { m_RotateAnchorLeft = value; } } public InputHelpers.Button rotateObjectRight { get { return m_RotateAnchorRight; } set { m_RotateAnchorRight = value; } } public InputHelpers.Button moveObjectIn { get { return m_MoveObjectIn; } set { m_MoveObjectIn = value; } } public InputHelpers.Button moveObjectOut { get { return m_MoveObjectOut; } set { m_MoveObjectOut = value; } } public InputHelpers.Axis2D directionalAnchorRotation { get { return m_DirectionalAnchorRotation; } set { m_DirectionalAnchorRotation = value; } } public BasePoseProvider poseProvider { get { return m_PoseProvider; } set { m_PoseProvider = value; } } public InputDevice inputDevice { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (m_InputDeviceControllerNode != m_ControllerNode || !((InputDevice)(ref m_InputDevice)).isValid) { m_InputDevice = InputDevices.GetDeviceAtXRNode(m_ControllerNode); m_InputDeviceControllerNode = m_ControllerNode; } return m_InputDevice; } } protected override void UpdateTrackingInput(XRControllerState controllerState) { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) base.UpdateTrackingInput(controllerState); if (controllerState == null) { return; } InputDevice val = inputDevice; bool flag = default(bool); controllerState.isTracked = ((InputDevice)(ref val)).TryGetFeatureValue(CommonUsages.isTracked, ref flag) && flag; controllerState.inputTrackingState = (InputTrackingState)0; if ((Object)(object)m_PoseProvider != (Object)null) { Pose val2 = default(Pose); PoseDataFlags poseFromProvider = m_PoseProvider.GetPoseFromProvider(ref val2); if ((poseFromProvider & 1) != 0) { controllerState.position = val2.position; controllerState.inputTrackingState = (InputTrackingState)(controllerState.inputTrackingState | 1); } if ((poseFromProvider & 2) != 0) { controllerState.rotation = val2.rotation; controllerState.inputTrackingState = (InputTrackingState)(controllerState.inputTrackingState | 2); } return; } val = inputDevice; InputTrackingState val3 = default(InputTrackingState); if (!((InputDevice)(ref val)).TryGetFeatureValue(CommonUsages.trackingState, ref val3)) { return; } controllerState.inputTrackingState = val3; if ((val3 & 1) != 0) { val = inputDevice; Vector3 position = default(Vector3); if (((InputDevice)(ref val)).TryGetFeatureValue(CommonUsages.devicePosition, ref position)) { controllerState.position = position; } } if ((val3 & 2) != 0) { val = inputDevice; Quaternion rotation = default(Quaternion); if (((InputDevice)(ref val)).TryGetFeatureValue(CommonUsages.deviceRotation, ref rotation)) { controllerState.rotation = rotation; } } } protected override void UpdateInput(XRControllerState controllerState) { base.UpdateInput(controllerState); if (controllerState != null) { controllerState.ResetFrameDependentStates(); controllerState.selectInteractionState.SetFrameState(IsPressed(m_SelectUsage), ReadValue(m_SelectUsage)); controllerState.activateInteractionState.SetFrameState(IsPressed(m_ActivateUsage), ReadValue(m_ActivateUsage)); controllerState.uiPressInteractionState.SetFrameState(IsPressed(m_UIPressUsage), ReadValue(m_UIPressUsage)); } } protected virtual bool IsPressed(InputHelpers.Button button) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) inputDevice.IsPressed(button, out var isPressed, m_AxisToPressThreshold); return isPressed; } protected virtual float ReadValue(InputHelpers.Button button) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) inputDevice.TryReadSingleValue(button, out var singleValue); return singleValue; } public override bool SendHapticImpulse(float amplitude, float duration) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) InputDevice val = inputDevice; HapticCapabilities val2 = default(HapticCapabilities); if (((InputDevice)(ref val)).TryGetHapticCapabilities(ref val2) && ((HapticCapabilities)(ref val2)).supportsImpulse) { val = inputDevice; return ((InputDevice)(ref val)).SendHapticImpulse(0u, amplitude, duration); } return false; } } [AddComponentMenu("XR/Debug/XR Controller Recorder", 11)] [DisallowMultipleComponent] [DefaultExecutionOrder(-30000)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRControllerRecorder.html")] public class XRControllerRecorder : MonoBehaviour { [Header("Input Recording/Playback")] [SerializeField] [Tooltip("Controls whether this recording will start playing when the component's Awake() method is called.")] private bool m_PlayOnStart; [SerializeField] [Tooltip("Controller Recording asset for recording and playback of controller events.")] private XRControllerRecording m_Recording; [SerializeField] [Tooltip("XR Controller who's output will be recorded and played back")] private XRBaseController m_XRController; [SerializeField] [Tooltip("If true, every frame of the recording must be visited even if a larger time period has passed.")] private bool m_VisitEachFrame; private double m_CurrentTime; private bool m_IsRecording; private bool m_IsPlaying; private double m_LastPlaybackTime; private int m_LastFrameIdx; private bool m_PrevEnableInputActions; private bool m_PrevEnableInputTracking; public bool playOnStart { get { return m_PlayOnStart; } set { m_PlayOnStart = value; } } public XRControllerRecording recording { get { return m_Recording; } set { m_Recording = value; } } public XRBaseController xrController { get { return m_XRController; } set { m_XRController = value; } } public bool visitEachFrame { get { return m_VisitEachFrame; } set { m_VisitEachFrame = value; } } public bool isRecording { get { return m_IsRecording; } set { if (m_IsRecording == value) { return; } recordingStartTime = Time.time; isPlaying = false; m_CurrentTime = 0.0; if (Object.op_Implicit((Object)(object)m_Recording)) { if (value) { m_Recording.InitRecording(); } else { m_Recording.SaveRecording(); } } m_IsRecording = value; } } public bool isPlaying { get { return m_IsPlaying; } set { if (m_IsPlaying != value) { isRecording = false; if (Object.op_Implicit((Object)(object)m_Recording)) { ResetPlayback(); } m_CurrentTime = 0.0; m_IsPlaying = value; if (value && (Object)(object)m_XRController != (Object)null) { m_PrevEnableInputActions = m_XRController.enableInputActions; m_PrevEnableInputTracking = m_XRController.enableInputTracking; m_XRController.enableInputActions = false; m_XRController.enableInputTracking = false; } else if ((Object)(object)m_XRController != (Object)null) { m_XRController.enableInputActions = m_PrevEnableInputActions; m_XRController.enableInputTracking = m_PrevEnableInputTracking; } } } } public double currentTime => m_CurrentTime; public double duration { get { if (!((Object)(object)m_Recording != (Object)null)) { return 0.0; } return m_Recording.duration; } } protected float recordingStartTime { get; set; } protected void Awake() { if ((Object)(object)m_XRController == (Object)null) { m_XRController = ((Component)this).GetComponent(); } m_CurrentTime = 0.0; if (m_PlayOnStart) { isPlaying = true; } } protected virtual void Update() { if (isRecording && (Object)(object)m_XRController != (Object)null) { XRControllerState currentControllerState = m_XRController.currentControllerState; currentControllerState.time = Time.time - recordingStartTime; m_Recording.AddRecordingFrame(currentControllerState); } else if (isPlaying) { UpdatePlaybackTime(m_CurrentTime); } if (isRecording || isPlaying) { m_CurrentTime += Time.deltaTime; } if (isPlaying && m_CurrentTime > m_Recording.duration && (!m_VisitEachFrame || m_LastFrameIdx >= m_Recording.frames.Count - 1)) { isPlaying = false; } } protected void OnDestroy() { isRecording = false; isPlaying = false; } public void ResetPlayback() { m_LastPlaybackTime = 0.0; m_LastFrameIdx = 0; } private void UpdatePlaybackTime(double playbackTime) { if (!Object.op_Implicit((Object)(object)m_Recording) || (Object)(object)m_Recording == (Object)null || m_Recording.frames.Count == 0 || m_LastFrameIdx >= m_Recording.frames.Count) { return; } XRControllerState xRControllerState = m_Recording.frames[m_LastFrameIdx]; int num = m_LastFrameIdx; if (xRControllerState.time < playbackTime) { while (num < m_Recording.frames.Count && m_Recording.frames[num].time >= m_LastPlaybackTime && m_Recording.frames[num].time <= playbackTime) { num++; if (m_VisitEachFrame) { if (num < m_Recording.frames.Count) { playbackTime = m_Recording.frames[num].time; } break; } } } if (num < m_Recording.frames.Count) { if ((Object)(object)m_XRController != (Object)null) { XRControllerState currentControllerState = m_Recording.frames[num]; m_XRController.currentControllerState = currentControllerState; } m_LastFrameIdx = num; m_LastPlaybackTime = playbackTime; } } public virtual bool GetControllerState(out XRControllerState controllerState) { if (isPlaying) { if (m_Recording.frames.Count > m_LastFrameIdx) { controllerState = m_Recording.frames[m_LastFrameIdx]; return true; } } else if (isRecording) { if (m_Recording.frames.Count > 0) { controllerState = m_Recording.frames[m_Recording.frames.Count - 1]; return true; } } else if ((Object)(object)m_XRController != (Object)null) { controllerState = m_XRController.currentControllerState; return false; } controllerState = new XRControllerState(); return false; } } [Serializable] [CreateAssetMenu(menuName = "XR/XR Controller Recording")] [PreferBinarySerialization] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRControllerRecording.html")] public class XRControllerRecording : ScriptableObject, ISerializationCallbackReceiver { [SerializeField] private bool m_SelectActivatedInFirstFrame; [SerializeField] private bool m_ActivateActivatedInFirstFrame; [SerializeField] private bool m_FirstUIPressActivatedInFirstFrame; [SerializeField] private List m_Frames = new List(); public List frames => m_Frames; public double duration { get { if (m_Frames.Count != 0) { return m_Frames[m_Frames.Count - 1].time; } return 0.0; } } void ISerializationCallbackReceiver.OnBeforeSerialize() { if (m_Frames != null && m_Frames.Count > 0) { XRControllerState xRControllerState = m_Frames[0]; m_SelectActivatedInFirstFrame = xRControllerState.selectInteractionState.activatedThisFrame; m_ActivateActivatedInFirstFrame = xRControllerState.activateInteractionState.activatedThisFrame; m_FirstUIPressActivatedInFirstFrame = xRControllerState.uiPressInteractionState.activatedThisFrame; } } void ISerializationCallbackReceiver.OnAfterDeserialize() { SetFrameDependentData(); } internal void SetFrameDependentData() { if (m_Frames != null && m_Frames.Count > 0) { XRControllerState xRControllerState = m_Frames[0]; xRControllerState.selectInteractionState.SetFrameDependent(!m_SelectActivatedInFirstFrame && xRControllerState.selectInteractionState.active); xRControllerState.activateInteractionState.SetFrameDependent(!m_ActivateActivatedInFirstFrame && xRControllerState.activateInteractionState.active); xRControllerState.uiPressInteractionState.SetFrameDependent(!m_FirstUIPressActivatedInFirstFrame && xRControllerState.uiPressInteractionState.active); for (int i = 1; i < m_Frames.Count; i++) { XRControllerState xRControllerState2 = m_Frames[i]; XRControllerState xRControllerState3 = m_Frames[i - 1]; xRControllerState2.selectInteractionState.SetFrameDependent(xRControllerState3.selectInteractionState.active); xRControllerState2.activateInteractionState.SetFrameDependent(xRControllerState3.activateInteractionState.active); xRControllerState2.uiPressInteractionState.SetFrameDependent(xRControllerState3.uiPressInteractionState.active); } } } public void AddRecordingFrame(XRControllerState state) { frames.Add(new XRControllerState(state)); } public void AddRecordingFrameNonAlloc(XRControllerState state) { frames.Add(state); } public void InitRecording() { m_SelectActivatedInFirstFrame = false; m_ActivateActivatedInFirstFrame = false; m_FirstUIPressActivatedInFirstFrame = false; m_Frames.Clear(); } public void SaveRecording() { } [Obsolete("AddRecordingFrame has been deprecated. Use the overload method with the XRControllerState parameter or the method AddRecordingFrameNonAlloc.")] public void AddRecordingFrame(double time, Vector3 position, Quaternion rotation, bool selectActive, bool activateActive, bool pressActive) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) AddRecordingFrameNonAlloc(new XRControllerState(time, position, rotation, (InputTrackingState)3, selectActive, activateActive, pressActive)); } } [Serializable] public struct InteractionState { [Range(0f, 1f)] [SerializeField] private float m_Value; [SerializeField] private bool m_Active; private bool m_ActivatedThisFrame; private bool m_DeactivatedThisFrame; public float value { get { return m_Value; } set { m_Value = value; } } public bool active { get { return m_Active; } set { m_Active = value; } } public bool activatedThisFrame { get { return m_ActivatedThisFrame; } set { m_ActivatedThisFrame = value; } } public bool deactivatedThisFrame { get { return m_DeactivatedThisFrame; } set { m_DeactivatedThisFrame = value; } } [Obsolete("deActivatedThisFrame has been deprecated. Use deactivatedThisFrame instead. (UnityUpgradable) -> deactivatedThisFrame")] public bool deActivatedThisFrame { get { return deactivatedThisFrame; } set { deactivatedThisFrame = value; } } public void SetFrameState(bool isActive) { SetFrameState(isActive, isActive ? 1f : 0f); } public void SetFrameState(bool isActive, float newValue) { value = newValue; activatedThisFrame = !active && isActive; deactivatedThisFrame = active && !isActive; active = isActive; } public void SetFrameDependent(bool wasActive) { activatedThisFrame = !wasActive && active; deactivatedThisFrame = wasActive && !active; } public void ResetFrameDependent() { activatedThisFrame = false; deactivatedThisFrame = false; } [Obsolete("Reset has been renamed. Use ResetFrameDependent instead. (UnityUpgradable) -> ResetFrameDependent()")] public void Reset() { ResetFrameDependent(); } } [Serializable] public class XRControllerState { public double time; public InputTrackingState inputTrackingState; public bool isTracked; public Vector3 position; public Quaternion rotation; public InteractionState selectInteractionState; public InteractionState activateInteractionState; public InteractionState uiPressInteractionState; public Vector2 uiScrollValue; [Obsolete("poseDataFlags has been deprecated. Use inputTrackingState instead.")] public PoseDataFlags poseDataFlags { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) PoseDataFlags val = (PoseDataFlags)0; if ((inputTrackingState & 1) != 0) { val = (PoseDataFlags)(val | 1); } if ((inputTrackingState & 2) != 0) { val = (PoseDataFlags)(val | 2); } return val; } set { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) inputTrackingState = (InputTrackingState)0; if ((value & 1) != 0) { inputTrackingState = (InputTrackingState)(inputTrackingState | 1); } if ((value & 2) != 0) { inputTrackingState = (InputTrackingState)(inputTrackingState | 2); } } } protected XRControllerState(double time, Vector3 position, Quaternion rotation, InputTrackingState inputTrackingState, bool isTracked) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) this.time = time; this.position = position; this.rotation = rotation; this.inputTrackingState = inputTrackingState; this.isTracked = isTracked; } public XRControllerState() : this(0.0, Vector3.zero, Quaternion.identity, (InputTrackingState)0, isTracked: false) { }//IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) public XRControllerState(XRControllerState value) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) time = value.time; position = value.position; rotation = value.rotation; inputTrackingState = value.inputTrackingState; isTracked = value.isTracked; selectInteractionState = value.selectInteractionState; activateInteractionState = value.activateInteractionState; uiPressInteractionState = value.uiPressInteractionState; uiScrollValue = value.uiScrollValue; } public XRControllerState(double time, Vector3 position, Quaternion rotation, InputTrackingState inputTrackingState, bool isTracked, bool selectActive, bool activateActive, bool pressActive) : this(time, position, rotation, inputTrackingState, isTracked) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) selectInteractionState.SetFrameState(selectActive); activateInteractionState.SetFrameState(activateActive); uiPressInteractionState.SetFrameState(pressActive); } public XRControllerState(double time, Vector3 position, Quaternion rotation, InputTrackingState inputTrackingState, bool isTracked, bool selectActive, bool activateActive, bool pressActive, float selectValue, float activateValue, float pressValue) : this(time, position, rotation, inputTrackingState, isTracked) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) selectInteractionState.SetFrameState(selectActive, selectValue); activateInteractionState.SetFrameState(activateActive, activateValue); uiPressInteractionState.SetFrameState(pressActive, pressValue); } public void ResetFrameDependentStates() { selectInteractionState.ResetFrameDependent(); activateInteractionState.ResetFrameDependent(); uiPressInteractionState.ResetFrameDependent(); } public override string ToString() { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) return $"time: {time}, position: {position}, rotation: {rotation}, selectActive: {selectInteractionState.active}, activateActive: {activateInteractionState.active}, pressActive: {uiPressInteractionState.active}, isTracked: {isTracked}, inputTrackingState: {inputTrackingState}"; } [Obsolete("This constructor has been deprecated. Use the constructors with the inputTrackingState parameter.")] public XRControllerState(double time, Vector3 position, Quaternion rotation, bool selectActive, bool activateActive, bool pressActive) : this(time, position, rotation, (InputTrackingState)3, selectActive, activateActive, pressActive) { }//IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) [Obsolete("This constructor has been deprecated. Use the constructor with the isTracked parameter.")] protected XRControllerState(double time, Vector3 position, Quaternion rotation, InputTrackingState inputTrackingState) : this(time, position, rotation, inputTrackingState, isTracked: true) { }//IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) [Obsolete("This constructor has been deprecated. Use the constructor with the isTracked parameter.")] public XRControllerState(double time, Vector3 position, Quaternion rotation, InputTrackingState inputTrackingState, bool selectActive, bool activateActive, bool pressActive) : this(time, position, rotation, inputTrackingState, isTracked: true) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) selectInteractionState.SetFrameState(selectActive); activateInteractionState.SetFrameState(activateActive); uiPressInteractionState.SetFrameState(pressActive); } [Obsolete("This constructor has been deprecated. Use the constructor with the isTracked parameter.")] public XRControllerState(double time, Vector3 position, Quaternion rotation, InputTrackingState inputTrackingState, bool selectActive, bool activateActive, bool pressActive, float selectValue, float activateValue, float pressValue) : this(time, position, rotation, inputTrackingState, isTracked: true) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0004: Unknown result type (might be due to invalid IL or missing references) selectInteractionState.SetFrameState(selectActive, selectValue); activateInteractionState.SetFrameState(activateActive, activateValue); uiPressInteractionState.SetFrameState(pressActive, pressValue); } [Obsolete("ResetInputs has been renamed. Use ResetFrameDependentStates instead. (UnityUpgradable) -> ResetFrameDependentStates()")] public void ResetInputs() { ResetFrameDependentStates(); } } [AddComponentMenu("XR/XR Screen Space Controller", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRScreenSpaceController.html")] public class XRScreenSpaceController : XRBaseController { [Header("Touchscreen Gesture Actions")] [SerializeField] [Tooltip("When enabled, a Touchscreen Gesture Input Controller will be added to the Input System device list to detect touch gestures.")] private bool m_EnableTouchscreenGestureInputController = true; [SerializeField] [Tooltip("The action to use for the screen tap position. (Vector 2 Control).")] private InputActionProperty m_TapStartPositionAction = new InputActionProperty(new InputAction("Tap Start Position", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [Tooltip("The action to use for the current screen drag position. (Vector 2 Control).")] private InputActionProperty m_DragCurrentPositionAction = new InputActionProperty(new InputAction("Drag Current Position", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [Tooltip("The action to use for the delta of the screen drag. (Vector 2 Control).")] private InputActionProperty m_DragDeltaAction = new InputActionProperty(new InputAction("Drag Delta", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [FormerlySerializedAs("m_PinchStartPosition")] [Tooltip("The action to use for the screen pinch gesture start position. (Vector 2 Control).")] private InputActionProperty m_PinchStartPositionAction = new InputActionProperty(new InputAction("Pinch Start Position", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [Tooltip("The action to use for the gap of the screen pinch gesture. (Axis Control).")] private InputActionProperty m_PinchGapAction = new InputActionProperty(new InputAction((string)null, (InputActionType)0, (string)null, (string)null, (string)null, "Axis")); [SerializeField] [Tooltip("The action to use for the delta of the screen pinch gesture. (Axis Control).")] private InputActionProperty m_PinchGapDeltaAction = new InputActionProperty(new InputAction("Pinch Gap Delta", (InputActionType)0, (string)null, (string)null, (string)null, "Axis")); [SerializeField] [FormerlySerializedAs("m_TwistStartPosition")] [Tooltip("The action to use for the screen twist gesture start position. (Vector 2 Control).")] private InputActionProperty m_TwistStartPositionAction = new InputActionProperty(new InputAction("Twist Start Position", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [FormerlySerializedAs("m_TwistRotationDeltaAction")] [Tooltip("The action to use for the delta of the screen twist gesture. (Axis Control).")] private InputActionProperty m_TwistDeltaRotationAction = new InputActionProperty(new InputAction("Twist Delta Rotation", (InputActionType)0, (string)null, (string)null, (string)null, "Axis")); [SerializeField] [FormerlySerializedAs("m_ScreenTouchCount")] [Tooltip("The number of concurrent touches on the screen. (Integer Control).")] private InputActionProperty m_ScreenTouchCountAction = new InputActionProperty(new InputAction("Screen Touch Count", (InputActionType)0, (string)null, (string)null, (string)null, "Integer")); [SerializeField] [Tooltip("The camera associated with the screen, and through which screen presses/touches will be interpreted.")] private Camera m_ControllerCamera; [SerializeField] [Tooltip("Tells the XR Screen Space Controller to ignore interactions when hitting a screen space canvas.")] private bool m_BlockInteractionsWithScreenSpaceUI = true; [SerializeField] [Tooltip("Enables a rotation threshold that blocks pinch scale gestures when surpassed..")] private bool m_UseRotationThreshold = true; [SerializeField] [Tooltip("The threshold at which a gestures will be interpreted only as rotation and not a pinch scale gesture.")] private float m_RotationThreshold = 0.02f; private bool m_HasCheckedDisabledTrackingInputReferenceActions; private bool m_HasCheckedDisabledInputReferenceActions; private UIInputModule m_UIInputModule; public bool enableTouchscreenGestureInputController { get { return m_EnableTouchscreenGestureInputController; } set { m_EnableTouchscreenGestureInputController = value; } } public InputActionProperty tapStartPositionAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TapStartPositionAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_TapStartPositionAction, value); } } public InputActionProperty dragCurrentPositionAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_DragCurrentPositionAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_DragCurrentPositionAction, value); } } public InputActionProperty dragDeltaAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_DragDeltaAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_DragDeltaAction, value); } } public InputActionProperty pinchStartPositionAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PinchStartPositionAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_PinchStartPositionAction, value); } } public InputActionProperty pinchGapAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PinchGapAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_PinchGapAction, value); } } public InputActionProperty pinchGapDeltaAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PinchGapDeltaAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_PinchGapDeltaAction, value); } } public InputActionProperty twistStartPositionAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TwistStartPositionAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_TwistStartPositionAction, value); } } public InputActionProperty twistDeltaRotationAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TwistDeltaRotationAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_TwistDeltaRotationAction, value); } } public InputActionProperty screenTouchCountAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_ScreenTouchCountAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_ScreenTouchCountAction, value); } } public Camera controllerCamera { get { return m_ControllerCamera; } set { m_ControllerCamera = value; } } public bool blockInteractionsWithScreenSpaceUI { get { return m_BlockInteractionsWithScreenSpaceUI; } set { m_BlockInteractionsWithScreenSpaceUI = value; } } public bool useRotationThreshold { get { return m_UseRotationThreshold; } set { m_UseRotationThreshold = value; } } public float rotationThreshold { get { return m_RotationThreshold; } set { m_RotationThreshold = value; } } public float scaleDelta { get; private set; } [Obsolete("pinchStartPosition has been deprecated. Use pinchStartPositionAction instead. (UnityUpgradable) -> pinchStartPositionAction")] public InputActionProperty pinchStartPosition { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return pinchStartPositionAction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) pinchStartPositionAction = value; } } [Obsolete("pinchGapDelta has been deprecated. Use pinchGapDeltaAction instead. (UnityUpgradable) -> pinchGapDeltaAction")] public InputActionProperty pinchGapDelta { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return pinchGapDeltaAction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) pinchGapDeltaAction = value; } } [Obsolete("twistStartPosition has been deprecated. Use twistStartPositionAction instead. (UnityUpgradable) -> twistStartPositionAction")] public InputActionProperty twistStartPosition { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return twistStartPositionAction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) twistStartPositionAction = value; } } [Obsolete("twistRotationDeltaAction has been deprecated. Use twistDeltaRotationAction instead. (UnityUpgradable) -> twistDeltaRotationAction")] public InputActionProperty twistRotationDeltaAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return twistDeltaRotationAction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) twistDeltaRotationAction = value; } } [Obsolete("screenTouchCount has been deprecated. Use screenTouchCountAction instead. (UnityUpgradable) -> screenTouchCountAction")] public InputActionProperty screenTouchCount { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return screenTouchCountAction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) screenTouchCountAction = value; } } protected void Start() { if ((Object)(object)m_ControllerCamera == (Object)null) { m_ControllerCamera = Camera.main; if ((Object)(object)m_ControllerCamera == (Object)null) { Debug.LogWarning((object)"Could not find associated Camera in scene.This XRScreenSpaceController will be disabled.", (Object)(object)this); ((Behaviour)this).enabled = false; } } } protected override void OnEnable() { base.OnEnable(); EnableAllDirectActions(); InitializeTouchscreenGestureController(); } protected override void OnDisable() { base.OnDisable(); DisableAllDirectActions(); DestroyTouchscreenGestureController(); m_UIInputModule = null; } protected override void UpdateTrackingInput(XRControllerState controllerState) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012d: Unknown result type (might be due to invalid IL or missing references) base.UpdateTrackingInput(controllerState); if (controllerState == null || IsPointerOverScreenSpaceCanvas()) { return; } if (!m_HasCheckedDisabledTrackingInputReferenceActions && (((InputActionProperty)(ref m_DragCurrentPositionAction)).action != null || ((InputActionProperty)(ref m_TapStartPositionAction)).action != null || ((InputActionProperty)(ref m_TwistStartPositionAction)).action != null)) { if (IsDisabledReferenceAction(m_DragCurrentPositionAction) || IsDisabledReferenceAction(m_TapStartPositionAction) || IsDisabledReferenceAction(m_TwistStartPositionAction)) { Debug.LogWarning((object)"'Enable Input Tracking' is enabled, but the Tap, Drag, Pinch, and/or Twist Action is disabled. The pose of the controller will not be updated correctly until the Input Actions are enabled. Input Actions in an Input Action Asset must be explicitly enabled to read the current value of the action. The Input Action Manager behavior can be added to a GameObject in a Scene and used to enable all Input Actions in a referenced Input Action Asset.", (Object)(object)this); } m_HasCheckedDisabledTrackingInputReferenceActions = true; } InputAction action = ((InputActionProperty)(ref m_ScreenTouchCountAction)).action; int num = ((action != null) ? action.ReadValue() : 0); if (TryGetCurrentPositionAction(num, out var action2)) { Vector2 val = action2.ReadValue(); Vector3 val2 = m_ControllerCamera.ScreenToWorldPoint(new Vector3(val.x, val.y, m_ControllerCamera.nearClipPlane)); Vector3 val3 = val2 - ((Component)m_ControllerCamera).transform.position; Vector3 normalized = ((Vector3)(ref val3)).normalized; controllerState.position = (((Object)(object)((Component)this).transform.parent != (Object)null) ? ((Component)this).transform.parent.InverseTransformPoint(val2) : val2); controllerState.rotation = Quaternion.LookRotation(normalized); controllerState.inputTrackingState = (InputTrackingState)3; controllerState.isTracked = num > 0; } else { controllerState.inputTrackingState = (InputTrackingState)0; controllerState.isTracked = false; } } protected override void UpdateInput(XRControllerState controllerState) { //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) base.UpdateInput(controllerState); if (controllerState == null || IsPointerOverScreenSpaceCanvas()) { return; } if (!m_HasCheckedDisabledInputReferenceActions && (((InputActionProperty)(ref m_TwistDeltaRotationAction)).action != null || ((InputActionProperty)(ref m_DragCurrentPositionAction)).action != null || ((InputActionProperty)(ref m_TapStartPositionAction)).action != null)) { if (IsDisabledReferenceAction(m_TwistDeltaRotationAction) || IsDisabledReferenceAction(m_DragCurrentPositionAction) || IsDisabledReferenceAction(m_TapStartPositionAction)) { Debug.LogWarning((object)"'Enable Input Actions' is enabled, but the Tap, Drag, Pinch, and/or Twist Action is disabled. The controller input will not be handled correctly until the Input Actions are enabled. Input Actions in an Input Action Asset must be explicitly enabled to read the current value of the action. The Input Action Manager behavior can be added to a GameObject in a Scene and used to enable all Input Actions in a referenced Input Action Asset.", (Object)(object)this); } m_HasCheckedDisabledInputReferenceActions = true; } controllerState.ResetFrameDependentStates(); InputAction action2; if (TryGetCurrentTwoInputSelectAction(out var action)) { controllerState.selectInteractionState.SetFrameState(isActive: true, action.ReadValue()); } else if (TryGetCurrentOneInputSelectAction(out action2)) { ref InteractionState reference = ref controllerState.selectInteractionState; Vector2 val = action2.ReadValue(); reference.SetFrameState(isActive: true, ((Vector2)(ref val)).magnitude); } else { controllerState.selectInteractionState.SetFrameState(isActive: false, 0f); } if (m_UseRotationThreshold && TryGetAbsoluteValue(((InputActionProperty)(ref m_TwistDeltaRotationAction)).action, out var value) && value >= m_RotationThreshold) { scaleDelta = 0f; } else { scaleDelta = ((((InputActionProperty)(ref m_PinchGapDeltaAction)).action != null) ? (((InputActionProperty)(ref m_PinchGapDeltaAction)).action.ReadValue() / Screen.dpi) : 0f); } } private bool TryGetCurrentPositionAction(int touchCount, out InputAction action) { if (touchCount <= 1) { if (((InputActionProperty)(ref m_DragCurrentPositionAction)).action != null && ((InputActionProperty)(ref m_DragCurrentPositionAction)).action.IsInProgress()) { action = ((InputActionProperty)(ref m_DragCurrentPositionAction)).action; return true; } if (((InputActionProperty)(ref m_TapStartPositionAction)).action != null && ((InputActionProperty)(ref m_TapStartPositionAction)).action.WasPerformedThisFrame()) { action = ((InputActionProperty)(ref m_TapStartPositionAction)).action; return true; } } action = null; return false; } private bool TryGetCurrentOneInputSelectAction(out InputAction action) { if (((InputActionProperty)(ref m_DragCurrentPositionAction)).action != null && ((InputActionProperty)(ref m_DragCurrentPositionAction)).action.IsInProgress()) { action = ((InputActionProperty)(ref m_DragCurrentPositionAction)).action; return true; } if (((InputActionProperty)(ref m_TapStartPositionAction)).action != null && ((InputActionProperty)(ref m_TapStartPositionAction)).action.WasPerformedThisFrame()) { action = ((InputActionProperty)(ref m_TapStartPositionAction)).action; return true; } action = null; return false; } private bool TryGetCurrentTwoInputSelectAction(out InputAction action) { if (((InputActionProperty)(ref m_PinchGapAction)).action != null && ((InputActionProperty)(ref m_PinchGapAction)).action.IsInProgress()) { action = ((InputActionProperty)(ref m_PinchGapAction)).action; return true; } if (((InputActionProperty)(ref m_PinchGapDeltaAction)).action != null && ((InputActionProperty)(ref m_PinchGapDeltaAction)).action.IsInProgress()) { action = ((InputActionProperty)(ref m_PinchGapDeltaAction)).action; return true; } if (((InputActionProperty)(ref m_TwistDeltaRotationAction)).action != null && ((InputActionProperty)(ref m_TwistDeltaRotationAction)).action.IsInProgress()) { action = ((InputActionProperty)(ref m_TwistDeltaRotationAction)).action; return true; } action = null; return false; } private static bool TryGetAbsoluteValue(InputAction action, out float value) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) if (action != null && InputExtensions.IsInProgress(action.phase)) { value = Mathf.Abs(action.ReadValue()); return true; } value = 0f; return false; } private bool FindUIInputModule() { EventSystem current = EventSystem.current; if ((Object)(object)current != (Object)null && (Object)(object)current.currentInputModule != (Object)null) { m_UIInputModule = current.currentInputModule as UIInputModule; } return (Object)(object)m_UIInputModule != (Object)null; } private bool IsPointerOverScreenSpaceCanvas() { //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Invalid comparison between Unknown and I4 if (m_BlockInteractionsWithScreenSpaceUI && ((Object)(object)m_UIInputModule != (Object)null || FindUIInputModule())) { GameObject currentGameObject = m_UIInputModule.GetCurrentGameObject(-1); if ((Object)(object)currentGameObject == (Object)null) { return false; } RenderMode renderMode = currentGameObject.GetComponentInParent().renderMode; if ((int)renderMode != 0) { return (int)renderMode == 1; } return true; } return false; } private void InitializeTouchscreenGestureController() { } private void DestroyTouchscreenGestureController() { } private void EnableAllDirectActions() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) m_TapStartPositionAction.EnableDirectAction(); m_DragCurrentPositionAction.EnableDirectAction(); m_DragDeltaAction.EnableDirectAction(); m_PinchStartPositionAction.EnableDirectAction(); m_PinchGapAction.EnableDirectAction(); m_PinchGapDeltaAction.EnableDirectAction(); m_TwistStartPositionAction.EnableDirectAction(); m_TwistDeltaRotationAction.EnableDirectAction(); m_ScreenTouchCountAction.EnableDirectAction(); } private void DisableAllDirectActions() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) m_TapStartPositionAction.DisableDirectAction(); m_DragCurrentPositionAction.DisableDirectAction(); m_DragDeltaAction.DisableDirectAction(); m_PinchStartPositionAction.DisableDirectAction(); m_PinchGapAction.DisableDirectAction(); m_PinchGapDeltaAction.DisableDirectAction(); m_TwistStartPositionAction.DisableDirectAction(); m_TwistDeltaRotationAction.DisableDirectAction(); m_ScreenTouchCountAction.DisableDirectAction(); } private void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { property.DisableDirectAction(); } property = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { property.EnableDirectAction(); } } private static bool IsDisabledReferenceAction(InputActionProperty property) { if ((Object)(object)((InputActionProperty)(ref property)).reference != (Object)null && ((InputActionProperty)(ref property)).reference.action != null) { return !((InputActionProperty)(ref property)).reference.action.enabled; } return false; } } public interface IXRFilterList { int count { get; } void Add(T item); bool Remove(T item); void MoveTo(T item, int newIndex); void Clear(); void GetAll(List results); T GetAt(int index); } public struct DistanceInfo { public Vector3 point { get; set; } public float distanceSqr { get; set; } public Collider collider { get; set; } } public interface IXRActivateInteractable : IXRInteractable { ActivateEvent activated { get; } DeactivateEvent deactivated { get; } void OnActivated(ActivateEventArgs args); void OnDeactivated(DeactivateEventArgs args); } public interface IXRFocusInteractable : IXRInteractable { FocusEnterEvent firstFocusEntered { get; } FocusExitEvent lastFocusExited { get; } FocusEnterEvent focusEntered { get; } FocusExitEvent focusExited { get; } List interactionGroupsFocusing { get; } IXRInteractionGroup firstInteractionGroupFocusing { get; } bool isFocused { get; } InteractableFocusMode focusMode { get; } bool canFocus { get; } void OnFocusEntering(FocusEnterEventArgs args); void OnFocusEntered(FocusEnterEventArgs args); void OnFocusExiting(FocusExitEventArgs args); void OnFocusExited(FocusExitEventArgs args); } public static class XRFocusInteractableExtensions { public static IXRInteractionGroup GetOldestInteractorFocusing(this IXRFocusInteractable interactable) { if (interactable == null || interactable.interactionGroupsFocusing.Count <= 0) { return null; } return interactable.interactionGroupsFocusing[0]; } } public enum InteractableFocusMode { None, Single, Multiple } public interface IXRHoverInteractable : IXRInteractable { HoverEnterEvent firstHoverEntered { get; } HoverExitEvent lastHoverExited { get; } HoverEnterEvent hoverEntered { get; } HoverExitEvent hoverExited { get; } List interactorsHovering { get; } bool isHovered { get; } bool IsHoverableBy(IXRHoverInteractor interactor); void OnHoverEntering(HoverEnterEventArgs args); void OnHoverEntered(HoverEnterEventArgs args); void OnHoverExiting(HoverExitEventArgs args); void OnHoverExited(HoverExitEventArgs args); } public static class XRHoverInteractableExtensions { public static IXRHoverInteractor GetOldestInteractorHovering(this IXRHoverInteractable interactable) { if (interactable == null || interactable.interactorsHovering.Count <= 0) { return null; } return interactable.interactorsHovering[0]; } } public interface IXRInteractable { InteractionLayerMask interactionLayers { get; } List colliders { get; } Transform transform { get; } event Action registered; event Action unregistered; Transform GetAttachTransform(IXRInteractor interactor); void OnRegistered(InteractableRegisteredEventArgs args); void OnUnregistered(InteractableUnregisteredEventArgs args); void ProcessInteractable(XRInteractionUpdateOrder.UpdatePhase updatePhase); float GetDistanceSqrToInteractor(IXRInteractor interactor); } public interface IXRInteractionStrengthInteractable : IXRInteractable { IReadOnlyBindableVariable largestInteractionStrength { get; } float GetInteractionStrength(IXRInteractor interactor); void ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase); } public interface IXRSelectInteractable : IXRInteractable { SelectEnterEvent firstSelectEntered { get; } SelectExitEvent lastSelectExited { get; } SelectEnterEvent selectEntered { get; } SelectExitEvent selectExited { get; } List interactorsSelecting { get; } IXRSelectInteractor firstInteractorSelecting { get; } bool isSelected { get; } InteractableSelectMode selectMode { get; } bool IsSelectableBy(IXRSelectInteractor interactor); Pose GetAttachPoseOnSelect(IXRSelectInteractor interactor); Pose GetLocalAttachPoseOnSelect(IXRSelectInteractor interactor); void OnSelectEntering(SelectEnterEventArgs args); void OnSelectEntered(SelectEnterEventArgs args); void OnSelectExiting(SelectExitEventArgs args); void OnSelectExited(SelectExitEventArgs args); } public static class XRSelectInteractableExtensions { public static IXRSelectInteractor GetOldestInteractorSelecting(this IXRSelectInteractable interactable) { if (interactable == null || interactable.interactorsSelecting.Count <= 0) { return null; } return interactable.interactorsSelecting[0]; } } public enum InteractableSelectMode { Single, Multiple } public interface IXRInteractableCustomReticle { void OnReticleAttached(XRBaseInteractable interactable, IXRCustomReticleProvider reticleProvider); void OnReticleDetaching(); } [AddComponentMenu("XR/Visual/XR Tint Interactable Visual", 11)] [DisallowMultipleComponent] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRTintInteractableVisual.html")] public class XRTintInteractableVisual : MonoBehaviour { [StructLayout(LayoutKind.Sequential, Size = 1)] private struct ShaderPropertyLookup { public static readonly int emissionColor = Shader.PropertyToID("_EmissionColor"); } [SerializeField] [Tooltip("Tint color for interactable.")] private Color m_TintColor = Color.yellow; [SerializeField] [Tooltip("Tint on hover.")] private bool m_TintOnHover = true; [SerializeField] [Tooltip("Tint on selection.")] private bool m_TintOnSelection = true; [SerializeField] [Tooltip("Renderer(s) to use for tinting (will default to any Renderer on the GameObject if not specified).")] private List m_TintRenderers = new List(); private IXRInteractable m_Interactable; private IXRHoverInteractable m_HoverInteractable; private IXRSelectInteractable m_SelectInteractable; private MaterialPropertyBlock m_TintPropertyBlock; private bool m_EmissionEnabled; private bool m_HasLoggedMaterialInstance; private static readonly List s_Materials = new List(); public Color tintColor { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TintColor; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_TintColor = value; } } public bool tintOnHover { get { return m_TintOnHover; } set { m_TintOnHover = value; } } public bool tintOnSelection { get { return m_TintOnSelection; } set { m_TintOnSelection = value; } } public List tintRenderers { get { return m_TintRenderers; } set { m_TintRenderers = value; } } protected void Awake() { //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Expected O, but got Unknown m_Interactable = ((Component)this).GetComponent(); IXRInteractable interactable = m_Interactable; Object val = (Object)((interactable is Object) ? interactable : null); if (val != null && val != (Object)null) { m_HoverInteractable = m_Interactable as IXRHoverInteractable; m_SelectInteractable = m_Interactable as IXRSelectInteractable; if (m_HoverInteractable != null) { ((UnityEvent)m_HoverInteractable.firstHoverEntered).AddListener((UnityAction)OnFirstHoverEntered); ((UnityEvent)m_HoverInteractable.lastHoverExited).AddListener((UnityAction)OnLastHoverExited); } if (m_SelectInteractable != null) { ((UnityEvent)m_SelectInteractable.firstSelectEntered).AddListener((UnityAction)OnFirstSelectEntered); ((UnityEvent)m_SelectInteractable.lastSelectExited).AddListener((UnityAction)OnLastSelectExited); } } else { Debug.LogWarning((object)($"Could not find required interactable component on {((Component)this).gameObject} for tint visual." + " Cannot respond to hover or selection."), (Object)(object)this); } if (m_TintRenderers.Count == 0) { ((Component)this).GetComponents(m_TintRenderers); if (m_TintRenderers.Count == 0) { Debug.LogWarning((object)$"Could not find required Renderer component on {((Component)this).gameObject} for tint visual.", (Object)(object)this); } } m_EmissionEnabled = GetEmissionEnabled(); m_TintPropertyBlock = new MaterialPropertyBlock(); if (m_TintOnHover) { IXRHoverInteractable hoverInteractable = m_HoverInteractable; if (hoverInteractable != null && hoverInteractable.isHovered) { goto IL_0179; } } if (m_TintOnSelection) { IXRSelectInteractable selectInteractable = m_SelectInteractable; if (selectInteractable == null || !selectInteractable.isSelected) { return; } goto IL_0179; } return; IL_0179: SetTint(on: true); } protected void OnDestroy() { IXRInteractable interactable = m_Interactable; Object val = (Object)((interactable is Object) ? interactable : null); if (val != null && val != (Object)null) { if (m_HoverInteractable != null) { ((UnityEvent)m_HoverInteractable.firstHoverEntered).RemoveListener((UnityAction)OnFirstHoverEntered); ((UnityEvent)m_HoverInteractable.lastHoverExited).RemoveListener((UnityAction)OnLastHoverExited); } if (m_SelectInteractable != null) { ((UnityEvent)m_SelectInteractable.firstSelectEntered).RemoveListener((UnityAction)OnFirstSelectEntered); ((UnityEvent)m_SelectInteractable.lastSelectExited).RemoveListener((UnityAction)OnLastSelectExited); } } } protected virtual void SetTint(bool on) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) Color val = (on ? (m_TintColor * Mathf.LinearToGammaSpace(1f)) : Color.black); if (!m_EmissionEnabled && !m_HasLoggedMaterialInstance) { Debug.LogWarning((object)"Emission is not enabled on a Material used by a tint visual, a Material instance will need to be created.", (Object)(object)this); m_HasLoggedMaterialInstance = true; } foreach (Renderer tintRenderer in m_TintRenderers) { if ((Object)(object)tintRenderer == (Object)null) { continue; } if (!m_EmissionEnabled) { tintRenderer.GetMaterials(s_Materials); foreach (Material s_Material in s_Materials) { if (on) { s_Material.EnableKeyword("_EMISSION"); } else { s_Material.DisableKeyword("_EMISSION"); } } s_Materials.Clear(); } tintRenderer.GetPropertyBlock(m_TintPropertyBlock); m_TintPropertyBlock.SetColor(ShaderPropertyLookup.emissionColor, val); tintRenderer.SetPropertyBlock(m_TintPropertyBlock); } } protected virtual bool GetEmissionEnabled() { foreach (Renderer tintRenderer in m_TintRenderers) { if ((Object)(object)tintRenderer == (Object)null) { continue; } tintRenderer.GetSharedMaterials(s_Materials); foreach (Material s_Material in s_Materials) { if (!s_Material.IsKeywordEnabled("_EMISSION")) { s_Materials.Clear(); return false; } } } s_Materials.Clear(); return true; } private void OnFirstHoverEntered(HoverEnterEventArgs args) { if (m_TintOnHover) { SetTint(on: true); } } private void OnLastHoverExited(HoverExitEventArgs args) { if (m_TintOnHover) { SetTint(m_TintOnSelection && (m_SelectInteractable?.isSelected ?? false)); } } private void OnFirstSelectEntered(SelectEnterEventArgs args) { if (m_TintOnSelection) { SetTint(on: true); } } private void OnLastSelectExited(SelectExitEventArgs args) { if (m_TintOnSelection) { SetTint(m_TintOnHover && (m_HoverInteractable?.isHovered ?? false)); } } } [SelectionBase] [DefaultExecutionOrder(-98)] public abstract class XRBaseInteractable : MonoBehaviour, IXRActivateInteractable, IXRInteractable, IXRHoverInteractable, IXRSelectInteractable, IXRFocusInteractable, IXRInteractionStrengthInteractable, IXROverridesGazeAutoSelect { public enum MovementType { VelocityTracking, Kinematic, Instantaneous } public enum DistanceCalculationMode { TransformPosition, ColliderPosition, ColliderVolume } private const float k_InteractionStrengthHover = 0f; private const float k_InteractionStrengthSelect = 1f; [SerializeField] private XRInteractionManager m_InteractionManager; [SerializeField] private List m_Colliders = new List(); [SerializeField] private LayerMask m_InteractionLayerMask = LayerMask.op_Implicit(-1); [SerializeField] private InteractionLayerMask m_InteractionLayers = 1; [SerializeField] private DistanceCalculationMode m_DistanceCalculationMode = DistanceCalculationMode.ColliderPosition; [SerializeField] private InteractableSelectMode m_SelectMode; [SerializeField] private InteractableFocusMode m_FocusMode = InteractableFocusMode.Single; [SerializeField] private GameObject m_CustomReticle; [SerializeField] private bool m_AllowGazeInteraction; [SerializeField] private bool m_AllowGazeSelect; [SerializeField] private bool m_OverrideGazeTimeToSelect; [SerializeField] private float m_GazeTimeToSelect = 0.5f; [SerializeField] private bool m_OverrideTimeToAutoDeselectGaze; [SerializeField] private float m_TimeToAutoDeselectGaze = 3f; [SerializeField] private bool m_AllowGazeAssistance; [SerializeField] private HoverEnterEvent m_FirstHoverEntered = new HoverEnterEvent(); [SerializeField] private HoverExitEvent m_LastHoverExited = new HoverExitEvent(); [SerializeField] private HoverEnterEvent m_HoverEntered = new HoverEnterEvent(); [SerializeField] private HoverExitEvent m_HoverExited = new HoverExitEvent(); [SerializeField] private SelectEnterEvent m_FirstSelectEntered = new SelectEnterEvent(); [SerializeField] private SelectExitEvent m_LastSelectExited = new SelectExitEvent(); [SerializeField] private SelectEnterEvent m_SelectEntered = new SelectEnterEvent(); [SerializeField] private SelectExitEvent m_SelectExited = new SelectExitEvent(); [SerializeField] private FocusEnterEvent m_FirstFocusEntered = new FocusEnterEvent(); [SerializeField] private FocusExitEvent m_LastFocusExited = new FocusExitEvent(); [SerializeField] private FocusEnterEvent m_FocusEntered = new FocusEnterEvent(); [SerializeField] private FocusExitEvent m_FocusExited = new FocusExitEvent(); [SerializeField] private ActivateEvent m_Activated = new ActivateEvent(); [SerializeField] private DeactivateEvent m_Deactivated = new DeactivateEvent(); private readonly HashSetList m_InteractorsHovering = new HashSetList(0); private readonly HashSetList m_InteractorsSelecting = new HashSetList(0); private readonly HashSetList m_InteractionGroupsFocusing = new HashSetList(0); [SerializeField] [RequireInterface(typeof(IXRHoverFilter))] private List m_StartingHoverFilters = new List(); private readonly ExposedRegistrationList m_HoverFilters = new ExposedRegistrationList { bufferChanges = false }; [SerializeField] [RequireInterface(typeof(IXRSelectFilter))] private List m_StartingSelectFilters = new List(); private readonly ExposedRegistrationList m_SelectFilters = new ExposedRegistrationList { bufferChanges = false }; [SerializeField] [RequireInterface(typeof(IXRInteractionStrengthFilter))] private List m_StartingInteractionStrengthFilters = new List(); private readonly ExposedRegistrationList m_InteractionStrengthFilters = new ExposedRegistrationList { bufferChanges = false }; private readonly BindableVariable m_LargestInteractionStrength = new BindableVariable(0f, true, (Func)null, false); private readonly Dictionary m_AttachPoseOnSelect = new Dictionary(); private readonly Dictionary m_LocalAttachPoseOnSelect = new Dictionary(); private readonly Dictionary m_ReticleCache = new Dictionary(); private readonly HashSetList m_VariableSelectInteractors = new HashSetList(0); private readonly Dictionary m_InteractionStrengths = new Dictionary(); private XRInteractionManager m_RegisteredInteractionManager; private static readonly ProfilerMarker s_ProcessInteractionStrengthMarker = new ProfilerMarker("XRI.ProcessInteractionStrength.Interactables"); [SerializeField] [FormerlySerializedAs("m_OnFirstHoverEnter")] private XRInteractableEvent m_OnFirstHoverEntered = new XRInteractableEvent(); [SerializeField] [FormerlySerializedAs("m_OnLastHoverExit")] private XRInteractableEvent m_OnLastHoverExited = new XRInteractableEvent(); [SerializeField] [FormerlySerializedAs("m_OnHoverEnter")] private XRInteractableEvent m_OnHoverEntered = new XRInteractableEvent(); [SerializeField] [FormerlySerializedAs("m_OnHoverExit")] private XRInteractableEvent m_OnHoverExited = new XRInteractableEvent(); [SerializeField] [FormerlySerializedAs("m_OnSelectEnter")] private XRInteractableEvent m_OnSelectEntered = new XRInteractableEvent(); [SerializeField] [FormerlySerializedAs("m_OnSelectExit")] private XRInteractableEvent m_OnSelectExited = new XRInteractableEvent(); [SerializeField] [FormerlySerializedAs("m_OnSelectCancel")] private XRInteractableEvent m_OnSelectCanceled = new XRInteractableEvent(); [SerializeField] private XRInteractableEvent m_OnActivate = new XRInteractableEvent(); [SerializeField] private XRInteractableEvent m_OnDeactivate = new XRInteractableEvent(); public Func getDistanceOverride { get; set; } public XRInteractionManager interactionManager { get { return m_InteractionManager; } set { m_InteractionManager = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { RegisterWithInteractionManager(); } } } public List colliders => m_Colliders; public InteractionLayerMask interactionLayers { get { return m_InteractionLayers; } set { m_InteractionLayers = value; } } public DistanceCalculationMode distanceCalculationMode { get { return m_DistanceCalculationMode; } set { m_DistanceCalculationMode = value; } } public InteractableSelectMode selectMode { get { return m_SelectMode; } set { m_SelectMode = value; } } public InteractableFocusMode focusMode { get { return m_FocusMode; } set { m_FocusMode = value; } } public GameObject customReticle { get { return m_CustomReticle; } set { m_CustomReticle = value; } } public bool allowGazeInteraction { get { return m_AllowGazeInteraction; } set { m_AllowGazeInteraction = value; } } public bool allowGazeSelect { get { return m_AllowGazeSelect; } set { m_AllowGazeSelect = value; } } public bool overrideGazeTimeToSelect { get { return m_OverrideGazeTimeToSelect; } set { m_OverrideGazeTimeToSelect = value; } } public float gazeTimeToSelect { get { return m_GazeTimeToSelect; } set { m_GazeTimeToSelect = value; } } public bool overrideTimeToAutoDeselectGaze { get { return m_OverrideTimeToAutoDeselectGaze; } set { m_OverrideTimeToAutoDeselectGaze = value; } } public float timeToAutoDeselectGaze { get { return m_TimeToAutoDeselectGaze; } set { m_TimeToAutoDeselectGaze = value; } } public bool allowGazeAssistance { get { return m_AllowGazeAssistance; } set { m_AllowGazeAssistance = value; } } public HoverEnterEvent firstHoverEntered { get { return m_FirstHoverEntered; } set { m_FirstHoverEntered = value; } } public HoverExitEvent lastHoverExited { get { return m_LastHoverExited; } set { m_LastHoverExited = value; } } public HoverEnterEvent hoverEntered { get { return m_HoverEntered; } set { m_HoverEntered = value; } } public HoverExitEvent hoverExited { get { return m_HoverExited; } set { m_HoverExited = value; } } public SelectEnterEvent firstSelectEntered { get { return m_FirstSelectEntered; } set { m_FirstSelectEntered = value; } } public SelectExitEvent lastSelectExited { get { return m_LastSelectExited; } set { m_LastSelectExited = value; } } public SelectEnterEvent selectEntered { get { return m_SelectEntered; } set { m_SelectEntered = value; } } public SelectExitEvent selectExited { get { return m_SelectExited; } set { m_SelectExited = value; } } public FocusEnterEvent firstFocusEntered { get { return m_FirstFocusEntered; } set { m_FirstFocusEntered = value; } } public FocusExitEvent lastFocusExited { get { return m_LastFocusExited; } set { m_LastFocusExited = value; } } public FocusEnterEvent focusEntered { get { return m_FocusEntered; } set { m_FocusEntered = value; } } public FocusExitEvent focusExited { get { return m_FocusExited; } set { m_FocusExited = value; } } public ActivateEvent activated { get { return m_Activated; } set { m_Activated = value; } } public DeactivateEvent deactivated { get { return m_Deactivated; } set { m_Deactivated = value; } } public List interactorsHovering => (List)m_InteractorsHovering.AsList(); public bool isHovered => m_InteractorsHovering.Count > 0; public List interactorsSelecting => (List)m_InteractorsSelecting.AsList(); public IXRSelectInteractor firstInteractorSelecting { get; private set; } public bool isSelected => m_InteractorsSelecting.Count > 0; public List interactionGroupsFocusing => (List)m_InteractionGroupsFocusing.AsList(); public IXRInteractionGroup firstInteractionGroupFocusing { get; private set; } public bool isFocused => m_InteractionGroupsFocusing.Count > 0; public bool canFocus => m_FocusMode != InteractableFocusMode.None; public List startingHoverFilters { get { return m_StartingHoverFilters; } set { m_StartingHoverFilters = value; } } public IXRFilterList hoverFilters => m_HoverFilters; public List startingSelectFilters { get { return m_StartingSelectFilters; } set { m_StartingSelectFilters = value; } } public IXRFilterList selectFilters => m_SelectFilters; public List startingInteractionStrengthFilters { get { return m_StartingInteractionStrengthFilters; } set { m_StartingInteractionStrengthFilters = value; } } public IXRFilterList interactionStrengthFilters => m_InteractionStrengthFilters; public IReadOnlyBindableVariable largestInteractionStrength => (IReadOnlyBindableVariable)(object)m_LargestInteractionStrength; [Obsolete("interactionLayerMask has been deprecated. Use interactionLayers instead.")] public LayerMask interactionLayerMask { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_InteractionLayerMask; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_InteractionLayerMask = value; } } [Obsolete("onFirstHoverEntered has been deprecated. Use firstHoverEntered with updated signature instead.")] public XRInteractableEvent onFirstHoverEntered { get { return m_OnFirstHoverEntered; } set { m_OnFirstHoverEntered = value; } } [Obsolete("onLastHoverExited has been deprecated. Use lastHoverExited with updated signature instead.")] public XRInteractableEvent onLastHoverExited { get { return m_OnLastHoverExited; } set { m_OnLastHoverExited = value; } } [Obsolete("onHoverEntered has been deprecated. Use hoverEntered with updated signature instead.")] public XRInteractableEvent onHoverEntered { get { return m_OnHoverEntered; } set { m_OnHoverEntered = value; } } [Obsolete("onHoverExited has been deprecated. Use hoverExited with updated signature instead.")] public XRInteractableEvent onHoverExited { get { return m_OnHoverExited; } set { m_OnHoverExited = value; } } [Obsolete("onSelectEntered has been deprecated. Use selectEntered with updated signature instead.")] public XRInteractableEvent onSelectEntered { get { return m_OnSelectEntered; } set { m_OnSelectEntered = value; } } [Obsolete("onSelectExited has been deprecated. Use selectExited with updated signature and check for !args.isCanceled instead.")] public XRInteractableEvent onSelectExited { get { return m_OnSelectExited; } set { m_OnSelectExited = value; } } [Obsolete("onSelectCanceled has been deprecated. Use selectExited with updated signature and check for args.isCanceled instead.")] public XRInteractableEvent onSelectCanceled { get { return m_OnSelectCanceled; } set { m_OnSelectCanceled = value; } } [Obsolete("onActivate has been deprecated. Use activated with updated signature instead.")] public XRInteractableEvent onActivate { get { return m_OnActivate; } set { m_OnActivate = value; } } [Obsolete("onDeactivate has been deprecated. Use deactivated with updated signature instead.")] public XRInteractableEvent onDeactivate { get { return m_OnDeactivate; } set { m_OnDeactivate = value; } } [Obsolete("onFirstHoverEnter has been deprecated. Use onFirstHoverEntered instead. (UnityUpgradable) -> onFirstHoverEntered")] public XRInteractableEvent onFirstHoverEnter => onFirstHoverEntered; [Obsolete("onHoverEnter has been deprecated. Use onHoverEntered instead. (UnityUpgradable) -> onHoverEntered")] public XRInteractableEvent onHoverEnter => onHoverEntered; [Obsolete("onHoverExit has been deprecated. Use onHoverExited instead. (UnityUpgradable) -> onHoverExited")] public XRInteractableEvent onHoverExit => onHoverExited; [Obsolete("onLastHoverExit has been deprecated. Use onLastHoverExited instead. (UnityUpgradable) -> onLastHoverExited")] public XRInteractableEvent onLastHoverExit => onLastHoverExited; [Obsolete("onSelectEnter has been deprecated. Use onSelectEntered instead. (UnityUpgradable) -> onSelectEntered")] public XRInteractableEvent onSelectEnter => onSelectEntered; [Obsolete("onSelectExit has been deprecated. Use onSelectExited instead. (UnityUpgradable) -> onSelectExited")] public XRInteractableEvent onSelectExit => onSelectExited; [Obsolete("onSelectCancel has been deprecated. Use onSelectCanceled instead. (UnityUpgradable) -> onSelectCanceled")] public XRInteractableEvent onSelectCancel => onSelectCanceled; [Obsolete("hoveringInteractors has been deprecated. Use interactorsHovering instead.")] public List hoveringInteractors { get; } = new List(); [Obsolete("selectingInteractor has been deprecated. Use interactorsSelecting, GetOldestInteractorSelecting, or isSelected for similar functionality.")] public XRBaseInteractor selectingInteractor { get { if (!isSelected) { return null; } return interactorsSelecting[0] as XRBaseInteractor; } protected set { if (isSelected) { interactorsSelecting[0] = value; } else { interactorsSelecting.Add(value); } } } public event Action registered; public event Action unregistered; [Conditional("UNITY_EDITOR")] protected virtual void Reset() { } protected virtual void Awake() { if (m_Colliders.Count == 0) { ((Component)this).GetComponentsInChildren(m_Colliders); m_Colliders.RemoveAll((Collider col) => col.isTrigger); } m_HoverFilters.RegisterReferences(m_StartingHoverFilters, (Object)(object)this); m_SelectFilters.RegisterReferences(m_StartingSelectFilters, (Object)(object)this); m_InteractionStrengthFilters.RegisterReferences(m_StartingInteractionStrengthFilters, (Object)(object)this); FindCreateInteractionManager(); if (((UnityEventBase)m_OnFirstHoverEntered).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnLastHoverExited).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnHoverEntered).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnHoverExited).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnSelectEntered).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnSelectExited).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnSelectCanceled).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnActivate).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnDeactivate).GetPersistentEventCount() > 0) { Debug.LogWarning((object)"Some deprecated Interactable Events are being used. These deprecated events will be removed in a future version. Please convert these to use the newer events, and update script method signatures for Dynamic listeners.", (Object)(object)this); } } protected virtual void OnEnable() { FindCreateInteractionManager(); RegisterWithInteractionManager(); } protected virtual void OnDisable() { UnregisterWithInteractionManager(); } protected virtual void OnDestroy() { } private void FindCreateInteractionManager() { if (!((Object)(object)m_InteractionManager != (Object)null)) { m_InteractionManager = ComponentLocatorUtility.FindOrCreateComponent(); } } private void RegisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)(object)m_InteractionManager)) { UnregisterWithInteractionManager(); if ((Object)(object)m_InteractionManager != (Object)null) { m_InteractionManager.RegisterInteractable(this); m_RegisteredInteractionManager = m_InteractionManager; } } } private void UnregisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)null)) { m_RegisteredInteractionManager.UnregisterInteractable(this); m_RegisteredInteractionManager = null; } } public virtual Transform GetAttachTransform(IXRInteractor interactor) { return ((Component)this).transform; } public Pose GetAttachPoseOnSelect(IXRSelectInteractor interactor) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (!m_AttachPoseOnSelect.TryGetValue(interactor, out var value)) { return Pose.identity; } return value; } public Pose GetLocalAttachPoseOnSelect(IXRSelectInteractor interactor) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (!m_LocalAttachPoseOnSelect.TryGetValue(interactor, out var value)) { return Pose.identity; } return value; } public virtual float GetDistanceSqrToInteractor(IXRInteractor interactor) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform val = interactor?.GetAttachTransform(this); if ((Object)(object)val == (Object)null) { return float.MaxValue; } Vector3 position = val.position; return GetDistance(position).distanceSqr; } public virtual DistanceInfo GetDistance(Vector3 position) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) if (getDistanceOverride != null) { return getDistanceOverride(this, position); } DistanceInfo distanceInfo; switch (m_DistanceCalculationMode) { default: { Vector3 position2 = ((Component)this).transform.position; Vector3 val = position2 - position; return new DistanceInfo { point = position2, distanceSqr = ((Vector3)(ref val)).sqrMagnitude }; } case DistanceCalculationMode.ColliderPosition: XRInteractableUtility.TryGetClosestCollider(this, position, out distanceInfo); return distanceInfo; case DistanceCalculationMode.ColliderVolume: XRInteractableUtility.TryGetClosestPointOnCollider(this, position, out distanceInfo); return distanceInfo; } } public float GetInteractionStrength(IXRInteractor interactor) { if (m_InteractionStrengths.TryGetValue(interactor, out var value)) { return value; } return 0f; } public virtual bool IsHoverableBy(IXRHoverInteractor interactor) { if (!m_AllowGazeInteraction) { return !(interactor is XRGazeInteractor); } return true; } public virtual bool IsSelectableBy(IXRSelectInteractor interactor) { if (!m_AllowGazeInteraction || !m_AllowGazeSelect) { return !(interactor is XRGazeInteractor); } return true; } public bool IsHovered(IXRHoverInteractor interactor) { return m_InteractorsHovering.Contains(interactor); } public bool IsSelected(IXRSelectInteractor interactor) { return m_InteractorsSelecting.Contains(interactor); } protected bool IsHovered(IXRInteractor interactor) { if (interactor is IXRHoverInteractor interactor2) { return IsHovered(interactor2); } return false; } protected bool IsSelected(IXRInteractor interactor) { if (interactor is IXRSelectInteractor interactor2) { return IsSelected(interactor2); } return false; } public virtual GameObject GetCustomReticle(IXRInteractor interactor) { if (m_ReticleCache.TryGetValue(interactor, out var value)) { return value; } return null; } public virtual void AttachCustomReticle(IXRInteractor interactor) { Transform val = interactor?.transform; if ((Object)(object)val == (Object)null) { return; } IXRCustomReticleProvider component = ((Component)val).GetComponent(); if (component != null) { if (m_ReticleCache.TryGetValue(interactor, out var value)) { Object.Destroy((Object)(object)value); m_ReticleCache.Remove(interactor); } if ((Object)(object)m_CustomReticle != (Object)null) { GameObject val2 = Object.Instantiate(m_CustomReticle); m_ReticleCache.Add(interactor, val2); component.AttachCustomReticle(val2); val2.GetComponent()?.OnReticleAttached(this, component); } } } public virtual void RemoveCustomReticle(IXRInteractor interactor) { Transform val = interactor?.transform; if (!((Object)(object)val == (Object)null)) { IXRCustomReticleProvider component = ((Component)val).GetComponent(); if (component != null && m_ReticleCache.TryGetValue(interactor, out var value)) { value.GetComponent()?.OnReticleDetaching(); Object.Destroy((Object)(object)value); m_ReticleCache.Remove(interactor); component.RemoveCustomReticle(); } } } protected void CaptureAttachPose(IXRSelectInteractor interactor) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Transform attachTransform = GetAttachTransform(interactor); if ((Object)(object)attachTransform != (Object)null) { m_AttachPoseOnSelect[interactor] = new Pose(attachTransform.position, attachTransform.rotation); m_LocalAttachPoseOnSelect[interactor] = new Pose(attachTransform.localPosition, attachTransform.localRotation); } else { m_AttachPoseOnSelect.Remove(interactor); m_LocalAttachPoseOnSelect.Remove(interactor); } } public virtual void ProcessInteractable(XRInteractionUpdateOrder.UpdatePhase updatePhase) { } void IXRInteractionStrengthInteractable.ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase) { ProcessInteractionStrength(updatePhase); } void IXRInteractable.OnRegistered(InteractableRegisteredEventArgs args) { OnRegistered(args); } void IXRInteractable.OnUnregistered(InteractableUnregisteredEventArgs args) { OnUnregistered(args); } void IXRActivateInteractable.OnActivated(ActivateEventArgs args) { OnActivated(args); } void IXRActivateInteractable.OnDeactivated(DeactivateEventArgs args) { OnDeactivated(args); } bool IXRHoverInteractable.IsHoverableBy(IXRHoverInteractor interactor) { if (interactor is XRBaseInteractor interactor2) { if (IsHoverableBy(interactor2)) { return ProcessHoverFilters(interactor); } return false; } if (IsHoverableBy(interactor)) { return ProcessHoverFilters(interactor); } return false; } void IXRHoverInteractable.OnHoverEntering(HoverEnterEventArgs args) { OnHoverEntering(args); } void IXRHoverInteractable.OnHoverEntered(HoverEnterEventArgs args) { OnHoverEntered(args); } void IXRHoverInteractable.OnHoverExiting(HoverExitEventArgs args) { OnHoverExiting(args); } void IXRHoverInteractable.OnHoverExited(HoverExitEventArgs args) { OnHoverExited(args); } bool IXRSelectInteractable.IsSelectableBy(IXRSelectInteractor interactor) { if (interactor is XRBaseInteractor interactor2) { if (IsSelectableBy(interactor2)) { return ProcessSelectFilters(interactor); } return false; } if (IsSelectableBy(interactor)) { return ProcessSelectFilters(interactor); } return false; } void IXRSelectInteractable.OnSelectEntering(SelectEnterEventArgs args) { OnSelectEntering(args); } void IXRSelectInteractable.OnSelectEntered(SelectEnterEventArgs args) { OnSelectEntered(args); } void IXRSelectInteractable.OnSelectExiting(SelectExitEventArgs args) { OnSelectExiting(args); } void IXRSelectInteractable.OnSelectExited(SelectExitEventArgs args) { OnSelectExited(args); } void IXRFocusInteractable.OnFocusEntering(FocusEnterEventArgs args) { OnFocusEntering(args); } void IXRFocusInteractable.OnFocusEntered(FocusEnterEventArgs args) { OnFocusEntered(args); } void IXRFocusInteractable.OnFocusExiting(FocusExitEventArgs args) { OnFocusExiting(args); } void IXRFocusInteractable.OnFocusExited(FocusExitEventArgs args) { OnFocusExited(args); } protected virtual void OnRegistered(InteractableRegisteredEventArgs args) { if ((Object)(object)args.manager != (Object)(object)m_InteractionManager) { Debug.LogWarning((object)("An Interactable was registered with an unexpected XRInteractionManager." + $" {this} was expecting to communicate with \"{m_InteractionManager}\" but was registered with \"{args.manager}\"."), (Object)(object)this); } this.registered?.Invoke(args); } protected virtual void OnUnregistered(InteractableUnregisteredEventArgs args) { if ((Object)(object)args.manager != (Object)(object)m_RegisteredInteractionManager) { Debug.LogWarning((object)("An Interactable was unregistered from an unexpected XRInteractionManager." + $" {this} was expecting to communicate with \"{m_RegisteredInteractionManager}\" but was unregistered from \"{args.manager}\"."), (Object)(object)this); } this.unregistered?.Invoke(args); } protected virtual void OnHoverEntering(HoverEnterEventArgs args) { if ((Object)(object)m_CustomReticle != (Object)null) { if (args.interactorObject is XRBaseInteractor interactor) { AttachCustomReticle(interactor); } else { AttachCustomReticle(args.interactorObject); } } m_InteractorsHovering.Add(args.interactorObject); if (args.interactorObject is XRBaseControllerInteractor xRBaseControllerInteractor) { m_VariableSelectInteractors.Add(xRBaseControllerInteractor); } hoveringInteractors.Add(args.interactor); OnHoverEntering(args.interactor); } protected virtual void OnHoverEntered(HoverEnterEventArgs args) { if (m_InteractorsHovering.Count == 1) { ((UnityEvent)m_FirstHoverEntered)?.Invoke(args); } ((UnityEvent)m_HoverEntered)?.Invoke(args); OnHoverEntered(args.interactor); } protected virtual void OnHoverExiting(HoverExitEventArgs args) { if ((Object)(object)m_CustomReticle != (Object)null) { if (args.interactorObject is XRBaseInteractor interactor) { RemoveCustomReticle(interactor); } else { RemoveCustomReticle(args.interactorObject); } } m_InteractorsHovering.Remove(args.interactorObject); if (m_VariableSelectInteractors.Count > 0 && args.interactorObject is XRBaseControllerInteractor xRBaseControllerInteractor && !IsSelected(xRBaseControllerInteractor)) { m_VariableSelectInteractors.Remove(xRBaseControllerInteractor); } hoveringInteractors.Remove(args.interactor); OnHoverExiting(args.interactor); } protected virtual void OnHoverExited(HoverExitEventArgs args) { if (m_InteractorsHovering.Count == 0) { ((UnityEvent)m_LastHoverExited)?.Invoke(args); } ((UnityEvent)m_HoverExited)?.Invoke(args); OnHoverExited(args.interactor); } protected virtual void OnSelectEntering(SelectEnterEventArgs args) { m_InteractorsSelecting.Add(args.interactorObject); if (args.interactorObject is XRBaseControllerInteractor xRBaseControllerInteractor) { m_VariableSelectInteractors.Add(xRBaseControllerInteractor); } if (m_InteractorsSelecting.Count == 1) { firstInteractorSelecting = args.interactorObject; } CaptureAttachPose(args.interactorObject); OnSelectEntering(args.interactor); } protected virtual void OnSelectEntered(SelectEnterEventArgs args) { if (m_InteractorsSelecting.Count == 1) { ((UnityEvent)m_FirstSelectEntered)?.Invoke(args); } ((UnityEvent)m_SelectEntered)?.Invoke(args); OnSelectEntered(args.interactor); } protected virtual void OnSelectExiting(SelectExitEventArgs args) { m_InteractorsSelecting.Remove(args.interactorObject); if (m_VariableSelectInteractors.Count > 0 && args.interactorObject is XRBaseControllerInteractor xRBaseControllerInteractor && !IsHovered(xRBaseControllerInteractor)) { m_VariableSelectInteractors.Remove(xRBaseControllerInteractor); } if (args.isCanceled) { OnSelectCanceling(args.interactor); } else { OnSelectExiting(args.interactor); } } protected virtual void OnSelectExited(SelectExitEventArgs args) { if (m_InteractorsSelecting.Count == 0) { ((UnityEvent)m_LastSelectExited)?.Invoke(args); } ((UnityEvent)m_SelectExited)?.Invoke(args); if (args.isCanceled) { OnSelectCanceled(args.interactor); } else { OnSelectExited(args.interactor); } if (m_InteractorsSelecting.Count == 0) { firstInteractorSelecting = null; m_AttachPoseOnSelect.Clear(); m_LocalAttachPoseOnSelect.Clear(); } } protected virtual void OnFocusEntering(FocusEnterEventArgs args) { m_InteractionGroupsFocusing.Add(args.interactionGroup); if (m_InteractionGroupsFocusing.Count == 1) { firstInteractionGroupFocusing = args.interactionGroup; } } protected virtual void OnFocusEntered(FocusEnterEventArgs args) { if (m_InteractionGroupsFocusing.Count == 1) { ((UnityEvent)m_FirstFocusEntered)?.Invoke(args); } ((UnityEvent)m_FocusEntered)?.Invoke(args); } protected virtual void OnFocusExiting(FocusExitEventArgs args) { m_InteractionGroupsFocusing.Remove(args.interactionGroup); } protected virtual void OnFocusExited(FocusExitEventArgs args) { if (m_InteractionGroupsFocusing.Count == 0) { ((UnityEvent)m_LastFocusExited)?.Invoke(args); } ((UnityEvent)m_FocusExited)?.Invoke(args); if (m_InteractionGroupsFocusing.Count == 0) { firstInteractionGroupFocusing = null; } } protected virtual void OnActivated(ActivateEventArgs args) { ((UnityEvent)m_Activated)?.Invoke(args); OnActivate(args.interactor); } protected virtual void OnDeactivated(DeactivateEventArgs args) { ((UnityEvent)m_Deactivated)?.Invoke(args); OnDeactivate(args.interactor); } protected unsafe virtual void ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) float num = 0f; ProfilerMarker val = s_ProcessInteractionStrengthMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { m_InteractionStrengths.Clear(); int i = 0; for (int count = m_InteractorsSelecting.Count; i < count; i++) { IXRSelectInteractor iXRSelectInteractor = m_InteractorsSelecting[i]; if (!(iXRSelectInteractor is XRBaseControllerInteractor)) { float num2 = ProcessInteractionStrengthFilters(iXRSelectInteractor, 1f); m_InteractionStrengths[iXRSelectInteractor] = num2; num = Mathf.Max(num, num2); } } int j = 0; for (int count2 = m_InteractorsHovering.Count; j < count2; j++) { IXRHoverInteractor iXRHoverInteractor = m_InteractorsHovering[j]; if (!(iXRHoverInteractor is XRBaseControllerInteractor) && !IsSelected(iXRHoverInteractor)) { float num3 = ProcessInteractionStrengthFilters(iXRHoverInteractor, 0f); m_InteractionStrengths[iXRHoverInteractor] = num3; num = Mathf.Max(num, num3); } } int k = 0; for (int count3 = m_VariableSelectInteractors.Count; k < count3; k++) { XRBaseControllerInteractor xRBaseControllerInteractor = m_VariableSelectInteractors[k]; float interactionStrength = (((Object)(object)xRBaseControllerInteractor.xrController != (Object)null) ? xRBaseControllerInteractor.xrController.selectInteractionState.value : (IsSelected(xRBaseControllerInteractor) ? 1f : 0f)); interactionStrength = ProcessInteractionStrengthFilters(xRBaseControllerInteractor, interactionStrength); m_InteractionStrengths[xRBaseControllerInteractor] = interactionStrength; num = Mathf.Max(num, interactionStrength); } } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } ((BindableVariableBase)(object)m_LargestInteractionStrength).Value = num; } protected bool ProcessHoverFilters(IXRHoverInteractor interactor) { return XRFilterUtility.Process(m_HoverFilters, interactor, this); } protected bool ProcessSelectFilters(IXRSelectInteractor interactor) { return XRFilterUtility.Process(m_SelectFilters, interactor, this); } protected float ProcessInteractionStrengthFilters(IXRInteractor interactor, float interactionStrength) { return XRFilterUtility.Process(m_InteractionStrengthFilters, interactor, this, interactionStrength); } [Obsolete("OnHoverEntering(XRBaseInteractor) has been deprecated. Use OnHoverEntering(HoverEnterEventArgs) instead.")] protected virtual void OnHoverEntering(XRBaseInteractor interactor) { } [Obsolete("OnHoverEntered(XRBaseInteractor) has been deprecated. Use OnHoverEntered(HoverEnterEventArgs) instead.")] protected virtual void OnHoverEntered(XRBaseInteractor interactor) { if (hoveringInteractors.Count == 1) { ((UnityEvent)m_OnFirstHoverEntered)?.Invoke(interactor); } ((UnityEvent)m_OnHoverEntered)?.Invoke(interactor); } [Obsolete("OnHoverExiting(XRBaseInteractor) has been deprecated. Use OnHoverExiting(HoverExitEventArgs) instead.")] protected virtual void OnHoverExiting(XRBaseInteractor interactor) { } [Obsolete("OnHoverExited(XRBaseInteractor) has been deprecated. Use OnHoverExited(HoverExitEventArgs) instead.")] protected virtual void OnHoverExited(XRBaseInteractor interactor) { if (hoveringInteractors.Count == 0) { ((UnityEvent)m_OnLastHoverExited)?.Invoke(interactor); } ((UnityEvent)m_OnHoverExited)?.Invoke(interactor); } [Obsolete("OnSelectEntering(XRBaseInteractor) has been deprecated. Use OnSelectEntering(SelectEnterEventArgs) instead.")] protected virtual void OnSelectEntering(XRBaseInteractor interactor) { } [Obsolete("OnSelectEntered(XRBaseInteractor) has been deprecated. Use OnSelectEntered(SelectEnterEventArgs) instead.")] protected virtual void OnSelectEntered(XRBaseInteractor interactor) { ((UnityEvent)m_OnSelectEntered)?.Invoke(interactor); } [Obsolete("OnSelectExiting(XRBaseInteractor) has been deprecated. Use OnSelectExiting(SelectExitEventArgs) and check for !args.isCanceled instead.")] protected virtual void OnSelectExiting(XRBaseInteractor interactor) { } [Obsolete("OnSelectExited(XRBaseInteractor) has been deprecated. Use OnSelectExited(SelectExitEventArgs) and check for !args.isCanceled instead.")] protected virtual void OnSelectExited(XRBaseInteractor interactor) { ((UnityEvent)m_OnSelectExited)?.Invoke(interactor); } [Obsolete("OnSelectCanceling(XRBaseInteractor) has been deprecated. Use OnSelectExiting(SelectExitEventArgs) and check for args.isCanceled instead.")] protected virtual void OnSelectCanceling(XRBaseInteractor interactor) { } [Obsolete("OnSelectCanceled(XRBaseInteractor) has been deprecated. Use OnSelectExited(SelectExitEventArgs) and check for args.isCanceled instead.")] protected virtual void OnSelectCanceled(XRBaseInteractor interactor) { ((UnityEvent)m_OnSelectCanceled)?.Invoke(interactor); } [Obsolete("OnActivate(XRBaseInteractor) has been deprecated. Use OnActivated(ActivateEventArgs) instead.")] protected virtual void OnActivate(XRBaseInteractor interactor) { ((UnityEvent)m_OnActivate)?.Invoke(interactor); } [Obsolete("OnDeactivate(XRBaseInteractor) has been deprecated. Use OnDeactivated(DeactivateEventArgs) instead.")] protected virtual void OnDeactivate(XRBaseInteractor interactor) { ((UnityEvent)m_OnDeactivate)?.Invoke(interactor); } [Obsolete("GetDistanceSqrToInteractor(XRBaseInteractor) has been deprecated. Use GetDistanceSqrToInteractor(IXRInteractor) instead.")] public virtual float GetDistanceSqrToInteractor(XRBaseInteractor interactor) { return GetDistanceSqrToInteractor((IXRInteractor)interactor); } [Obsolete("AttachCustomReticle(XRBaseInteractor) has been deprecated. Use AttachCustomReticle(IXRInteractor) instead.")] public virtual void AttachCustomReticle(XRBaseInteractor interactor) { AttachCustomReticle((IXRInteractor)interactor); } [Obsolete("RemoveCustomReticle(XRBaseInteractor) has been deprecated. Use RemoveCustomReticle(IXRInteractor) instead.")] public virtual void RemoveCustomReticle(XRBaseInteractor interactor) { RemoveCustomReticle((IXRInteractor)interactor); } [Obsolete("IsHoverableBy(XRBaseInteractor) has been deprecated. Use IsHoverableBy(IXRHoverInteractor) instead.")] public virtual bool IsHoverableBy(XRBaseInteractor interactor) { return IsHoverableBy((IXRHoverInteractor)interactor); } [Obsolete("IsSelectableBy(XRBaseInteractor) has been deprecated. Use IsSelectableBy(IXRSelectInteractor) instead.")] public virtual bool IsSelectableBy(XRBaseInteractor interactor) { return IsSelectableBy((IXRSelectInteractor)interactor); } Transform IXRInteractable.get_transform() { return ((Component)this).transform; } } [SelectionBase] [DisallowMultipleComponent] [RequireComponent(typeof(Rigidbody))] [AddComponentMenu("XR/XR Grab Interactable", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRGrabInteractable.html")] public class XRGrabInteractable : XRBaseInteractable { public enum AttachPointCompatibilityMode { Default, Legacy } private const float k_DefaultTighteningAmount = 0.1f; private const float k_DefaultSmoothingAmount = 8f; private const float k_LinearVelocityDamping = 1f; private const float k_LinearVelocityScale = 1f; private const float k_AngularVelocityDamping = 1f; private const float k_AngularVelocityScale = 1f; private const int k_ThrowSmoothingFrameCount = 20; private const float k_DefaultAttachEaseInTime = 0.15f; private const float k_DefaultThrowSmoothingDuration = 0.25f; private const float k_DefaultThrowLinearVelocityScale = 1.5f; private const float k_DefaultThrowAngularVelocityScale = 1f; private const float k_DeltaTimeThreshold = 0.001f; [SerializeField] private Transform m_AttachTransform; [SerializeField] private Transform m_SecondaryAttachTransform; [SerializeField] private bool m_UseDynamicAttach; [SerializeField] private bool m_MatchAttachPosition = true; [SerializeField] private bool m_MatchAttachRotation = true; [SerializeField] private bool m_SnapToColliderVolume = true; [SerializeField] private bool m_ReinitializeDynamicAttachEverySingleGrab = true; [SerializeField] private float m_AttachEaseInTime = 0.15f; [SerializeField] private MovementType m_MovementType = MovementType.Instantaneous; [SerializeField] [Range(0f, 1f)] private float m_VelocityDamping = 1f; [SerializeField] private float m_VelocityScale = 1f; [SerializeField] [Range(0f, 1f)] private float m_AngularVelocityDamping = 1f; [SerializeField] private float m_AngularVelocityScale = 1f; [SerializeField] private bool m_TrackPosition = true; [SerializeField] private bool m_SmoothPosition; [SerializeField] [Range(0f, 20f)] private float m_SmoothPositionAmount = 8f; [SerializeField] [Range(0f, 1f)] private float m_TightenPosition = 0.1f; [SerializeField] private bool m_TrackRotation = true; [SerializeField] private bool m_SmoothRotation; [SerializeField] [Range(0f, 20f)] private float m_SmoothRotationAmount = 8f; [SerializeField] [Range(0f, 1f)] private float m_TightenRotation = 0.1f; [SerializeField] private bool m_TrackScale = true; [SerializeField] private bool m_SmoothScale; [SerializeField] [Range(0f, 20f)] private float m_SmoothScaleAmount = 8f; [SerializeField] [Range(0f, 1f)] private float m_TightenScale = 0.1f; [SerializeField] private bool m_ThrowOnDetach = true; [SerializeField] private float m_ThrowSmoothingDuration = 0.25f; [SerializeField] private AnimationCurve m_ThrowSmoothingCurve = AnimationCurve.Linear(1f, 1f, 1f, 0f); [SerializeField] private float m_ThrowVelocityScale = 1.5f; [SerializeField] private float m_ThrowAngularVelocityScale = 1f; [SerializeField] [FormerlySerializedAs("m_GravityOnDetach")] private bool m_ForceGravityOnDetach; [SerializeField] private bool m_RetainTransformParent = true; [SerializeField] private AttachPointCompatibilityMode m_AttachPointCompatibilityMode; [SerializeField] private List m_StartingSingleGrabTransformers = new List(); [SerializeField] private List m_StartingMultipleGrabTransformers = new List(); [SerializeField] private bool m_AddDefaultGrabTransformers = true; private readonly SmallRegistrationList m_SingleGrabTransformers = new SmallRegistrationList(); private readonly SmallRegistrationList m_MultipleGrabTransformers = new SmallRegistrationList(); private List m_GrabTransformersAddedWhenGrabbed; private bool m_GrabCountChanged; private (int, int) m_GrabCountBeforeAndAfterChange; private bool m_IsProcessingGrabTransformers; private int m_DropTransformersCount; private static readonly LinkedPool s_DropEventArgs = new LinkedPool(() => new DropEventArgs(), null, null, null, collectionCheck: false); private Pose m_TargetPose; private Vector3 m_TargetLocalScale; private bool m_IsTargetPoseDirty; private bool m_IsTargetLocalScaleDirty; private float m_CurrentAttachEaseTime; private MovementType m_CurrentMovementType; private bool m_DetachInLateUpdate; private Vector3 m_DetachLinearVelocity; private Vector3 m_DetachAngularVelocity; private int m_ThrowSmoothingCurrentFrame; private readonly float[] m_ThrowSmoothingFrameTimes = new float[20]; private readonly Vector3[] m_ThrowSmoothingLinearVelocityFrames = (Vector3[])(object)new Vector3[20]; private readonly Vector3[] m_ThrowSmoothingAngularVelocityFrames = (Vector3[])(object)new Vector3[20]; private bool m_ThrowSmoothingFirstUpdate; private Pose m_LastThrowReferencePose; private IXRAimAssist m_ThrowAssist; private Rigidbody m_Rigidbody; private bool m_WasKinematic; private bool m_UsedGravity; private float m_OldLinearDamping; private float m_OldAngularDamping; private bool m_IgnoringCharacterCollision; private bool m_StopIgnoringCollisionInLateUpdate; private CharacterController m_SelectingCharacterController; private readonly HashSet m_SelectingCharacterInteractors = new HashSet(); private readonly List m_RigidbodyColliders = new List(); private readonly HashSet m_CollidersThatAllowedCharacterCollision = new HashSet(); private Transform m_OriginalSceneParent; private TeleportationMonitor m_TeleportationMonitor; private readonly Dictionary m_DynamicAttachTransforms = new Dictionary(); private static readonly LinkedPool s_DynamicAttachTransformPool = new LinkedPool(OnCreatePooledItem, OnGetPooledItem, OnReleasePooledItem, OnDestroyPooledItem); private static readonly ProfilerMarker s_ProcessGrabTransformersMarker = new ProfilerMarker("XRI.ProcessGrabTransformers"); public Transform attachTransform { get { return m_AttachTransform; } set { m_AttachTransform = value; } } public Transform secondaryAttachTransform { get { return m_SecondaryAttachTransform; } set { m_SecondaryAttachTransform = value; } } public bool useDynamicAttach { get { return m_UseDynamicAttach; } set { m_UseDynamicAttach = value; } } public bool matchAttachPosition { get { return m_MatchAttachPosition; } set { m_MatchAttachPosition = value; } } public bool matchAttachRotation { get { return m_MatchAttachRotation; } set { m_MatchAttachRotation = value; } } public bool snapToColliderVolume { get { return m_SnapToColliderVolume; } set { m_SnapToColliderVolume = value; } } public bool reinitializeDynamicAttachEverySingleGrab { get { return m_ReinitializeDynamicAttachEverySingleGrab; } set { m_ReinitializeDynamicAttachEverySingleGrab = value; } } public float attachEaseInTime { get { return m_AttachEaseInTime; } set { m_AttachEaseInTime = value; } } public MovementType movementType { get { return m_MovementType; } set { m_MovementType = value; if (base.isSelected) { SetupRigidbodyDrop(m_Rigidbody); UpdateCurrentMovementType(); SetupRigidbodyGrab(m_Rigidbody); } } } public float velocityDamping { get { return m_VelocityDamping; } set { m_VelocityDamping = value; } } public float velocityScale { get { return m_VelocityScale; } set { m_VelocityScale = value; } } public float angularVelocityDamping { get { return m_AngularVelocityDamping; } set { m_AngularVelocityDamping = value; } } public float angularVelocityScale { get { return m_AngularVelocityScale; } set { m_AngularVelocityScale = value; } } public bool trackPosition { get { return m_TrackPosition; } set { m_TrackPosition = value; } } public bool smoothPosition { get { return m_SmoothPosition; } set { m_SmoothPosition = value; } } public float smoothPositionAmount { get { return m_SmoothPositionAmount; } set { m_SmoothPositionAmount = value; } } public float tightenPosition { get { return m_TightenPosition; } set { m_TightenPosition = value; } } public bool trackRotation { get { return m_TrackRotation; } set { m_TrackRotation = value; } } public bool smoothRotation { get { return m_SmoothRotation; } set { m_SmoothRotation = value; } } public float smoothRotationAmount { get { return m_SmoothRotationAmount; } set { m_SmoothRotationAmount = value; } } public float tightenRotation { get { return m_TightenRotation; } set { m_TightenRotation = value; } } public bool trackScale { get { return m_TrackScale; } set { m_TrackScale = value; } } public bool smoothScale { get { return m_SmoothScale; } set { m_SmoothScale = value; } } public float smoothScaleAmount { get { return m_SmoothScaleAmount; } set { m_SmoothScaleAmount = value; } } public float tightenScale { get { return m_TightenScale; } set { m_TightenScale = value; } } public bool throwOnDetach { get { return m_ThrowOnDetach; } set { m_ThrowOnDetach = value; } } public float throwSmoothingDuration { get { return m_ThrowSmoothingDuration; } set { m_ThrowSmoothingDuration = value; } } public AnimationCurve throwSmoothingCurve { get { return m_ThrowSmoothingCurve; } set { m_ThrowSmoothingCurve = value; } } public float throwVelocityScale { get { return m_ThrowVelocityScale; } set { m_ThrowVelocityScale = value; } } public float throwAngularVelocityScale { get { return m_ThrowAngularVelocityScale; } set { m_ThrowAngularVelocityScale = value; } } public bool forceGravityOnDetach { get { return m_ForceGravityOnDetach; } set { m_ForceGravityOnDetach = value; } } public bool retainTransformParent { get { return m_RetainTransformParent; } set { m_RetainTransformParent = value; } } public AttachPointCompatibilityMode attachPointCompatibilityMode { get { return m_AttachPointCompatibilityMode; } set { m_AttachPointCompatibilityMode = value; } } public List startingSingleGrabTransformers { get { return m_StartingSingleGrabTransformers; } set { m_StartingSingleGrabTransformers = value; } } public List startingMultipleGrabTransformers { get { return m_StartingMultipleGrabTransformers; } set { m_StartingMultipleGrabTransformers = value; } } public bool addDefaultGrabTransformers { get { return m_AddDefaultGrabTransformers; } set { m_AddDefaultGrabTransformers = value; } } public int singleGrabTransformersCount => m_SingleGrabTransformers.flushedCount; public int multipleGrabTransformersCount => m_MultipleGrabTransformers.flushedCount; private bool isTransformDirty { get { if (!m_IsTargetPoseDirty) { return m_IsTargetLocalScaleDirty; } return true; } set { m_IsTargetPoseDirty = value; m_IsTargetLocalScaleDirty = value; } } [Obsolete("gravityOnDetach has been deprecated. Use forceGravityOnDetach instead. (UnityUpgradable) -> forceGravityOnDetach")] public bool gravityOnDetach { get { return forceGravityOnDetach; } set { forceGravityOnDetach = value; } } protected override void Awake() { base.Awake(); m_TeleportationMonitor = new TeleportationMonitor(); m_TeleportationMonitor.teleported += OnTeleported; m_CurrentMovementType = m_MovementType; if (!((Component)this).TryGetComponent(ref m_Rigidbody)) { Debug.LogError((object)"XR Grab Interactable does not have a required Rigidbody.", (Object)(object)this); } ((Component)m_Rigidbody).GetComponentsInChildren(true, m_RigidbodyColliders); for (int num = m_RigidbodyColliders.Count - 1; num >= 0; num--) { if ((Object)(object)m_RigidbodyColliders[num].attachedRigidbody != (Object)(object)m_Rigidbody) { m_RigidbodyColliders.RemoveAt(num); } } InitializeTargetPoseAndScale(((Component)this).transform); if (m_AttachPointCompatibilityMode == AttachPointCompatibilityMode.Legacy) { ((Behaviour)GetOrAddComponent()).enabled = true; return; } if (m_SingleGrabTransformers.flushedCount > 0) { int num2 = 0; foreach (XRBaseGrabTransformer startingSingleGrabTransformer in m_StartingSingleGrabTransformers) { if ((Object)(object)startingSingleGrabTransformer != (Object)null) { MoveSingleGrabTransformerTo(startingSingleGrabTransformer, num2++); } } } else { foreach (XRBaseGrabTransformer startingSingleGrabTransformer2 in m_StartingSingleGrabTransformers) { if ((Object)(object)startingSingleGrabTransformer2 != (Object)null) { AddSingleGrabTransformer(startingSingleGrabTransformer2); } } } if (m_MultipleGrabTransformers.flushedCount > 0) { int num3 = 0; foreach (XRBaseGrabTransformer startingMultipleGrabTransformer in m_StartingMultipleGrabTransformers) { if ((Object)(object)startingMultipleGrabTransformer != (Object)null) { MoveMultipleGrabTransformerTo(startingMultipleGrabTransformer, num3++); } } } else { foreach (XRBaseGrabTransformer startingMultipleGrabTransformer2 in m_StartingMultipleGrabTransformers) { if ((Object)(object)startingMultipleGrabTransformer2 != (Object)null) { AddMultipleGrabTransformer(startingMultipleGrabTransformer2); } } } FlushRegistration(); } protected override void OnDestroy() { ClearSingleGrabTransformers(); ClearMultipleGrabTransformers(); base.OnDestroy(); } public override void ProcessInteractable(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.ProcessInteractable(updatePhase); if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { AddDefaultGrabTransformers(); } FlushRegistration(); switch (updatePhase) { case XRInteractionUpdateOrder.UpdatePhase.Fixed: if ((base.isSelected || isTransformDirty) && (m_CurrentMovementType == MovementType.Kinematic || m_CurrentMovementType == MovementType.VelocityTracking)) { if (m_IsTargetLocalScaleDirty && !m_IsTargetPoseDirty && !base.isSelected) { ApplyTargetScale(); } else if (m_CurrentMovementType == MovementType.Kinematic) { PerformKinematicUpdate(updatePhase); } else if (m_CurrentMovementType == MovementType.VelocityTracking) { PerformVelocityTrackingUpdate(updatePhase, Time.deltaTime); } } if (m_IgnoringCharacterCollision && !m_StopIgnoringCollisionInLateUpdate && m_SelectingCharacterInteractors.Count == 0 && (Object)(object)m_SelectingCharacterController != (Object)null && IsOutsideCharacterCollider((Collider)(object)m_SelectingCharacterController)) { m_StopIgnoringCollisionInLateUpdate = true; } break; case XRInteractionUpdateOrder.UpdatePhase.Dynamic: case XRInteractionUpdateOrder.UpdatePhase.OnBeforeRender: if (isTransformDirty) { if (m_IsTargetLocalScaleDirty && !m_IsTargetPoseDirty) { ApplyTargetScale(); } else { PerformInstantaneousUpdate(updatePhase); } } if (base.isSelected || (m_GrabCountChanged && m_DropTransformersCount > 0)) { UpdateTarget(updatePhase, Time.deltaTime); if (m_CurrentMovementType == MovementType.Instantaneous) { PerformInstantaneousUpdate(updatePhase); } } break; case XRInteractionUpdateOrder.UpdatePhase.Late: if (m_DetachInLateUpdate) { if (!base.isSelected) { Detach(); } m_DetachInLateUpdate = false; } if (m_StopIgnoringCollisionInLateUpdate) { if (m_IgnoringCharacterCollision && (Object)(object)m_SelectingCharacterController != (Object)null) { StopIgnoringCharacterCollision((Collider)(object)m_SelectingCharacterController); m_SelectingCharacterController = null; } m_StopIgnoringCollisionInLateUpdate = false; } break; } } public override Transform GetAttachTransform(IXRInteractor interactor) { bool flag = base.interactorsSelecting.Count <= 1 || interactor == base.interactorsSelecting[0]; bool flag2 = m_UseDynamicAttach || (!flag && (Object)(object)m_SecondaryAttachTransform == (Object)null); if (flag2 && interactor is IXRSelectInteractor key && m_DynamicAttachTransforms.TryGetValue(key, out var value)) { if ((Object)(object)value != (Object)null) { return value; } m_DynamicAttachTransforms.Remove(key); Debug.LogWarning((object)($"Dynamic Attach Transform created by {this} for {interactor} was destroyed after being created." + " Continuing as if Use Dynamic Attach was disabled for this pair."), (Object)(object)this); } if (!flag && !flag2) { return m_SecondaryAttachTransform; } if (!((Object)(object)m_AttachTransform != (Object)null)) { return base.GetAttachTransform(interactor); } return m_AttachTransform; } public void AddSingleGrabTransformer(IXRGrabTransformer transformer) { AddGrabTransformer(transformer, m_SingleGrabTransformers); } public void AddMultipleGrabTransformer(IXRGrabTransformer transformer) { AddGrabTransformer(transformer, m_MultipleGrabTransformers); } public bool RemoveSingleGrabTransformer(IXRGrabTransformer transformer) { return RemoveGrabTransformer(transformer, m_SingleGrabTransformers); } public bool RemoveMultipleGrabTransformer(IXRGrabTransformer transformer) { return RemoveGrabTransformer(transformer, m_MultipleGrabTransformers); } public void ClearSingleGrabTransformers() { ClearGrabTransformers(m_SingleGrabTransformers); } public void ClearMultipleGrabTransformers() { ClearGrabTransformers(m_MultipleGrabTransformers); } public void GetSingleGrabTransformers(List results) { GetGrabTransformers(m_SingleGrabTransformers, results); } public void GetMultipleGrabTransformers(List results) { GetGrabTransformers(m_MultipleGrabTransformers, results); } public IXRGrabTransformer GetSingleGrabTransformerAt(int index) { return m_SingleGrabTransformers.GetRegisteredItemAt(index); } public IXRGrabTransformer GetMultipleGrabTransformerAt(int index) { return m_MultipleGrabTransformers.GetRegisteredItemAt(index); } public void MoveSingleGrabTransformerTo(IXRGrabTransformer transformer, int newIndex) { MoveGrabTransformerTo(transformer, newIndex, m_SingleGrabTransformers); } public void MoveMultipleGrabTransformerTo(IXRGrabTransformer transformer, int newIndex) { MoveGrabTransformerTo(transformer, newIndex, m_MultipleGrabTransformers); } public Pose GetTargetPose() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TargetPose; } public void SetTargetPose(Pose pose) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_TargetPose = pose; m_IsTargetPoseDirty = base.interactorsSelecting.Count == 0; } public Vector3 GetTargetLocalScale() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TargetLocalScale; } public void SetTargetLocalScale(Vector3 localScale) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_TargetLocalScale = localScale; m_IsTargetLocalScaleDirty = base.interactorsSelecting.Count == 0; } private void InitializeTargetPoseAndScale(Transform thisTransform) { //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) m_TargetPose.position = ((m_AttachPointCompatibilityMode == AttachPointCompatibilityMode.Default) ? thisTransform.position : m_Rigidbody.worldCenterOfMass); m_TargetPose.rotation = thisTransform.rotation; m_TargetLocalScale = thisTransform.localScale; } private void AddGrabTransformer(IXRGrabTransformer transformer, BaseRegistrationList grabTransformers) { if (transformer == null) { throw new ArgumentNullException("transformer"); } if (m_IsProcessingGrabTransformers) { Debug.LogWarning((object)$"{transformer} added while {((Object)this).name} is processing grab transformers. It won't be processed until the next process.", (Object)(object)this); } if (grabTransformers.Register(transformer)) { OnAddedGrabTransformer(transformer); } } private bool RemoveGrabTransformer(IXRGrabTransformer transformer, BaseRegistrationList grabTransformers) { if (grabTransformers.Unregister(transformer)) { OnRemovedGrabTransformer(transformer); return true; } return false; } private void ClearGrabTransformers(BaseRegistrationList grabTransformers) { for (int num = grabTransformers.flushedCount - 1; num >= 0; num--) { IXRGrabTransformer registeredItemAt = grabTransformers.GetRegisteredItemAt(num); RemoveGrabTransformer(registeredItemAt, grabTransformers); } } private static void GetGrabTransformers(BaseRegistrationList grabTransformers, List results) { if (results == null) { throw new ArgumentNullException("results"); } grabTransformers.GetRegisteredItems(results); } private void MoveGrabTransformerTo(IXRGrabTransformer transformer, int newIndex, BaseRegistrationList grabTransformers) { if (transformer == null) { throw new ArgumentNullException("transformer"); } if (m_IsProcessingGrabTransformers) { Debug.LogError((object)$"Cannot move {transformer} while {((Object)this).name} is processing grab transformers.", (Object)(object)this); return; } grabTransformers.Flush(); if (grabTransformers.MoveItemImmediately(transformer, newIndex)) { OnAddedGrabTransformer(transformer); } } private void FlushRegistration() { m_SingleGrabTransformers.Flush(); m_MultipleGrabTransformers.Flush(); } private void InvokeGrabTransformersOnGrab() { m_IsProcessingGrabTransformers = true; if (m_SingleGrabTransformers.registeredSnapshot.Count > 0) { foreach (IXRGrabTransformer item in m_SingleGrabTransformers.registeredSnapshot) { if (m_SingleGrabTransformers.IsStillRegistered(item)) { item.OnGrab(this); } } } if (m_MultipleGrabTransformers.registeredSnapshot.Count > 0) { foreach (IXRGrabTransformer item2 in m_MultipleGrabTransformers.registeredSnapshot) { if (m_MultipleGrabTransformers.IsStillRegistered(item2)) { item2.OnGrab(this); } } } m_IsProcessingGrabTransformers = false; } private void InvokeGrabTransformersOnDrop(DropEventArgs args) { m_IsProcessingGrabTransformers = true; if (m_SingleGrabTransformers.registeredSnapshot.Count > 0) { foreach (IXRGrabTransformer item in m_SingleGrabTransformers.registeredSnapshot) { if (item is IXRDropTransformer iXRDropTransformer && m_SingleGrabTransformers.IsStillRegistered(item)) { iXRDropTransformer.OnDrop(this, args); } } } if (m_MultipleGrabTransformers.registeredSnapshot.Count > 0) { foreach (IXRGrabTransformer item2 in m_MultipleGrabTransformers.registeredSnapshot) { if (item2 is IXRDropTransformer iXRDropTransformer2 && m_MultipleGrabTransformers.IsStillRegistered(item2)) { iXRDropTransformer2.OnDrop(this, args); } } } m_IsProcessingGrabTransformers = false; } private unsafe void InvokeGrabTransformersProcess(XRInteractionUpdateOrder.UpdatePhase updatePhase, ref Pose targetPose, ref Vector3 localScale) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_015b: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) m_IsProcessingGrabTransformers = true; ProfilerMarker val = s_ProcessGrabTransformersMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { bool flag = base.isSelected; bool flag2 = m_SingleGrabTransformers.registeredSnapshot.Count > 0; bool flag3 = m_MultipleGrabTransformers.registeredSnapshot.Count > 0; if (m_GrabCountChanged) { if (flag) { if (flag2) { foreach (IXRGrabTransformer item in m_SingleGrabTransformers.registeredSnapshot) { if (m_SingleGrabTransformers.IsStillRegistered(item)) { item.OnGrabCountChanged(this, targetPose, localScale); } } } if (flag3) { foreach (IXRGrabTransformer item2 in m_MultipleGrabTransformers.registeredSnapshot) { if (m_MultipleGrabTransformers.IsStillRegistered(item2)) { item2.OnGrabCountChanged(this, targetPose, localScale); } } } } m_GrabCountChanged = false; m_GrabTransformersAddedWhenGrabbed?.Clear(); } else { List grabTransformersAddedWhenGrabbed = m_GrabTransformersAddedWhenGrabbed; if (grabTransformersAddedWhenGrabbed != null && grabTransformersAddedWhenGrabbed.Count > 0) { if (flag) { foreach (IXRGrabTransformer item3 in m_GrabTransformersAddedWhenGrabbed) { item3.OnGrabCountChanged(this, targetPose, localScale); } } m_GrabTransformersAddedWhenGrabbed.Clear(); } } if (flag) { bool flag4 = false; if (flag3 && (base.interactorsSelecting.Count > 1 || !CanProcessAnySingleGrabTransformer())) { foreach (IXRGrabTransformer item4 in m_MultipleGrabTransformers.registeredSnapshot) { if (m_MultipleGrabTransformers.IsStillRegistered(item4) && item4.canProcess) { item4.Process(this, updatePhase, ref targetPose, ref localScale); flag4 = true; } } } if (!flag4 && flag2) { foreach (IXRGrabTransformer item5 in m_SingleGrabTransformers.registeredSnapshot) { if (m_SingleGrabTransformers.IsStillRegistered(item5) && item5.canProcess) { item5.Process(this, updatePhase, ref targetPose, ref localScale); } } } } else { if (flag3) { foreach (IXRGrabTransformer item6 in m_MultipleGrabTransformers.registeredSnapshot) { if (item6 is IXRDropTransformer iXRDropTransformer && m_MultipleGrabTransformers.IsStillRegistered(item6) && iXRDropTransformer.canProcessOnDrop && item6.canProcess) { item6.Process(this, updatePhase, ref targetPose, ref localScale); } } } if (flag2) { foreach (IXRGrabTransformer item7 in m_SingleGrabTransformers.registeredSnapshot) { if (item7 is IXRDropTransformer iXRDropTransformer2 && m_SingleGrabTransformers.IsStillRegistered(item7) && iXRDropTransformer2.canProcessOnDrop && item7.canProcess) { item7.Process(this, updatePhase, ref targetPose, ref localScale); } } } } } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } m_IsProcessingGrabTransformers = false; } private bool CanProcessAnySingleGrabTransformer() { if (m_SingleGrabTransformers.registeredSnapshot.Count > 0) { foreach (IXRGrabTransformer item in m_SingleGrabTransformers.registeredSnapshot) { if (m_SingleGrabTransformers.IsStillRegistered(item) && item.canProcess) { return true; } } } return false; } private void OnAddedGrabTransformer(IXRGrabTransformer transformer) { if (transformer is IXRDropTransformer) { m_DropTransformersCount++; } transformer.OnLink(this); if (base.interactorsSelecting.Count != 0) { transformer.OnGrab(this); if (m_GrabTransformersAddedWhenGrabbed == null) { m_GrabTransformersAddedWhenGrabbed = new List(); } m_GrabTransformersAddedWhenGrabbed.Add(transformer); } } private void OnRemovedGrabTransformer(IXRGrabTransformer transformer) { if (transformer is IXRDropTransformer) { m_DropTransformersCount--; } transformer.OnUnlink(this); m_GrabTransformersAddedWhenGrabbed?.Remove(transformer); } private void AddDefaultGrabTransformers() { if (m_AddDefaultGrabTransformers) { if (m_SingleGrabTransformers.flushedCount == 0) { AddDefaultSingleGrabTransformer(); } if (m_MultipleGrabTransformers.flushedCount == 0 && base.selectMode == InteractableSelectMode.Multiple && base.interactorsSelecting.Count > 1) { AddDefaultMultipleGrabTransformer(); } } } protected virtual void AddDefaultSingleGrabTransformer() { if (m_SingleGrabTransformers.flushedCount == 0) { IXRGrabTransformer orAddDefaultGrabTransformer = GetOrAddDefaultGrabTransformer(); AddSingleGrabTransformer(orAddDefaultGrabTransformer); } } protected virtual void AddDefaultMultipleGrabTransformer() { if (m_MultipleGrabTransformers.flushedCount == 0) { IXRGrabTransformer orAddDefaultGrabTransformer = GetOrAddDefaultGrabTransformer(); AddMultipleGrabTransformer(orAddDefaultGrabTransformer); } } private IXRGrabTransformer GetOrAddDefaultGrabTransformer() { return GetOrAddComponent(); } private T GetOrAddComponent() where T : Component { T result = default(T); if (!((Component)this).TryGetComponent(ref result)) { return ((Component)this).gameObject.AddComponent(); } return result; } private void UpdateTarget(XRInteractionUpdateOrder.UpdatePhase updatePhase, float deltaTime) { //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) if (m_ReinitializeDynamicAttachEverySingleGrab && m_GrabCountChanged && m_GrabCountBeforeAndAfterChange.Item2 < m_GrabCountBeforeAndAfterChange.Item1 && base.interactorsSelecting.Count == 1 && m_DynamicAttachTransforms.Count > 0 && m_DynamicAttachTransforms.TryGetValue(base.interactorsSelecting[0], out var value)) { InitializeDynamicAttachPoseInternal(base.interactorsSelecting[0], value); } Pose targetPose = m_TargetPose; Vector3 localScale = m_TargetLocalScale; InvokeGrabTransformersProcess(updatePhase, ref targetPose, ref localScale); if (!base.isSelected) { m_TargetPose = targetPose; m_TargetLocalScale = localScale; return; } if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { StepThrowSmoothing(targetPose, deltaTime); } StepSmoothing(in targetPose, in localScale, deltaTime); } private void StepSmoothing(in Pose rawTargetPose, in Vector3 rawTargetLocalScale, float deltaTime) { if (m_AttachEaseInTime > 0f && m_CurrentAttachEaseTime <= m_AttachEaseInTime) { EaseAttachBurst(ref m_TargetPose, ref m_TargetLocalScale, in rawTargetPose, in rawTargetLocalScale, deltaTime, m_AttachEaseInTime, ref m_CurrentAttachEaseTime); } else { StepSmoothingBurst(ref m_TargetPose, ref m_TargetLocalScale, in rawTargetPose, in rawTargetLocalScale, deltaTime, m_SmoothPosition, m_SmoothPositionAmount, m_TightenPosition, m_SmoothRotation, m_SmoothRotationAmount, m_TightenRotation, m_SmoothScale, m_SmoothScaleAmount, m_TightenScale); } } private static void EaseAttachBurst(ref Pose targetPose, ref Vector3 targetLocalScale, in Pose rawTargetPose, in Vector3 rawTargetLocalScale, float deltaTime, float attachEaseInTime, ref float currentAttachEaseTime) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) float num = currentAttachEaseTime / attachEaseInTime; targetPose.position = float3.op_Implicit(math.lerp(float3.op_Implicit(targetPose.position), float3.op_Implicit(rawTargetPose.position), num)); targetPose.rotation = quaternion.op_Implicit(math.slerp(quaternion.op_Implicit(targetPose.rotation), quaternion.op_Implicit(rawTargetPose.rotation), num)); targetLocalScale = float3.op_Implicit(math.lerp(float3.op_Implicit(targetLocalScale), float3.op_Implicit(rawTargetLocalScale), num)); currentAttachEaseTime += deltaTime; } private static void StepSmoothingBurst(ref Pose targetPose, ref Vector3 targetLocalScale, in Pose rawTargetPose, in Vector3 rawTargetLocalScale, float deltaTime, bool smoothPos, float smoothPosAmount, float tightenPos, bool smoothRot, float smoothRotAmount, float tightenRot, bool smoothScale, float smoothScaleAmount, float tightenScale) { //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f4: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0106: Unknown result type (might be due to invalid IL or missing references) //IL_010b: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) if (smoothPos) { targetPose.position = float3.op_Implicit(math.lerp(float3.op_Implicit(targetPose.position), float3.op_Implicit(rawTargetPose.position), smoothPosAmount * deltaTime)); targetPose.position = float3.op_Implicit(math.lerp(float3.op_Implicit(targetPose.position), float3.op_Implicit(rawTargetPose.position), tightenPos)); } else { targetPose.position = rawTargetPose.position; } if (smoothRot) { targetPose.rotation = quaternion.op_Implicit(math.slerp(quaternion.op_Implicit(targetPose.rotation), quaternion.op_Implicit(rawTargetPose.rotation), smoothRotAmount * deltaTime)); targetPose.rotation = quaternion.op_Implicit(math.slerp(quaternion.op_Implicit(targetPose.rotation), quaternion.op_Implicit(rawTargetPose.rotation), tightenRot)); } else { targetPose.rotation = rawTargetPose.rotation; } if (smoothScale) { targetLocalScale = float3.op_Implicit(math.lerp(float3.op_Implicit(targetLocalScale), float3.op_Implicit(rawTargetLocalScale), smoothScaleAmount * deltaTime)); targetLocalScale = float3.op_Implicit(math.lerp(float3.op_Implicit(targetLocalScale), float3.op_Implicit(rawTargetLocalScale), tightenScale)); } else { targetLocalScale = rawTargetLocalScale; } } private void PerformInstantaneousUpdate(XRInteractionUpdateOrder.UpdatePhase updatePhase) { //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic || updatePhase == XRInteractionUpdateOrder.UpdatePhase.OnBeforeRender) { if (m_TrackPosition && m_TrackRotation) { ((Component)this).transform.SetPositionAndRotation(m_TargetPose.position, m_TargetPose.rotation); } else if (m_TrackPosition) { ((Component)this).transform.position = m_TargetPose.position; } else if (m_TrackRotation) { ((Component)this).transform.rotation = m_TargetPose.rotation; } ApplyTargetScale(); isTransformDirty = false; } } private void PerformKinematicUpdate(XRInteractionUpdateOrder.UpdatePhase updatePhase) { //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Fixed) { if (m_TrackPosition) { Vector3 val = ((m_AttachPointCompatibilityMode == AttachPointCompatibilityMode.Default) ? m_TargetPose.position : (m_TargetPose.position - m_Rigidbody.worldCenterOfMass + m_Rigidbody.position)); m_Rigidbody.MovePosition(val); } if (m_TrackRotation) { m_Rigidbody.MoveRotation(m_TargetPose.rotation); } ApplyTargetScale(); isTransformDirty = false; } } private void PerformVelocityTrackingUpdate(XRInteractionUpdateOrder.UpdatePhase updatePhase, float deltaTime) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0137: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) if (deltaTime < 0.001f || updatePhase != XRInteractionUpdateOrder.UpdatePhase.Fixed) { return; } if (m_TrackPosition) { Rigidbody rigidbody = m_Rigidbody; rigidbody.velocity *= 1f - m_VelocityDamping; Vector3 val = ((m_AttachPointCompatibilityMode == AttachPointCompatibilityMode.Default) ? (m_TargetPose.position - ((Component)this).transform.position) : (m_TargetPose.position - m_Rigidbody.worldCenterOfMass)) / deltaTime; Rigidbody rigidbody2 = m_Rigidbody; rigidbody2.velocity += val * m_VelocityScale; } if (m_TrackRotation) { Rigidbody rigidbody3 = m_Rigidbody; rigidbody3.angularVelocity *= 1f - m_AngularVelocityDamping; Quaternion val2 = m_TargetPose.rotation * Quaternion.Inverse(((Component)this).transform.rotation); float num = default(float); Vector3 val3 = default(Vector3); ((Quaternion)(ref val2)).ToAngleAxis(ref num, ref val3); if (num > 180f) { num -= 360f; } if (Mathf.Abs(num) > Mathf.Epsilon) { Vector3 val4 = val3 * (num * (MathF.PI / 180f)) / deltaTime; Rigidbody rigidbody4 = m_Rigidbody; rigidbody4.angularVelocity += val4 * m_AngularVelocityScale; } } ApplyTargetScale(); isTransformDirty = false; } private void ApplyTargetScale() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) if (m_TrackScale) { ((Component)this).transform.localScale = m_TargetLocalScale; } m_IsTargetLocalScaleDirty = false; } private void UpdateCurrentMovementType() { MovementType? movementType = null; for (int num = base.interactorsSelecting.Count - 1; num >= 0; num--) { XRBaseInteractor xRBaseInteractor = base.interactorsSelecting[num] as XRBaseInteractor; if ((Object)(object)xRBaseInteractor != (Object)null && xRBaseInteractor.selectedInteractableMovementTypeOverride.HasValue) { if (movementType.HasValue) { Debug.LogWarning((object)("Multiple interactors selecting \"" + ((Object)this).name + "\" have different movement type override values set (selectedInteractableMovementTypeOverride)." + $" Conflict resolved using {movementType.Value} from the most recent interactor to select this object with an override."), (Object)(object)this); break; } movementType = xRBaseInteractor.selectedInteractableMovementTypeOverride.Value; } } m_CurrentMovementType = movementType ?? m_MovementType; } protected override void OnSelectEntering(SelectEnterEventArgs args) { Transform dynamicAttachTransform = CreateDynamicAttachTransform(args.interactorObject); InitializeDynamicAttachPoseInternal(args.interactorObject, dynamicAttachTransform); int count = base.interactorsSelecting.Count; base.OnSelectEntering(args); int count2 = base.interactorsSelecting.Count; m_GrabCountChanged = true; m_GrabCountBeforeAndAfterChange = (count, count2); m_CurrentAttachEaseTime = 0f; ResetThrowSmoothing(); if (!m_IgnoringCharacterCollision) { m_SelectingCharacterController = ((Component)args.interactorObject.transform).GetComponentInParent(); if ((Object)(object)m_SelectingCharacterController != (Object)null) { m_SelectingCharacterInteractors.Add(args.interactorObject); StartIgnoringCharacterCollision((Collider)(object)m_SelectingCharacterController); } } else if ((Object)(object)m_SelectingCharacterController != (Object)null && args.interactorObject.transform.IsChildOf(((Component)m_SelectingCharacterController).transform)) { m_SelectingCharacterInteractors.Add(args.interactorObject); } if (base.interactorsSelecting.Count == 1) { Grab(); InvokeGrabTransformersOnGrab(); } SubscribeTeleportationProvider(args.interactorObject); } protected override void OnSelectExiting(SelectExitEventArgs args) { int count = base.interactorsSelecting.Count; base.OnSelectExiting(args); int count2 = base.interactorsSelecting.Count; m_GrabCountChanged = true; m_GrabCountBeforeAndAfterChange = (count, count2); m_CurrentAttachEaseTime = 0f; if (base.interactorsSelecting.Count == 0) { if (m_ThrowOnDetach) { m_ThrowAssist = ((Component)args.interactorObject.transform).GetComponentInParent(); } Drop(); if (m_DropTransformersCount > 0) { DropEventArgs v; using (s_DropEventArgs.Get(out v)) { v.selectExitEventArgs = args; InvokeGrabTransformersOnDrop(v); } } } m_SelectingCharacterInteractors.Remove(args.interactorObject); UnsubscribeTeleportationProvider(args.interactorObject); } protected override void OnSelectExited(SelectExitEventArgs args) { base.OnSelectExited(args); ReleaseDynamicAttachTransform(args.interactorObject); } private Transform CreateDynamicAttachTransform(IXRSelectInteractor interactor) { Transform val; do { val = s_DynamicAttachTransformPool.Get(); } while ((Object)(object)val == (Object)null); val.SetParent(((Component)this).transform, false); return val; } private void InitializeDynamicAttachPoseInternal(IXRSelectInteractor interactor, Transform dynamicAttachTransform) { InitializeDynamicAttachPoseWithStatic(interactor, dynamicAttachTransform); InitializeDynamicAttachPose(interactor, dynamicAttachTransform); } private void InitializeDynamicAttachPoseWithStatic(IXRSelectInteractor interactor, Transform dynamicAttachTransform) { //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) m_DynamicAttachTransforms.Remove(interactor); Transform val = GetAttachTransform(interactor); m_DynamicAttachTransforms[interactor] = dynamicAttachTransform; if ((Object)(object)val == (Object)(object)((Component)this).transform) { dynamicAttachTransform.localPosition = Vector3.zero; dynamicAttachTransform.localRotation = Quaternion.identity; } else if ((Object)(object)val.parent == (Object)(object)((Component)this).transform) { dynamicAttachTransform.localPosition = val.localPosition; dynamicAttachTransform.localRotation = val.localRotation; } else { dynamicAttachTransform.SetPositionAndRotation(val.position, val.rotation); } } private void ReleaseDynamicAttachTransform(IXRSelectInteractor interactor) { if (m_DynamicAttachTransforms.Count > 0 && m_DynamicAttachTransforms.TryGetValue(interactor, out var value)) { if ((Object)(object)value != (Object)null) { s_DynamicAttachTransformPool.Release(value); } m_DynamicAttachTransforms.Remove(interactor); } } protected virtual bool ShouldMatchAttachPosition(IXRSelectInteractor interactor) { if (!m_MatchAttachPosition) { return false; } if (interactor is XRSocketInteractor || interactor is XRRayInteractor { useForceGrab: not false }) { return false; } return true; } protected virtual bool ShouldMatchAttachRotation(IXRSelectInteractor interactor) { if (m_MatchAttachRotation) { return !(interactor is XRSocketInteractor); } return false; } protected virtual bool ShouldSnapToColliderVolume(IXRSelectInteractor interactor) { return m_SnapToColliderVolume; } protected virtual void InitializeDynamicAttachPose(IXRSelectInteractor interactor, Transform dynamicAttachTransform) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) bool flag = ShouldMatchAttachPosition(interactor); bool flag2 = ShouldMatchAttachRotation(interactor); if (flag || flag2) { Transform obj = interactor.GetAttachTransform(this); Vector3 val = obj.position; Quaternion rotation = obj.rotation; if (flag && ShouldSnapToColliderVolume(interactor) && XRInteractableUtility.TryGetClosestPointOnCollider(this, val, out var distanceInfo)) { val = distanceInfo.point; } if (flag && flag2) { dynamicAttachTransform.SetPositionAndRotation(val, rotation); } else if (flag) { dynamicAttachTransform.position = val; } else { dynamicAttachTransform.rotation = rotation; } } } protected virtual void Grab() { //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) Transform transform = ((Component)this).transform; m_OriginalSceneParent = transform.parent; transform.SetParent((Transform)null); UpdateCurrentMovementType(); SetupRigidbodyGrab(m_Rigidbody); m_DetachLinearVelocity = Vector3.zero; m_DetachAngularVelocity = Vector3.zero; InitializeTargetPoseAndScale(transform); } protected virtual void Drop() { if (m_RetainTransformParent && (Object)(object)m_OriginalSceneParent != (Object)null && !((Component)m_OriginalSceneParent).gameObject.activeInHierarchy) { if (0 == 0) { Debug.LogWarning((object)"Retain Transform Parent is set to true, and has a non-null Original Scene Parent. However, the old parent is deactivated so we are choosing not to re-parent upon dropping.", (Object)(object)this); } } else if (m_RetainTransformParent && ((Component)this).gameObject.activeInHierarchy) { ((Component)this).transform.SetParent(m_OriginalSceneParent); } SetupRigidbodyDrop(m_Rigidbody); m_CurrentMovementType = m_MovementType; m_DetachInLateUpdate = true; EndThrowSmoothing(); } protected virtual void Detach() { //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) if (!m_ThrowOnDetach) { return; } if (m_Rigidbody.isKinematic) { Debug.LogWarning((object)"Cannot throw a kinematic Rigidbody since updating the velocity and angular velocity of a kinematic Rigidbody is not supported. Disable Throw On Detach or Is Kinematic to fix this issue.", (Object)(object)this); return; } if (m_ThrowAssist != null) { m_DetachLinearVelocity = m_ThrowAssist.GetAssistedVelocity(m_Rigidbody.position, in m_DetachLinearVelocity, m_Rigidbody.useGravity ? (0f - Physics.gravity.y) : 0f); m_ThrowAssist = null; } m_Rigidbody.velocity = m_DetachLinearVelocity; m_Rigidbody.angularVelocity = m_DetachAngularVelocity; } protected virtual void SetupRigidbodyGrab(Rigidbody rigidbody) { m_WasKinematic = rigidbody.isKinematic; m_UsedGravity = rigidbody.useGravity; m_OldLinearDamping = rigidbody.drag; m_OldAngularDamping = rigidbody.angularDrag; rigidbody.isKinematic = m_CurrentMovementType == MovementType.Kinematic || m_CurrentMovementType == MovementType.Instantaneous; rigidbody.useGravity = false; rigidbody.drag = 0f; rigidbody.angularDrag = 0f; } protected virtual void SetupRigidbodyDrop(Rigidbody rigidbody) { rigidbody.isKinematic = m_WasKinematic; rigidbody.useGravity = m_UsedGravity; rigidbody.drag = m_OldLinearDamping; rigidbody.angularDrag = m_OldAngularDamping; if (!base.isSelected) { Rigidbody rigidbody2 = m_Rigidbody; rigidbody2.useGravity |= m_ForceGravityOnDetach; } } private void ResetThrowSmoothing() { Array.Clear(m_ThrowSmoothingFrameTimes, 0, m_ThrowSmoothingFrameTimes.Length); Array.Clear(m_ThrowSmoothingLinearVelocityFrames, 0, m_ThrowSmoothingLinearVelocityFrames.Length); Array.Clear(m_ThrowSmoothingAngularVelocityFrames, 0, m_ThrowSmoothingAngularVelocityFrames.Length); m_ThrowSmoothingCurrentFrame = 0; m_ThrowSmoothingFirstUpdate = true; } private void EndThrowSmoothing() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) if (m_ThrowOnDetach) { Vector3 smoothedVelocityValue = GetSmoothedVelocityValue(m_ThrowSmoothingLinearVelocityFrames); Vector3 smoothedVelocityValue2 = GetSmoothedVelocityValue(m_ThrowSmoothingAngularVelocityFrames); m_DetachLinearVelocity = smoothedVelocityValue * m_ThrowVelocityScale; m_DetachAngularVelocity = smoothedVelocityValue2 * m_ThrowAngularVelocityScale; } } private void StepThrowSmoothing(Pose targetPose, float deltaTime) { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) if (!(deltaTime < 0.001f)) { if (m_ThrowSmoothingFirstUpdate) { m_ThrowSmoothingFirstUpdate = false; } else { m_ThrowSmoothingLinearVelocityFrames[m_ThrowSmoothingCurrentFrame] = (targetPose.position - m_LastThrowReferencePose.position) / deltaTime; Quaternion val = targetPose.rotation * Quaternion.Inverse(m_LastThrowReferencePose.rotation); Vector3 eulerAngles = ((Quaternion)(ref val)).eulerAngles; Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(Mathf.DeltaAngle(0f, eulerAngles.x), Mathf.DeltaAngle(0f, eulerAngles.y), Mathf.DeltaAngle(0f, eulerAngles.z)); m_ThrowSmoothingAngularVelocityFrames[m_ThrowSmoothingCurrentFrame] = val2 / deltaTime * (MathF.PI / 180f); } m_ThrowSmoothingFrameTimes[m_ThrowSmoothingCurrentFrame] = Time.time; m_ThrowSmoothingCurrentFrame = (m_ThrowSmoothingCurrentFrame + 1) % 20; m_LastThrowReferencePose = targetPose; } } private Vector3 GetSmoothedVelocityValue(Vector3[] velocityFrames) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) Vector3 val = Vector3.zero; float num = 0f; for (int i = 0; i < 20; i++) { int num2 = ((m_ThrowSmoothingCurrentFrame - i - 1) % 20 + 20) % 20; if (m_ThrowSmoothingFrameTimes[num2] == 0f) { break; } float num3 = (Time.time - m_ThrowSmoothingFrameTimes[num2]) / m_ThrowSmoothingDuration; float num4 = m_ThrowSmoothingCurve.Evaluate(Mathf.Clamp(1f - num3, 0f, 1f)); val += velocityFrames[num2] * num4; num += num4; if (Time.time - m_ThrowSmoothingFrameTimes[num2] > m_ThrowSmoothingDuration) { break; } } if (num > 0f) { return val / num; } return Vector3.zero; } private void SubscribeTeleportationProvider(IXRInteractor interactor) { m_TeleportationMonitor.AddInteractor(interactor); } private void UnsubscribeTeleportationProvider(IXRInteractor interactor) { m_TeleportationMonitor.RemoveInteractor(interactor); } private void OnTeleported(Pose offset) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) Vector3 position = offset.position; Quaternion rotation = offset.rotation; for (int i = 0; i < 20 && m_ThrowSmoothingFrameTimes[i] != 0f; i++) { m_ThrowSmoothingLinearVelocityFrames[i] = rotation * m_ThrowSmoothingLinearVelocityFrames[i]; } ref Vector3 position2 = ref m_LastThrowReferencePose.position; position2 += position; m_LastThrowReferencePose.rotation = rotation * m_LastThrowReferencePose.rotation; } private void StartIgnoringCharacterCollision(Collider characterCollider) { m_IgnoringCharacterCollision = true; m_CollidersThatAllowedCharacterCollision.Clear(); for (int i = 0; i < m_RigidbodyColliders.Count; i++) { Collider val = m_RigidbodyColliders[i]; if (!((Object)(object)val == (Object)null) && !val.isTrigger && !Physics.GetIgnoreCollision(val, characterCollider)) { m_CollidersThatAllowedCharacterCollision.Add(val); Physics.IgnoreCollision(val, characterCollider, true); } } } private bool IsOutsideCharacterCollider(Collider characterCollider) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) Bounds bounds = characterCollider.bounds; foreach (Collider item in m_CollidersThatAllowedCharacterCollision) { if (!((Object)(object)item == (Object)null)) { Bounds bounds2 = item.bounds; if (((Bounds)(ref bounds2)).Intersects(bounds)) { return false; } } } return true; } private void StopIgnoringCharacterCollision(Collider characterCollider) { m_IgnoringCharacterCollision = false; foreach (Collider item in m_CollidersThatAllowedCharacterCollision) { if ((Object)(object)item != (Object)null) { Physics.IgnoreCollision(item, characterCollider, false); } } } private static Transform OnCreatePooledItem() { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) Transform transform = new GameObject().transform; transform.localPosition = Vector3.zero; transform.localRotation = Quaternion.identity; transform.localScale = Vector3.one; return transform; } private static void OnGetPooledItem(Transform item) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)item == (Object)null)) { ((Object)item).hideFlags = (HideFlags)(((Object)item).hideFlags & -2); } } private static void OnReleasePooledItem(Transform item) { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)item == (Object)null)) { ((Object)item).hideFlags = (HideFlags)(((Object)item).hideFlags | 1); } } private static void OnDestroyPooledItem(Transform item) { if (!((Object)(object)item == (Object)null)) { Object.Destroy((Object)(object)((Component)item).gameObject); } } } [AddComponentMenu("XR/XR Interactable Snap Volume", 11)] [DefaultExecutionOrder(-99)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRInteractableSnapVolume.html")] public class XRInteractableSnapVolume : MonoBehaviour { [SerializeField] private XRInteractionManager m_InteractionManager; [SerializeField] [RequireInterface(typeof(IXRInteractable))] private Object m_InteractableObject; [SerializeField] private Collider m_SnapCollider; [SerializeField] private bool m_DisableSnapColliderWhenSelected = true; [SerializeField] private Collider m_SnapToCollider; private IXRInteractable m_Interactable; private IXRInteractable m_BoundInteractable; private IXRSelectInteractable m_BoundSelectInteractable; private XRInteractionManager m_RegisteredInteractionManager; public XRInteractionManager interactionManager { get { return m_InteractionManager; } set { m_InteractionManager = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { RegisterWithInteractionManager(); } } } public Object interactableObject { get { return m_InteractableObject; } set { m_InteractableObject = value; interactable = value as IXRInteractable; } } public Collider snapCollider { get { return m_SnapCollider; } set { if (!((Object)(object)m_SnapCollider == (Object)(object)value)) { if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { UnregisterWithInteractionManager(); m_SnapCollider = value; ValidateSnapCollider(); RefreshSnapColliderEnabled(); RegisterWithInteractionManager(); } else { m_SnapCollider = value; } } } } public bool disableSnapColliderWhenSelected { get { return m_DisableSnapColliderWhenSelected; } set { m_DisableSnapColliderWhenSelected = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { RefreshSnapColliderEnabled(); } } } public Collider snapToCollider { get { return m_SnapToCollider; } set { m_SnapToCollider = value; } } public IXRInteractable interactable { get { return m_Interactable; } set { m_Interactable = value; m_InteractableObject = (Object)((value is Object) ? value : null); if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { SetBoundInteractable(value); } } } [Conditional("UNITY_EDITOR")] protected virtual void Reset() { } protected virtual void Awake() { if ((Object)(object)m_SnapCollider == (Object)null) { m_SnapCollider = FindSnapCollider(((Component)this).gameObject); } ValidateSnapCollider(); } protected virtual void OnEnable() { FindCreateInteractionManager(); RegisterWithInteractionManager(); if (m_InteractableObject != (Object)null && m_InteractableObject is IXRInteractable iXRInteractable) { interactable = iXRInteractable; } else { interactable = m_Interactable ?? (m_Interactable = ((Component)this).GetComponentInParent()); } } protected virtual void OnDisable() { UnregisterWithInteractionManager(); SetBoundInteractable(null); SetSnapColliderEnabled(enable: false); } private void FindCreateInteractionManager() { if (!((Object)(object)m_InteractionManager != (Object)null)) { m_InteractionManager = ComponentLocatorUtility.FindOrCreateComponent(); } } private void RegisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)(object)m_InteractionManager)) { UnregisterWithInteractionManager(); if ((Object)(object)m_InteractionManager != (Object)null) { m_InteractionManager.RegisterSnapVolume(this); m_RegisteredInteractionManager = m_InteractionManager; } } } private void UnregisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)null)) { m_RegisteredInteractionManager.UnregisterSnapVolume(this); m_RegisteredInteractionManager = null; } } protected static Collider FindSnapCollider(GameObject gameObject) { Collider val = null; Collider[] components = gameObject.GetComponents(); foreach (Collider val2 in components) { if (SupportsTriggerCollider(val2)) { if (val2.isTrigger) { return val2; } if ((Object)(object)val == (Object)null) { val = val2; } } } return val; } internal static bool SupportsTriggerCollider(Collider col) { if (!(col is BoxCollider) && !(col is SphereCollider) && !(col is CapsuleCollider)) { MeshCollider val = (MeshCollider)(object)((col is MeshCollider) ? col : null); if (val != null) { return val.convex; } return false; } return true; } private void ValidateSnapCollider() { if ((Object)(object)m_SnapCollider == (Object)null) { Debug.LogWarning((object)"XR Interactable Snap Volume is missing a Snap Collider assignment.", (Object)(object)this); } else if (!SupportsTriggerCollider(m_SnapCollider)) { Debug.LogError((object)"Snap Collider is set to a collider which does not support being a trigger collider. Set it to a Box Collider, Sphere Collider, Capsule Collider, or convex Mesh Collider.", (Object)(object)this); } else if (!m_SnapCollider.isTrigger) { Debug.LogWarning((object)$"Snap Collider must be trigger collider, updating {m_SnapCollider}.", (Object)(object)this); m_SnapCollider.isTrigger = true; } } private void SetSnapColliderEnabled(bool enable) { if ((Object)(object)m_SnapCollider != (Object)null) { m_SnapCollider.enabled = enable; } } public Vector3 GetClosestPoint(Vector3 point) { //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_SnapToCollider == (Object)null || !((Component)m_SnapToCollider).gameObject.activeInHierarchy || !m_SnapToCollider.enabled) { if (m_Interactable != null) { IXRInteractable iXRInteractable = m_Interactable; Object val = (Object)((iXRInteractable is Object) ? iXRInteractable : null); if (val == null || val != (Object)null) { return m_Interactable.transform.position; } } return ((Component)this).transform.position; } return m_SnapToCollider.ClosestPoint(point); } public Vector3 GetClosestPointOfAttachTransform(IXRInteractor interactor) { //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) Vector3 position; if (m_Interactable != null) { IXRInteractable iXRInteractable = m_Interactable; Object val = (Object)((iXRInteractable is Object) ? iXRInteractable : null); if (val == null || val != (Object)null) { position = m_Interactable.GetAttachTransform(interactor).position; goto IL_0044; } } position = ((Component)this).transform.position; goto IL_0044; IL_0044: Vector3 val2 = position; if ((Object)(object)m_SnapToCollider == (Object)null || !((Component)m_SnapToCollider).gameObject.activeInHierarchy || !m_SnapToCollider.enabled) { return val2; } return m_SnapToCollider.ClosestPoint(val2); } private void SetBoundInteractable(IXRInteractable source) { if (m_BoundInteractable != source) { if (m_BoundSelectInteractable != null) { ((UnityEvent)m_BoundSelectInteractable.firstSelectEntered).RemoveListener((UnityAction)OnFirstSelectEntered); ((UnityEvent)m_BoundSelectInteractable.lastSelectExited).RemoveListener((UnityAction)OnLastSelectExited); } m_BoundInteractable = source; m_BoundSelectInteractable = source as IXRSelectInteractable; if (m_BoundSelectInteractable != null) { ((UnityEvent)m_BoundSelectInteractable.firstSelectEntered).AddListener((UnityAction)OnFirstSelectEntered); ((UnityEvent)m_BoundSelectInteractable.lastSelectExited).AddListener((UnityAction)OnLastSelectExited); } RefreshSnapColliderEnabled(); } } private void RefreshSnapColliderEnabled() { bool flag = m_BoundSelectInteractable != null && m_BoundSelectInteractable.isSelected; if (m_DisableSnapColliderWhenSelected) { SetSnapColliderEnabled(!flag); } else { SetSnapColliderEnabled(enable: true); } } private void OnFirstSelectEntered(SelectEnterEventArgs args) { if (m_DisableSnapColliderWhenSelected) { SetSnapColliderEnabled(enable: false); } } private void OnLastSelectExited(SelectExitEventArgs args) { if (m_DisableSnapColliderWhenSelected) { SetSnapColliderEnabled(enable: true); } } } [SelectionBase] [DisallowMultipleComponent] [AddComponentMenu("XR/XR Simple Interactable", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRSimpleInteractable.html")] public class XRSimpleInteractable : XRBaseInteractable { } public interface IXRActivateInteractor : IXRInteractor { bool shouldActivate { get; } bool shouldDeactivate { get; } void GetActivateTargets(List targets); } public interface IXRGroupMember { IXRInteractionGroup containingGroup { get; } void OnRegisteringAsGroupMember(IXRInteractionGroup group); void OnRegisteringAsNonGroupMember(); } public static class XRGroupMemberExtensions { public static IXRInteractionGroup GetTopLevelContainingGroup(this IXRGroupMember groupMember) { IXRInteractionGroup iXRInteractionGroup = groupMember.containingGroup; for (IXRInteractionGroup iXRInteractionGroup2 = iXRInteractionGroup; iXRInteractionGroup2 != null; iXRInteractionGroup2 = ((iXRInteractionGroup is IXRGroupMember iXRGroupMember) ? iXRGroupMember.containingGroup : null)) { iXRInteractionGroup = iXRInteractionGroup2; } return iXRInteractionGroup; } } public interface IXRHoverInteractor : IXRInteractor { HoverEnterEvent hoverEntered { get; } HoverExitEvent hoverExited { get; } List interactablesHovered { get; } bool hasHover { get; } bool isHoverActive { get; } bool CanHover(IXRHoverInteractable interactable); bool IsHovering(IXRHoverInteractable interactable); void OnHoverEntering(HoverEnterEventArgs args); void OnHoverEntered(HoverEnterEventArgs args); void OnHoverExiting(HoverExitEventArgs args); void OnHoverExited(HoverExitEventArgs args); } public static class XRHoverInteractorExtensions { public static IXRHoverInteractable GetOldestInteractableHovered(this IXRHoverInteractor interactor) { if (interactor == null || interactor.interactablesHovered.Count <= 0) { return null; } return interactor.interactablesHovered[0]; } } public interface IXRInteractionGroup { string groupName { get; } IXRInteractor activeInteractor { get; } IXRInteractor focusInteractor { get; } IXRFocusInteractable focusInteractable { get; } event Action registered; event Action unregistered; void OnRegistered(InteractionGroupRegisteredEventArgs args); void OnBeforeUnregistered(); void OnUnregistered(InteractionGroupUnregisteredEventArgs args); void AddGroupMember(IXRGroupMember groupMember); void MoveGroupMemberTo(IXRGroupMember groupMember, int newIndex); bool RemoveGroupMember(IXRGroupMember groupMember); void ClearGroupMembers(); bool ContainsGroupMember(IXRGroupMember groupMember); void GetGroupMembers(List results); bool HasDependencyOnGroup(IXRInteractionGroup group); void PreprocessGroupMembers(XRInteractionUpdateOrder.UpdatePhase updatePhase); void ProcessGroupMembers(XRInteractionUpdateOrder.UpdatePhase updatePhase); void UpdateGroupMemberInteractions(); void UpdateGroupMemberInteractions(IXRInteractor prePrioritizedInteractor, out IXRInteractor interactorThatPerformedInteraction); void OnFocusEntering(FocusEnterEventArgs args); void OnFocusExiting(FocusExitEventArgs args); } public interface IXRInteractionOverrideGroup : IXRInteractionGroup { void AddInteractionOverrideForGroupMember(IXRGroupMember sourceGroupMember, IXRGroupMember overrideGroupMember); bool GroupMemberIsPartOfOverrideChain(IXRGroupMember sourceGroupMember, IXRGroupMember potentialOverrideGroupMember); bool RemoveInteractionOverrideForGroupMember(IXRGroupMember sourceGroupMember, IXRGroupMember overrideGroupMember); bool ClearInteractionOverridesForGroupMember(IXRGroupMember sourceGroupMember); void GetInteractionOverridesForGroupMember(IXRGroupMember sourceGroupMember, HashSet results); bool ShouldOverrideActiveInteraction(out IXRSelectInteractor overridingInteractor); bool ShouldAnyMemberOverrideInteraction(IXRInteractor interactingInteractor, out IXRSelectInteractor overridingInteractor); } public interface IXRInteractionStrengthInteractor : IXRInteractor { IReadOnlyBindableVariable largestInteractionStrength { get; } float GetInteractionStrength(IXRInteractable interactable); void ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase); } public interface IXRInteractor { InteractionLayerMask interactionLayers { get; } Transform transform { get; } event Action registered; event Action unregistered; Transform GetAttachTransform(IXRInteractable interactable); void GetValidTargets(List targets); void OnRegistered(InteractorRegisteredEventArgs args); void OnUnregistered(InteractorUnregisteredEventArgs args); void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase); void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase); } public static class XRInteractorExtensions { public static bool IsBlockedByInteractionWithinGroup(this IXRInteractor interactor) { if (!(interactor is IXRGroupMember groupMember)) { return false; } IXRInteractionGroup topLevelContainingGroup = groupMember.GetTopLevelContainingGroup(); if (topLevelContainingGroup == null) { return false; } IXRInteractor activeInteractor = topLevelContainingGroup.activeInteractor; if (activeInteractor != null) { return activeInteractor != interactor; } return false; } } public interface IXRRayProvider { Vector3 rayEndPoint { get; } Transform rayEndTransform { get; } Transform GetOrCreateRayOrigin(); Transform GetOrCreateAttachTransform(); void SetRayOrigin(Transform newOrigin); void SetAttachTransform(Transform newAttach); } public interface IXRSelectInteractor : IXRInteractor { SelectEnterEvent selectEntered { get; } SelectExitEvent selectExited { get; } List interactablesSelected { get; } IXRSelectInteractable firstInteractableSelected { get; } bool hasSelection { get; } bool isSelectActive { get; } bool keepSelectedTargetValid { get; } bool CanSelect(IXRSelectInteractable interactable); bool IsSelecting(IXRSelectInteractable interactable); Pose GetAttachPoseOnSelect(IXRSelectInteractable interactable); Pose GetLocalAttachPoseOnSelect(IXRSelectInteractable interactable); void OnSelectEntering(SelectEnterEventArgs args); void OnSelectEntered(SelectEnterEventArgs args); void OnSelectExiting(SelectExitEventArgs args); void OnSelectExited(SelectExitEventArgs args); } public static class XRSelectInteractorExtensions { public static IXRSelectInteractable GetOldestInteractableSelected(this IXRSelectInteractor interactor) { if (interactor == null || interactor.interactablesSelected.Count <= 0) { return null; } return interactor.interactablesSelected[0]; } } public enum TargetPriorityMode { None, HighestPriorityOnly, All } public interface IXRTargetPriorityInteractor : IXRInteractor { TargetPriorityMode targetPriorityMode { get; } List targetsForSelection { get; } } public interface IXRCustomReticleProvider { bool AttachCustomReticle(GameObject reticleInstance); bool RemoveCustomReticle(); } public interface IXRReticleDirectionProvider { void GetReticleDirection(IXRInteractor interactor, Vector3 hitNormal, out Vector3 reticleUp, out Vector3? optionalReticleForward); } public interface ILineRenderable { bool GetLinePoints(ref Vector3[] linePoints, out int numPoints); bool TryGetHitInfo(out Vector3 position, out Vector3 normal, out int positionInLine, out bool isValidTarget); } public interface IAdvancedLineRenderable : ILineRenderable { bool GetLinePoints(ref NativeArray linePoints, out int numPoints, Ray? rayOriginOverride = null); void GetLineOriginAndDirection(out Vector3 origin, out Vector3 direction); } [AddComponentMenu("XR/Visual/XR Interactor Line Visual", 11)] [DisallowMultipleComponent] [RequireComponent(typeof(LineRenderer))] [DefaultExecutionOrder(100)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRInteractorLineVisual.html")] public class XRInteractorLineVisual : MonoBehaviour, IXRCustomReticleProvider { private const float k_MinLineWidth = 0.0001f; private const float k_MaxLineWidth = 0.05f; private const float k_MinLineBendRatio = 0.01f; private const float k_MaxLineBendRatio = 1f; [SerializeField] [Range(0.0001f, 0.05f)] private float m_LineWidth = 0.005f; [SerializeField] private bool m_OverrideInteractorLineLength = true; [SerializeField] private float m_LineLength = 10f; [SerializeField] private bool m_AutoAdjustLineLength; [SerializeField] private float m_MinLineLength = 0.5f; [SerializeField] private bool m_UseDistanceToHitAsMaxLineLength = true; [SerializeField] private float m_LineRetractionDelay = 0.5f; [SerializeField] private float m_LineLengthChangeSpeed = 12f; [SerializeField] private AnimationCurve m_WidthCurve = AnimationCurve.Linear(0f, 1f, 1f, 1f); [SerializeField] private bool m_SetLineColorGradient = true; [SerializeField] private Gradient m_ValidColorGradient; [SerializeField] private Gradient m_InvalidColorGradient; [SerializeField] private Gradient m_BlockedColorGradient; [SerializeField] private bool m_TreatSelectionAsValidState; [SerializeField] private bool m_SmoothMovement; [SerializeField] private float m_FollowTightness; [SerializeField] private float m_SnapThresholdDistance; [SerializeField] private GameObject m_Reticle; [SerializeField] private GameObject m_BlockedReticle; [SerializeField] private bool m_StopLineAtFirstRaycastHit; [SerializeField] private bool m_StopLineAtSelection; [SerializeField] private bool m_SnapEndpointIfAvailable; [SerializeField] [Range(0.01f, 1f)] private float m_LineBendRatio; [SerializeField] private InteractionLayerMask m_BendingEnabledInteractionLayers; [SerializeField] private bool m_OverrideInteractorLineOrigin; [SerializeField] private Transform m_LineOriginTransform; [SerializeField] private float m_LineOriginOffset; private float m_SquareSnapThresholdDistance; private Vector3 m_ReticlePos; private Vector3 m_ReticleNormal; private int m_EndPositionInLine; private bool m_SnapCurve; private bool m_PerformSetup; private GameObject m_ReticleToUse; private LineRenderer m_LineRenderer; private ILineRenderable m_LineRenderable; private IAdvancedLineRenderable m_AdvancedLineRenderable; private bool m_HasAdvancedLineRenderable; private IXRSelectInteractor m_LineRenderableAsSelectInteractor; private IXRHoverInteractor m_LineRenderableAsHoverInteractor; private XRBaseInteractor m_LineRenderableAsBaseInteractor; private XRRayInteractor m_LineRenderableAsRayInteractor; private NativeArray m_TargetPoints; private int m_NumTargetPoints; private Vector3[] m_TargetPointsFallback; private NativeArray m_RenderPoints; private int m_NumRenderPoints; private NativeArray m_PreviousRenderPoints; private int m_NumPreviousRenderPoints; private readonly Vector3[] m_ClearArray; private GameObject m_CustomReticle; private bool m_CustomReticleAttached; private XRInteractableSnapVolume m_XRInteractableSnapVolume; private const int k_NumberOfSegmentsForBendableLine = 20; private bool m_PreviousShouldBendLine; private Vector3 m_PreviousLineDirection; private Vector3 m_CurrentHitPoint; private bool m_HasHitInfo; private bool m_ValidHit; private float m_LastValidHitTime; private float m_LastValidLineLength; private Collider m_PreviousCollider; private XROrigin m_XROrigin; private bool m_HasRayInteractor; private bool m_HasBaseInteractor; private bool m_HasHoverInteractor; private bool m_HasSelectInteractor; private readonly BindableVariable m_UserScaleVar; private readonly FloatTweenableVariable m_LineLengthOverrideTweenableVariable; private readonly BindingsGroup m_BindingsGroup; public float lineWidth { get { return m_LineWidth; } set { m_LineWidth = value; m_PerformSetup = true; ((BindableVariableBase)(object)m_UserScaleVar).BroadcastValue(); } } public bool overrideInteractorLineLength { get { return m_OverrideInteractorLineLength; } set { m_OverrideInteractorLineLength = value; } } public float lineLength { get { return m_LineLength; } set { m_LineLength = value; } } public bool autoAdjustLineLength { get { return m_AutoAdjustLineLength; } set { m_AutoAdjustLineLength = value; } } public float minLineLength { get { return m_MinLineLength; } set { m_MinLineLength = value; } } public bool useDistanceToHitAsMaxLineLength { get { return m_UseDistanceToHitAsMaxLineLength; } set { m_UseDistanceToHitAsMaxLineLength = value; } } public float lineRetractionDelay { get { return m_LineRetractionDelay; } set { m_LineRetractionDelay = value; } } public float lineLengthChangeSpeed { get { return m_LineLengthChangeSpeed; } set { m_LineLengthChangeSpeed = value; } } public AnimationCurve widthCurve { get { return m_WidthCurve; } set { m_WidthCurve = value; m_PerformSetup = true; } } public bool setLineColorGradient { get { return m_SetLineColorGradient; } set { m_SetLineColorGradient = value; } } public Gradient validColorGradient { get { return m_ValidColorGradient; } set { m_ValidColorGradient = value; } } public Gradient invalidColorGradient { get { return m_InvalidColorGradient; } set { m_InvalidColorGradient = value; } } public Gradient blockedColorGradient { get { return m_BlockedColorGradient; } set { m_BlockedColorGradient = value; } } public bool treatSelectionAsValidState { get { return m_TreatSelectionAsValidState; } set { m_TreatSelectionAsValidState = value; } } public bool smoothMovement { get { return m_SmoothMovement; } set { m_SmoothMovement = value; } } public float followTightness { get { return m_FollowTightness; } set { m_FollowTightness = value; } } public float snapThresholdDistance { get { return m_SnapThresholdDistance; } set { m_SnapThresholdDistance = value; m_SquareSnapThresholdDistance = m_SnapThresholdDistance * m_SnapThresholdDistance; } } public GameObject reticle { get { return m_Reticle; } set { m_Reticle = value; if (Application.isPlaying) { SetupReticle(); } } } public GameObject blockedReticle { get { return m_BlockedReticle; } set { m_BlockedReticle = value; if (Application.isPlaying) { SetupBlockedReticle(); } } } public bool stopLineAtFirstRaycastHit { get { return m_StopLineAtFirstRaycastHit; } set { m_StopLineAtFirstRaycastHit = value; } } public bool stopLineAtSelection { get { return m_StopLineAtSelection; } set { m_StopLineAtSelection = value; } } public bool snapEndpointIfAvailable { get { return m_SnapEndpointIfAvailable; } set { m_SnapEndpointIfAvailable = value; } } public float lineBendRatio { get { return m_LineBendRatio; } set { m_LineBendRatio = Mathf.Clamp(value, 0.01f, 1f); } } private InteractionLayerMask bendingEnabledInteractionLayers { get { return m_BendingEnabledInteractionLayers; } set { m_BendingEnabledInteractionLayers = value; } } public bool overrideInteractorLineOrigin { get { return m_OverrideInteractorLineOrigin; } set { m_OverrideInteractorLineOrigin = value; } } public Transform lineOriginTransform { get { return m_LineOriginTransform; } set { m_LineOriginTransform = value; } } public float lineOriginOffset { get { return m_LineOriginOffset; } set { m_LineOriginOffset = value; } } protected void Reset() { } protected void OnValidate() { if (Application.isPlaying) { UpdateSettings(); } } protected void Awake() { m_LineRenderable = ((Component)this).GetComponent(); m_AdvancedLineRenderable = m_LineRenderable as IAdvancedLineRenderable; m_HasAdvancedLineRenderable = m_AdvancedLineRenderable != null; if (m_LineRenderable != null) { if (m_LineRenderable is XRBaseInteractor lineRenderableAsBaseInteractor) { m_LineRenderableAsBaseInteractor = lineRenderableAsBaseInteractor; m_HasBaseInteractor = true; } if (m_LineRenderable is IXRSelectInteractor lineRenderableAsSelectInteractor) { m_LineRenderableAsSelectInteractor = lineRenderableAsSelectInteractor; m_HasSelectInteractor = true; } if (m_LineRenderable is IXRHoverInteractor lineRenderableAsHoverInteractor) { m_LineRenderableAsHoverInteractor = lineRenderableAsHoverInteractor; m_HasHoverInteractor = true; } if (m_LineRenderable is XRRayInteractor lineRenderableAsRayInteractor) { m_LineRenderableAsRayInteractor = lineRenderableAsRayInteractor; m_HasRayInteractor = true; } } FindXROrigin(); SetupReticle(); SetupBlockedReticle(); ClearLineRenderer(); UpdateSettings(); } protected void OnEnable() { //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Expected O, but got Unknown if ((Object)(object)m_LineRenderer == (Object)null) { XRLoggingUtils.LogError($"Missing Line Renderer component on {this}. Disabling line visual.", (Object)(object)this); ((Behaviour)this).enabled = false; return; } if (m_LineRenderable == null) { XRLoggingUtils.LogError(string.Format("Missing {0} / Ray Interactor component on {1}. Disabling line visual.", "ILineRenderable", this), (Object)(object)this); ((Behaviour)this).enabled = false; ((Renderer)m_LineRenderer).enabled = false; return; } m_SnapCurve = true; if ((Object)(object)m_ReticleToUse != (Object)null) { m_ReticleToUse.SetActive(false); m_ReticleToUse = null; } m_BindingsGroup.AddBinding(((BindableVariableBase)(object)m_UserScaleVar).Subscribe((Action)delegate(float userScale) { m_LineRenderer.widthMultiplier = userScale * Mathf.Clamp(m_LineWidth, 0.0001f, 0.05f); })); Application.onBeforeRender += new UnityAction(OnBeforeRenderLineVisual); } protected void OnDisable() { //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Expected O, but got Unknown m_BindingsGroup.Clear(); if ((Object)(object)m_LineRenderer != (Object)null) { ((Renderer)m_LineRenderer).enabled = false; } if ((Object)(object)m_ReticleToUse != (Object)null) { m_ReticleToUse.SetActive(false); m_ReticleToUse = null; } Application.onBeforeRender -= new UnityAction(OnBeforeRenderLineVisual); } protected void OnDestroy() { if (m_TargetPoints.IsCreated) { m_TargetPoints.Dispose(); } if (m_RenderPoints.IsCreated) { m_RenderPoints.Dispose(); } if (m_PreviousRenderPoints.IsCreated) { m_PreviousRenderPoints.Dispose(); } m_LineLengthOverrideTweenableVariable.Dispose(); } protected void LateUpdate() { //IL_0052: Unknown result type (might be due to invalid IL or missing references) if (m_PerformSetup) { UpdateSettings(); m_PerformSetup = false; } if (m_LineRenderer.useWorldSpace && (Object)(object)m_XROrigin != (Object)null) { GameObject origin = m_XROrigin.Origin; float value = (((Object)(object)origin != (Object)null) ? origin.transform.localScale.x : 1f); ((BindableVariableBase)(object)m_UserScaleVar).Value = value; } } [BeforeRenderOrder(101)] private void OnBeforeRenderLineVisual() { UpdateLineVisual(); } internal void UpdateLineVisual() { //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_0217: Unknown result type (might be due to invalid IL or missing references) //IL_01f2: Unknown result type (might be due to invalid IL or missing references) //IL_01f7: Unknown result type (might be due to invalid IL or missing references) //IL_01fa: Unknown result type (might be due to invalid IL or missing references) //IL_01ff: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_03cb: Unknown result type (might be due to invalid IL or missing references) //IL_03d2: Unknown result type (might be due to invalid IL or missing references) //IL_032a: Unknown result type (might be due to invalid IL or missing references) //IL_032f: Unknown result type (might be due to invalid IL or missing references) //IL_0337: Unknown result type (might be due to invalid IL or missing references) //IL_033c: Unknown result type (might be due to invalid IL or missing references) //IL_0344: Unknown result type (might be due to invalid IL or missing references) //IL_0349: Unknown result type (might be due to invalid IL or missing references) //IL_02b8: Unknown result type (might be due to invalid IL or missing references) //IL_02c5: Unknown result type (might be due to invalid IL or missing references) //IL_02ca: Unknown result type (might be due to invalid IL or missing references) //IL_04ef: Unknown result type (might be due to invalid IL or missing references) //IL_0509: Unknown result type (might be due to invalid IL or missing references) //IL_0510: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_LineRenderableAsBaseInteractor != (Object)null && m_LineRenderableAsBaseInteractor.disableVisualsWhenBlockedInGroup && m_LineRenderableAsBaseInteractor.IsBlockedByInteractionWithinGroup()) { ((Renderer)m_LineRenderer).enabled = false; return; } m_NumRenderPoints = 0; if (!GetLinePoints(ref m_TargetPoints, out m_NumTargetPoints) || m_NumTargetPoints == 0) { ((Renderer)m_LineRenderer).enabled = false; return; } bool flag = m_HasSelectInteractor && m_LineRenderableAsSelectInteractor.hasSelection; bool flag2 = m_HasRayInteractor && m_LineRenderableAsRayInteractor.lineType == XRRayInteractor.LineType.StraightLine; GetLineOriginAndDirection(ref m_TargetPoints, m_NumTargetPoints, flag2, out var lineOrigin, out var lineDirection); m_ValidHit = ExtractHitInformation(ref m_TargetPoints, m_NumTargetPoints, out var targetEndPoint, out var hitSnapVolume); bool flag3 = false; if (flag) { for (int i = 0; i < m_LineRenderableAsSelectInteractor.interactablesSelected.Count; i++) { flag3 = ((int)bendingEnabledInteractionLayers & (int)m_LineRenderableAsSelectInteractor.interactablesSelected[i].interactionLayers) != 0; if (flag3) { break; } } } bool flag4 = flag && flag2 && flag3; bool flag5 = m_OverrideInteractorLineOrigin && m_ValidHit && flag2; bool flag6 = (hitSnapVolume || flag4 || flag5) && m_LineBendRatio < 1f; if (flag6) { m_NumTargetPoints = 20; m_EndPositionInLine = m_NumTargetPoints - 1; if (flag4) { FindClosestInteractableAttachPoint(in lineOrigin, out targetEndPoint); } } EnsureSize(ref m_TargetPoints, m_NumTargetPoints); if (!EnsureSize(ref m_RenderPoints, m_NumTargetPoints)) { m_NumRenderPoints = 0; } if (!EnsureSize(ref m_PreviousRenderPoints, m_NumTargetPoints)) { m_NumPreviousRenderPoints = 0; } if (flag6) { if (m_SmoothMovement) { if (m_PreviousShouldBendLine && m_NumPreviousRenderPoints > 0) { float num = m_FollowTightness * Time.deltaTime; lineDirection = Vector3.Lerp(m_PreviousLineDirection, lineDirection, num); lineOrigin = Vector3.Lerp(m_PreviousRenderPoints[0], lineOrigin, num); } m_PreviousLineDirection = lineDirection; } CalculateLineCurveRenderPoints(m_NumTargetPoints, m_LineBendRatio, in lineOrigin, in lineDirection, in targetEndPoint, ref m_TargetPoints); } m_PreviousShouldBendLine = flag6; if (m_NumPreviousRenderPoints != m_NumTargetPoints) { m_SnapCurve = true; } else if (m_SmoothMovement && m_NumPreviousRenderPoints > 0 && m_NumPreviousRenderPoints <= m_PreviousRenderPoints.Length && m_NumTargetPoints > 0 && m_NumTargetPoints <= m_TargetPoints.Length) { int num2 = m_NumPreviousRenderPoints - 1; int num3 = m_NumTargetPoints - 1; m_SnapCurve = Vector3.SqrMagnitude(m_PreviousRenderPoints[num2] - m_TargetPoints[num3]) > m_SquareSnapThresholdDistance; } AdjustLineAndReticle(flag, flag6, in lineOrigin, in targetEndPoint); bool flag7 = !flag6 && m_SmoothMovement && m_NumPreviousRenderPoints == m_NumTargetPoints && !m_SnapCurve; if (m_OverrideInteractorLineLength || flag7) { NativeArray targetPoints = m_TargetPoints.Reinterpret(); NativeArray previousRenderPoints = m_PreviousRenderPoints.Reinterpret(); NativeArray renderPoints = m_RenderPoints.Reinterpret(); float targetLineLength = ((m_OverrideInteractorLineLength && m_AutoAdjustLineLength) ? UpdateTargetLineLength(in lineOrigin, in targetEndPoint, m_MinLineLength, m_LineLength, m_LineRetractionDelay, m_LineLengthChangeSpeed, m_ValidHit || flag, m_UseDistanceToHitAsMaxLineLength) : m_LineLength); m_NumRenderPoints = ComputeNewRenderPoints(m_NumRenderPoints, m_NumTargetPoints, targetLineLength, flag7, m_OverrideInteractorLineLength, m_FollowTightness * Time.deltaTime, ref targetPoints, ref previousRenderPoints, ref renderPoints); } else { NativeArray.Copy(m_TargetPoints, 0, m_RenderPoints, 0, m_NumTargetPoints); m_NumRenderPoints = m_NumTargetPoints; } if (m_ValidHit || (m_TreatSelectionAsValidState && flag)) { bool flag8 = false; if (!flag && m_HasBaseInteractor && m_LineRenderableAsBaseInteractor.hasHover) { XRInteractionManager interactionManager = m_LineRenderableAsBaseInteractor.interactionManager; bool flag9 = false; foreach (IXRHoverInteractable item in m_LineRenderableAsBaseInteractor.interactablesHovered) { if (item is IXRSelectInteractable interactable && interactionManager.IsSelectPossible(m_LineRenderableAsBaseInteractor, interactable)) { flag9 = true; break; } } flag8 = !flag9; } SetColorGradient(flag8 ? m_BlockedColorGradient : m_ValidColorGradient); AssignReticle(flag8); } else { ClearReticle(); SetColorGradient(m_InvalidColorGradient); } if (m_NumRenderPoints >= 2) { ((Renderer)m_LineRenderer).enabled = true; m_LineRenderer.positionCount = m_NumRenderPoints; m_LineRenderer.SetPositions(m_RenderPoints); NativeArray.Copy(m_RenderPoints, 0, m_PreviousRenderPoints, 0, m_NumRenderPoints); m_NumPreviousRenderPoints = m_NumRenderPoints; m_SnapCurve = false; } else { ((Renderer)m_LineRenderer).enabled = false; } } private bool GetLinePoints(ref NativeArray linePoints, out int numPoints) { //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) if (m_HasAdvancedLineRenderable) { Ray? rayOriginOverride = null; if (m_OverrideInteractorLineOrigin && (Object)(object)m_LineOriginTransform != (Object)null) { Vector3 position = m_LineOriginTransform.position; Vector3 forward = m_LineOriginTransform.forward; rayOriginOverride = new Ray(position, forward); } return m_AdvancedLineRenderable.GetLinePoints(ref linePoints, out numPoints, rayOriginOverride); } bool linePoints2 = m_LineRenderable.GetLinePoints(ref m_TargetPointsFallback, out numPoints); EnsureSize(ref linePoints, numPoints); NativeArray.Copy(m_TargetPointsFallback, linePoints, numPoints); return linePoints2; } private void AdjustLineAndReticle(bool hasSelection, bool bendLine, in Vector3 lineOrigin, in Vector3 targetEndPoint) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0132: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009e: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_0157: Unknown result type (might be due to invalid IL or missing references) //IL_015e: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) //IL_01ab: Unknown result type (might be due to invalid IL or missing references) //IL_01ee: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_01d7: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) if (m_HasHitInfo) { m_ReticlePos = targetEndPoint; if ((m_ValidHit || m_StopLineAtFirstRaycastHit) && m_EndPositionInLine > 0 && m_EndPositionInLine < m_NumTargetPoints) { Vector3 val = m_TargetPoints[m_EndPositionInLine - 1]; Vector3 val2 = m_TargetPoints[m_EndPositionInLine] - val; Vector3 val3 = Vector3.Project(m_ReticlePos - val, val2); if (Vector3.Dot(val3, val2) < 0f) { val3 = Vector3.zero; } m_ReticlePos = val + val3; m_TargetPoints[m_EndPositionInLine] = m_ReticlePos; m_NumTargetPoints = m_EndPositionInLine + 1; } } if (!(m_StopLineAtSelection && hasSelection) || bendLine) { return; } float num = Vector3.SqrMagnitude(targetEndPoint - lineOrigin); float num2 = Vector3.SqrMagnitude(m_TargetPoints[m_EndPositionInLine] - lineOrigin); if (!(num < num2) && m_EndPositionInLine != 0) { return; } int num3 = 1; float num4 = Vector3.SqrMagnitude(m_TargetPoints[num3] - targetEndPoint); for (int i = 2; i < m_NumTargetPoints; i++) { float num5 = Vector3.SqrMagnitude(m_TargetPoints[i] - targetEndPoint); if (!(num5 < num4)) { break; } num3 = i; num4 = num5; } m_EndPositionInLine = num3; m_NumTargetPoints = m_EndPositionInLine + 1; m_ReticlePos = targetEndPoint; if (!m_HasHitInfo) { m_ReticleNormal = Vector3.Normalize(m_TargetPoints[m_EndPositionInLine - 1] - m_ReticlePos); } m_TargetPoints[m_EndPositionInLine] = m_ReticlePos; } private void FindClosestInteractableAttachPoint(in Vector3 lineOrigin, out Vector3 closestPoint) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) List interactablesSelected = m_LineRenderableAsSelectInteractor.interactablesSelected; closestPoint = interactablesSelected[0].GetAttachTransform(m_LineRenderableAsSelectInteractor).position; if (interactablesSelected.Count <= 1) { return; } float num = Vector3.SqrMagnitude(closestPoint - lineOrigin); for (int i = 1; i < interactablesSelected.Count; i++) { Vector3 position = interactablesSelected[i].GetAttachTransform(m_LineRenderableAsSelectInteractor).position; float num2 = Vector3.SqrMagnitude(position - lineOrigin); if (num2 < num) { closestPoint = position; num = num2; } } } private static bool EnsureSize(ref NativeArray array, int targetSize) { //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (array.IsCreated && array.Length >= targetSize) { return true; } if (array.IsCreated) { array.Dispose(); } array = new NativeArray(targetSize, (Allocator)4, (NativeArrayOptions)1); return false; } private void GetLineOriginAndDirection(ref NativeArray targetPoints, int numTargetPoints, bool isLineStraight, out Vector3 lineOrigin, out Vector3 lineDirection) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00b3: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) if (m_OverrideInteractorLineOrigin && (Object)(object)m_LineOriginTransform != (Object)null) { lineOrigin = m_LineOriginTransform.position; lineDirection = m_LineOriginTransform.forward; } else if (m_HasAdvancedLineRenderable) { m_AdvancedLineRenderable.GetLineOriginAndDirection(out lineOrigin, out lineDirection); } else { lineOrigin = targetPoints[0]; Vector3 val = targetPoints[numTargetPoints - 1]; Vector3 val2 = val - lineOrigin; lineDirection = ((Vector3)(ref val2)).normalized; } if (isLineStraight && m_LineOriginOffset > 0f && (!m_OverrideInteractorLineLength || m_LineOriginOffset < m_LineLength)) { lineOrigin += lineDirection * m_LineOriginOffset; } targetPoints[0] = lineOrigin; } private bool ExtractHitInformation(ref NativeArray targetPoints, int numTargetPoints, out Vector3 targetEndPoint, out bool hitSnapVolume) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) Collider val = null; hitSnapVolume = false; targetEndPoint = targetPoints[numTargetPoints - 1]; m_HasHitInfo = m_LineRenderable.TryGetHitInfo(out m_CurrentHitPoint, out m_ReticleNormal, out m_EndPositionInLine, out var isValidTarget); if (m_HasHitInfo) { targetEndPoint = m_CurrentHitPoint; if (isValidTarget && m_SnapEndpointIfAvailable && m_HasRayInteractor && m_LineRenderableAsRayInteractor.TryGetCurrentRaycast(out var raycastHit, out var _, out var _, out var _, out var isUIHitClosest) && !isUIHitClosest) { if (raycastHit.HasValue) { RaycastHit value = raycastHit.Value; val = ((RaycastHit)(ref value)).collider; } if ((Object)(object)val != (Object)(object)m_PreviousCollider && (Object)(object)val != (Object)null) { m_LineRenderableAsBaseInteractor.interactionManager.TryGetInteractableForCollider(val, out var _, out m_XRInteractableSnapVolume); } if ((Object)(object)m_XRInteractableSnapVolume != (Object)null) { targetEndPoint = (m_LineRenderableAsRayInteractor.hasSelection ? m_XRInteractableSnapVolume.GetClosestPointOfAttachTransform(m_LineRenderableAsRayInteractor) : m_XRInteractableSnapVolume.GetClosestPoint(targetEndPoint)); m_EndPositionInLine = 19; hitSnapVolume = true; } } } if ((Object)(object)val == (Object)null) { m_XRInteractableSnapVolume = null; } m_PreviousCollider = val; return isValidTarget; } private static void CalculateLineCurveRenderPoints(int numTargetPoints, float curveRatio, in Vector3 lineOrigin, in Vector3 lineDirection, in Vector3 endPoint, ref NativeArray targetPoints) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) NativeArray targetPoints2 = targetPoints.Reinterpret(); CurveUtility.GenerateCubicBezierCurve(numTargetPoints, curveRatio, float3.op_Implicit(lineOrigin), float3.op_Implicit(lineDirection), float3.op_Implicit(endPoint), ref targetPoints2); } private static int ComputeNewRenderPoints(int numRenderPoints, int numTargetPoints, float targetLineLength, bool shouldSmoothPoints, bool shouldOverwritePoints, float pointSmoothIncrement, ref NativeArray targetPoints, ref NativeArray previousRenderPoints, ref NativeArray renderPoints) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) float num = 0f; int length = renderPoints.Length; int num2 = numRenderPoints; for (int i = 0; i < numTargetPoints; i++) { if (num2 >= length) { break; } float3 unsmoothedTargetPoint = targetPoints[i]; float3 newRenderPoint = ((!shouldSmoothPoints) ? unsmoothedTargetPoint : math.lerp(previousRenderPoints[i], unsmoothedTargetPoint, pointSmoothIncrement)); if (shouldOverwritePoints && num2 > 0 && length > 0 && EvaluateLineEndPoint(targetLineLength, shouldSmoothPoints, in unsmoothedTargetPoint, renderPoints[num2 - 1], ref newRenderPoint, ref num)) { renderPoints[num2] = newRenderPoint; num2++; break; } renderPoints[num2] = newRenderPoint; num2++; } return num2; } private static bool EvaluateLineEndPoint(float targetLineLength, bool shouldSmoothPoint, in float3 unsmoothedTargetPoint, in float3 lastRenderPoint, ref float3 newRenderPoint, ref float lineLength) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) float3 val = newRenderPoint - lastRenderPoint; float num = math.length(val); if (shouldSmoothPoint) { float num2 = math.distance(lastRenderPoint, unsmoothedTargetPoint); if (num2 < num) { newRenderPoint = lastRenderPoint + math.normalize(val) * num2; num = num2; } } lineLength += num; if (lineLength <= targetLineLength) { return false; } float num3 = lineLength - targetLineLength; float num4 = 1f - num3 / num; newRenderPoint = math.lerp(lastRenderPoint, newRenderPoint, num4); return true; } private float UpdateTargetLineLength(in Vector3 lineOrigin, in Vector3 hitPoint, float minimumLineLength, float maximumLineLength, float lineRetractionDelaySeconds, float lineRetractionScalar, bool hasHit, bool deriveMaxLineLength) { //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) float unscaledTime = Time.unscaledTime; if (hasHit) { m_LastValidHitTime = Time.unscaledTime; m_LastValidLineLength = (deriveMaxLineLength ? Mathf.Min(Vector3.Distance(lineOrigin, hitPoint), maximumLineLength) : maximumLineLength); } float num = unscaledTime - m_LastValidHitTime; if (num > lineRetractionDelaySeconds) { m_LineLengthOverrideTweenableVariable.target = minimumLineLength; float num2 = (num - lineRetractionDelaySeconds) * lineRetractionScalar; m_LineLengthOverrideTweenableVariable.HandleTween(Time.unscaledDeltaTime * num2); } else { m_LineLengthOverrideTweenableVariable.target = Mathf.Max(m_LastValidLineLength, minimumLineLength); m_LineLengthOverrideTweenableVariable.HandleTween(Time.unscaledDeltaTime * lineRetractionScalar); } return m_LineLengthOverrideTweenableVariable.Value; } private void AssignReticle(bool useBlockedVisuals) { //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) GameObject reticleToUse = m_ReticleToUse; GameObject val = (useBlockedVisuals ? m_BlockedReticle : m_Reticle); m_ReticleToUse = (m_CustomReticleAttached ? m_CustomReticle : val); if ((Object)(object)reticleToUse != (Object)null && (Object)(object)reticleToUse != (Object)(object)m_ReticleToUse) { reticleToUse.SetActive(false); } if (!((Object)(object)m_ReticleToUse != (Object)null)) { return; } m_ReticleToUse.transform.position = m_ReticlePos; if (m_HasHoverInteractor && m_LineRenderableAsHoverInteractor.GetOldestInteractableHovered() is IXRReticleDirectionProvider iXRReticleDirectionProvider) { iXRReticleDirectionProvider.GetReticleDirection(m_LineRenderableAsHoverInteractor, m_ReticleNormal, out var reticleUp, out var optionalReticleForward); Quaternion lookRotation; if (optionalReticleForward.HasValue) { BurstMathUtility.LookRotationWithForwardProjectedOnPlane(optionalReticleForward.Value, in reticleUp, out lookRotation); } else { BurstMathUtility.LookRotationWithForwardProjectedOnPlane(m_ReticleToUse.transform.forward, in reticleUp, out lookRotation); } m_ReticleToUse.transform.rotation = lookRotation; } else { m_ReticleToUse.transform.forward = -m_ReticleNormal; } m_ReticleToUse.SetActive(true); } private void ClearReticle() { if ((Object)(object)m_ReticleToUse != (Object)null) { m_ReticleToUse.SetActive(false); m_ReticleToUse = null; } } private void SetColorGradient(Gradient colorGradient) { if (m_SetLineColorGradient) { m_LineRenderer.colorGradient = colorGradient; } } private void UpdateSettings() { m_SquareSnapThresholdDistance = m_SnapThresholdDistance * m_SnapThresholdDistance; if (TryFindLineRenderer()) { m_LineRenderer.widthMultiplier = Mathf.Clamp(m_LineWidth, 0.0001f, 0.05f); m_LineRenderer.widthCurve = m_WidthCurve; m_SnapCurve = true; } m_LineLengthOverrideTweenableVariable.target = lineLength; m_LineLengthOverrideTweenableVariable.HandleTween(1f); } private bool TryFindLineRenderer() { m_LineRenderer = ((Component)this).GetComponent(); if ((Object)(object)m_LineRenderer == (Object)null) { Debug.LogWarning((object)"No Line Renderer found for Interactor Line Visual.", (Object)(object)this); ((Behaviour)this).enabled = false; return false; } return true; } private void ClearLineRenderer() { if (TryFindLineRenderer()) { m_LineRenderer.SetPositions(m_ClearArray); m_LineRenderer.positionCount = 0; } } private void FindXROrigin() { if ((Object)(object)m_XROrigin == (Object)null) { ComponentLocatorUtility.TryFindComponent(out m_XROrigin); } } private void SetupReticle() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)m_Reticle == (Object)null)) { Scene scene = m_Reticle.scene; if (!((Scene)(ref scene)).IsValid()) { m_Reticle = Object.Instantiate(m_Reticle); } m_Reticle.SetActive(false); } } private void SetupBlockedReticle() { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)m_BlockedReticle == (Object)null)) { Scene scene = m_BlockedReticle.scene; if (!((Scene)(ref scene)).IsValid()) { m_BlockedReticle = Object.Instantiate(m_BlockedReticle); } m_BlockedReticle.SetActive(false); } } public bool AttachCustomReticle(GameObject reticleInstance) { m_CustomReticle = reticleInstance; m_CustomReticleAttached = true; return true; } public bool RemoveCustomReticle() { m_CustomReticle = null; m_CustomReticleAttached = false; return true; } public XRInteractorLineVisual() { //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Expected O, but got Unknown //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Expected O, but got Unknown //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_013a: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Expected O, but got Unknown //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_01b7: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_01d2: Unknown result type (might be due to invalid IL or missing references) //IL_0254: Unknown result type (might be due to invalid IL or missing references) //IL_0259: Unknown result type (might be due to invalid IL or missing references) //IL_0260: Unknown result type (might be due to invalid IL or missing references) //IL_0265: Unknown result type (might be due to invalid IL or missing references) //IL_028e: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Expected O, but got Unknown Gradient val = new Gradient(); val.colorKeys = (GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.white, 0f), new GradientColorKey(Color.white, 1f) }; val.alphaKeys = (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }; m_ValidColorGradient = val; val = new Gradient(); val.colorKeys = (GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.red, 0f), new GradientColorKey(Color.red, 1f) }; val.alphaKeys = (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }; m_InvalidColorGradient = val; val = new Gradient(); val.colorKeys = (GradientColorKey[])(object)new GradientColorKey[2] { new GradientColorKey(Color.yellow, 0f), new GradientColorKey(Color.yellow, 1f) }; val.alphaKeys = (GradientAlphaKey[])(object)new GradientAlphaKey[2] { new GradientAlphaKey(1f, 0f), new GradientAlphaKey(1f, 1f) }; m_BlockedColorGradient = val; m_FollowTightness = 10f; m_SnapThresholdDistance = 10f; m_StopLineAtFirstRaycastHit = true; m_SnapEndpointIfAvailable = true; m_LineBendRatio = 0.5f; m_BendingEnabledInteractionLayers = -1; m_OverrideInteractorLineOrigin = true; m_SnapCurve = true; m_NumTargetPoints = -1; m_TargetPointsFallback = Array.Empty(); m_NumRenderPoints = -1; m_NumPreviousRenderPoints = -1; m_ClearArray = (Vector3[])(object)new Vector3[2] { Vector3.zero, Vector3.zero }; m_UserScaleVar = new BindableVariable(0f, true, (Func)null, false); m_LineLengthOverrideTweenableVariable = new FloatTweenableVariable(); m_BindingsGroup = new BindingsGroup(); ((MonoBehaviour)this)..ctor(); } } [AddComponentMenu("XR/Visual/XR Interactor Reticle Visual", 11)] [DisallowMultipleComponent] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRInteractorReticleVisual.html")] public class XRInteractorReticleVisual : MonoBehaviour { private const int k_MaxRaycastHits = 10; [SerializeField] private float m_MaxRaycastDistance = 10f; [SerializeField] private GameObject m_ReticlePrefab; [SerializeField] private float m_PrefabScalingFactor = 1f; [SerializeField] private bool m_UndoDistanceScaling = true; [SerializeField] private bool m_AlignPrefabWithSurfaceNormal = true; [SerializeField] private float m_EndpointSmoothingTime = 0.02f; [SerializeField] private bool m_DrawWhileSelecting; [SerializeField] private bool m_DrawOnNoHit; [SerializeField] private LayerMask m_RaycastMask = LayerMask.op_Implicit(-1); private bool m_ReticleActive; private NativeArray m_InteractorLinePoints; private XROrigin m_XROrigin; private GameObject m_ReticleInstance; private XRBaseInteractor m_Interactor; private Vector3 m_TargetEndPoint; private Vector3 m_TargetEndNormal; private PhysicsScene m_LocalPhysicsScene; private bool m_HasRaycastHit; private readonly RaycastHit[] m_RaycastHits = (RaycastHit[])(object)new RaycastHit[10]; public float maxRaycastDistance { get { return m_MaxRaycastDistance; } set { m_MaxRaycastDistance = value; } } public GameObject reticlePrefab { get { return m_ReticlePrefab; } set { m_ReticlePrefab = value; SetupReticlePrefab(); } } public float prefabScalingFactor { get { return m_PrefabScalingFactor; } set { m_PrefabScalingFactor = value; } } public bool undoDistanceScaling { get { return m_UndoDistanceScaling; } set { m_UndoDistanceScaling = value; } } public bool alignPrefabWithSurfaceNormal { get { return m_AlignPrefabWithSurfaceNormal; } set { m_AlignPrefabWithSurfaceNormal = value; } } public float endpointSmoothingTime { get { return m_EndpointSmoothingTime; } set { m_EndpointSmoothingTime = value; } } public bool drawWhileSelecting { get { return m_DrawWhileSelecting; } set { m_DrawWhileSelecting = value; } } public bool drawOnNoHit { get { return m_DrawOnNoHit; } set { m_DrawOnNoHit = value; } } public LayerMask raycastMask { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RaycastMask; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_RaycastMask = value; } } public bool reticleActive { get { return m_ReticleActive; } set { m_ReticleActive = value; if ((Object)(object)m_ReticleInstance != (Object)null) { m_ReticleInstance.SetActive(value); } } } protected void Awake() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) m_LocalPhysicsScene = PhysicsSceneExtensions.GetPhysicsScene(((Component)this).gameObject.scene); if (((Component)this).TryGetComponent(ref m_Interactor)) { ((UnityEvent)m_Interactor.selectEntered).AddListener((UnityAction)OnSelectEntered); } FindXROrigin(); SetupReticlePrefab(); reticleActive = false; } protected void OnDisable() { reticleActive = false; } protected void Update() { if ((Object)(object)m_Interactor != (Object)null && UpdateReticleTarget()) { ActivateReticleAtTarget(); } else { reticleActive = false; } } protected void OnDestroy() { if (m_InteractorLinePoints.IsCreated) { m_InteractorLinePoints.Dispose(); } if ((Object)(object)m_Interactor != (Object)null) { ((UnityEvent)m_Interactor.selectEntered).RemoveListener((UnityAction)OnSelectEntered); } } private void FindXROrigin() { if ((Object)(object)m_XROrigin == (Object)null) { ComponentLocatorUtility.TryFindComponent(out m_XROrigin); } } private void SetupReticlePrefab() { if ((Object)(object)m_ReticleInstance != (Object)null) { Object.Destroy((Object)(object)m_ReticleInstance); } if ((Object)(object)m_ReticlePrefab != (Object)null) { m_ReticleInstance = Object.Instantiate(m_ReticlePrefab); } } private static RaycastHit FindClosestHit(RaycastHit[] hits, int hitCount) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) int num = 0; float num2 = float.MaxValue; for (int i = 0; i < hitCount; i++) { if (((RaycastHit)(ref hits[i])).distance < num2) { num2 = ((RaycastHit)(ref hits[i])).distance; num = i; } } return hits[num]; } private bool TryGetRaycastPoint(ref Vector3 raycastPos, ref Vector3 raycastNormal) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) bool result = false; int num = ((PhysicsScene)(ref m_LocalPhysicsScene)).Raycast(m_Interactor.attachTransform.position, m_Interactor.attachTransform.forward, m_RaycastHits, m_MaxRaycastDistance, LayerMask.op_Implicit(m_RaycastMask), (QueryTriggerInteraction)0); if (num != 0) { RaycastHit val = FindClosestHit(m_RaycastHits, num); raycastPos = ((RaycastHit)(ref val)).point; raycastNormal = ((RaycastHit)(ref val)).normal; result = true; } return result; } private bool UpdateReticleTarget() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_014c: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_0163: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_016f: Unknown result type (might be due to invalid IL or missing references) //IL_0174: Unknown result type (might be due to invalid IL or missing references) //IL_017d: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_00c6: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) if (!m_DrawWhileSelecting && m_Interactor.hasSelection) { return false; } if (m_Interactor.disableVisualsWhenBlockedInGroup && m_Interactor.IsBlockedByInteractionWithinGroup()) { return false; } bool flag = false; Vector3 raycastPos = Vector3.zero; Vector3 raycastNormal = Vector3.zero; if (m_Interactor is XRRayInteractor xRRayInteractor) { if (xRRayInteractor.TryGetCurrentRaycast(out var raycastHit, out var _, out var uiRaycastHit, out var uiRaycastHitIndex, out var isUIHitClosest)) { if (isUIHitClosest) { RaycastResult value = uiRaycastHit.Value; raycastPos = value.worldPosition; raycastNormal = value.worldNormal; if (Vector3.Dot(xRRayInteractor.rayOriginTransform.forward, raycastNormal) > 0f) { raycastNormal *= -1f; } flag = true; } else if (raycastHit.HasValue) { RaycastHit value2 = raycastHit.Value; raycastPos = ((RaycastHit)(ref value2)).point; raycastNormal = ((RaycastHit)(ref value2)).normal; flag = true; } } else if (m_DrawOnNoHit && xRRayInteractor.GetLinePoints(ref m_InteractorLinePoints, out uiRaycastHitIndex)) { _ = m_InteractorLinePoints; raycastPos = ((m_InteractorLinePoints.Length > 0) ? m_InteractorLinePoints[m_InteractorLinePoints.Length - 1] : Vector3.zero); } } else if (TryGetRaycastPoint(ref raycastPos, ref raycastNormal)) { flag = true; } m_HasRaycastHit = flag; if (flag || m_DrawOnNoHit) { Vector3 zero = Vector3.zero; m_TargetEndPoint = Vector3.SmoothDamp(m_TargetEndPoint, raycastPos, ref zero, m_EndpointSmoothingTime); m_TargetEndNormal = Vector3.SmoothDamp(m_TargetEndNormal, raycastNormal, ref zero, m_EndpointSmoothingTime); return true; } return false; } private void ActivateReticleAtTarget() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)m_ReticleInstance != (Object)null)) { return; } m_ReticleInstance.transform.position = m_TargetEndPoint; Vector3 val = (((Object)(object)m_XROrigin != (Object)null && (Object)(object)m_XROrigin.Origin != (Object)null) ? m_XROrigin.Origin.transform.up : Vector3.up); if (m_AlignPrefabWithSurfaceNormal && m_HasRaycastHit) { Vector3 val2 = val; float num = Vector3.Dot(m_TargetEndNormal, val2); if (Mathf.Approximately(Mathf.Abs(num), 1f)) { val2 = ((Component)m_Interactor).transform.forward * num; } Vector3 val3 = Vector3.ProjectOnPlane(val2, m_TargetEndNormal); if (val3 != Vector3.zero) { m_ReticleInstance.transform.rotation = Quaternion.LookRotation(val3, m_TargetEndNormal); } } else { Transform transform = m_ReticleInstance.transform; Vector3 val4 = m_Interactor.attachTransform.position - m_TargetEndPoint; transform.rotation = Quaternion.LookRotation(val, ((Vector3)(ref val4)).normalized); } float num2 = m_PrefabScalingFactor; if (m_UndoDistanceScaling) { num2 *= Vector3.Distance(m_Interactor.attachTransform.position, m_TargetEndPoint); } m_ReticleInstance.transform.localScale = new Vector3(num2, num2, num2); reticleActive = true; } private void OnSelectEntered(SelectEnterEventArgs args) { reticleActive = false; } } public abstract class XRBaseControllerInteractor : XRBaseInteractor, IXRActivateInteractor, IXRInteractor { public enum InputTriggerType { State, StateChange, Toggle, Sticky } [SerializeField] private InputTriggerType m_SelectActionTrigger = InputTriggerType.StateChange; [SerializeField] private bool m_HideControllerOnSelect; [SerializeField] private bool m_AllowHoveredActivate; [SerializeField] private TargetPriorityMode m_TargetPriorityMode; [SerializeField] [FormerlySerializedAs("m_PlayAudioClipOnSelectEnter")] private bool m_PlayAudioClipOnSelectEntered; [SerializeField] [FormerlySerializedAs("m_AudioClipForOnSelectEnter")] private AudioClip m_AudioClipForOnSelectEntered; [SerializeField] [FormerlySerializedAs("m_PlayAudioClipOnSelectExit")] private bool m_PlayAudioClipOnSelectExited; [SerializeField] [FormerlySerializedAs("m_AudioClipForOnSelectExit")] private AudioClip m_AudioClipForOnSelectExited; [SerializeField] private bool m_PlayAudioClipOnSelectCanceled; [SerializeField] private AudioClip m_AudioClipForOnSelectCanceled; [SerializeField] [FormerlySerializedAs("m_PlayAudioClipOnHoverEnter")] private bool m_PlayAudioClipOnHoverEntered; [SerializeField] [FormerlySerializedAs("m_AudioClipForOnHoverEnter")] private AudioClip m_AudioClipForOnHoverEntered; [SerializeField] [FormerlySerializedAs("m_PlayAudioClipOnHoverExit")] private bool m_PlayAudioClipOnHoverExited; [SerializeField] [FormerlySerializedAs("m_AudioClipForOnHoverExit")] private AudioClip m_AudioClipForOnHoverExited; [SerializeField] private bool m_PlayAudioClipOnHoverCanceled; [SerializeField] private AudioClip m_AudioClipForOnHoverCanceled; [SerializeField] private bool m_AllowHoverAudioWhileSelecting = true; [SerializeField] [FormerlySerializedAs("m_PlayHapticsOnSelectEnter")] private bool m_PlayHapticsOnSelectEntered; [SerializeField] [Range(0f, 1f)] private float m_HapticSelectEnterIntensity; [SerializeField] private float m_HapticSelectEnterDuration; [SerializeField] [FormerlySerializedAs("m_PlayHapticsOnSelectExit")] private bool m_PlayHapticsOnSelectExited; [SerializeField] [Range(0f, 1f)] private float m_HapticSelectExitIntensity; [SerializeField] private float m_HapticSelectExitDuration; [SerializeField] private bool m_PlayHapticsOnSelectCanceled; [SerializeField] [Range(0f, 1f)] private float m_HapticSelectCancelIntensity; [SerializeField] private float m_HapticSelectCancelDuration; [SerializeField] [FormerlySerializedAs("m_PlayHapticsOnHoverEnter")] private bool m_PlayHapticsOnHoverEntered; [SerializeField] [Range(0f, 1f)] private float m_HapticHoverEnterIntensity; [SerializeField] private float m_HapticHoverEnterDuration; [SerializeField] [FormerlySerializedAs("m_PlayHapticsOnHoverExit")] private bool m_PlayHapticsOnHoverExited; [SerializeField] [Range(0f, 1f)] private float m_HapticHoverExitIntensity; [SerializeField] private float m_HapticHoverExitDuration; [SerializeField] private bool m_PlayHapticsOnHoverCanceled; [SerializeField] [Range(0f, 1f)] private float m_HapticHoverCancelIntensity; [SerializeField] private float m_HapticHoverCancelDuration; [SerializeField] private bool m_AllowHoverHapticsWhileSelecting = true; private bool m_AllowActivate = true; private XRBaseController m_Controller; private readonly LinkedPool m_ActivateEventArgs = new LinkedPool(() => new ActivateEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_DeactivateEventArgs = new LinkedPool(() => new DeactivateEventArgs(), null, null, null, collectionCheck: false); private static readonly List s_ActivateTargets = new List(); private bool m_ToggleSelectActive; private bool m_ToggleSelectDeactivatedThisFrame; private bool m_WaitingForSelectDeactivate; private AudioSource m_EffectsAudioSource; public InputTriggerType selectActionTrigger { get { return m_SelectActionTrigger; } set { m_SelectActionTrigger = value; } } public bool hideControllerOnSelect { get { return m_HideControllerOnSelect; } set { m_HideControllerOnSelect = value; if (!m_HideControllerOnSelect && (Object)(object)m_Controller != (Object)null) { m_Controller.hideControllerModel = false; } } } public bool allowHoveredActivate { get { return m_AllowHoveredActivate; } set { m_AllowHoveredActivate = value; } } public override TargetPriorityMode targetPriorityMode { get { return m_TargetPriorityMode; } set { m_TargetPriorityMode = value; } } public bool playAudioClipOnSelectEntered { get { return m_PlayAudioClipOnSelectEntered; } set { m_PlayAudioClipOnSelectEntered = value; } } public AudioClip audioClipForOnSelectEntered { get { return m_AudioClipForOnSelectEntered; } set { m_AudioClipForOnSelectEntered = value; } } public bool playAudioClipOnSelectExited { get { return m_PlayAudioClipOnSelectExited; } set { m_PlayAudioClipOnSelectExited = value; } } public AudioClip audioClipForOnSelectExited { get { return m_AudioClipForOnSelectExited; } set { m_AudioClipForOnSelectExited = value; } } public bool playAudioClipOnSelectCanceled { get { return m_PlayAudioClipOnSelectCanceled; } set { m_PlayAudioClipOnSelectCanceled = value; } } public AudioClip audioClipForOnSelectCanceled { get { return m_AudioClipForOnSelectCanceled; } set { m_AudioClipForOnSelectCanceled = value; } } public bool playAudioClipOnHoverEntered { get { return m_PlayAudioClipOnHoverEntered; } set { m_PlayAudioClipOnHoverEntered = value; } } public AudioClip audioClipForOnHoverEntered { get { return m_AudioClipForOnHoverEntered; } set { m_AudioClipForOnHoverEntered = value; } } public bool playAudioClipOnHoverExited { get { return m_PlayAudioClipOnHoverExited; } set { m_PlayAudioClipOnHoverExited = value; } } public AudioClip audioClipForOnHoverExited { get { return m_AudioClipForOnHoverExited; } set { m_AudioClipForOnHoverExited = value; } } public bool playAudioClipOnHoverCanceled { get { return m_PlayAudioClipOnHoverCanceled; } set { m_PlayAudioClipOnHoverCanceled = value; } } public AudioClip audioClipForOnHoverCanceled { get { return m_AudioClipForOnHoverCanceled; } set { m_AudioClipForOnHoverCanceled = value; } } public bool allowHoverAudioWhileSelecting { get { return m_AllowHoverAudioWhileSelecting; } set { m_AllowHoverAudioWhileSelecting = value; } } public bool playHapticsOnSelectEntered { get { return m_PlayHapticsOnSelectEntered; } set { m_PlayHapticsOnSelectEntered = value; } } public float hapticSelectEnterIntensity { get { return m_HapticSelectEnterIntensity; } set { m_HapticSelectEnterIntensity = value; } } public float hapticSelectEnterDuration { get { return m_HapticSelectEnterDuration; } set { m_HapticSelectEnterDuration = value; } } public bool playHapticsOnSelectExited { get { return m_PlayHapticsOnSelectExited; } set { m_PlayHapticsOnSelectExited = value; } } public float hapticSelectExitIntensity { get { return m_HapticSelectExitIntensity; } set { m_HapticSelectExitIntensity = value; } } public float hapticSelectExitDuration { get { return m_HapticSelectExitDuration; } set { m_HapticSelectExitDuration = value; } } public bool playHapticsOnSelectCanceled { get { return m_PlayHapticsOnSelectCanceled; } set { m_PlayHapticsOnSelectCanceled = value; } } public float hapticSelectCancelIntensity { get { return m_HapticSelectCancelIntensity; } set { m_HapticSelectCancelIntensity = value; } } public float hapticSelectCancelDuration { get { return m_HapticSelectCancelDuration; } set { m_HapticSelectCancelDuration = value; } } public bool playHapticsOnHoverEntered { get { return m_PlayHapticsOnHoverEntered; } set { m_PlayHapticsOnHoverEntered = value; } } public float hapticHoverEnterIntensity { get { return m_HapticHoverEnterIntensity; } set { m_HapticHoverEnterIntensity = value; } } public float hapticHoverEnterDuration { get { return m_HapticHoverEnterDuration; } set { m_HapticHoverEnterDuration = value; } } public bool playHapticsOnHoverExited { get { return m_PlayHapticsOnHoverExited; } set { m_PlayHapticsOnHoverExited = value; } } public float hapticHoverExitIntensity { get { return m_HapticHoverExitIntensity; } set { m_HapticHoverExitIntensity = value; } } public float hapticHoverExitDuration { get { return m_HapticHoverExitDuration; } set { m_HapticHoverExitDuration = value; } } public bool playHapticsOnHoverCanceled { get { return m_PlayHapticsOnHoverCanceled; } set { m_PlayHapticsOnHoverCanceled = value; } } public float hapticHoverCancelIntensity { get { return m_HapticHoverCancelIntensity; } set { m_HapticHoverCancelIntensity = value; } } public float hapticHoverCancelDuration { get { return m_HapticHoverCancelDuration; } set { m_HapticHoverCancelDuration = value; } } public bool allowHoverHapticsWhileSelecting { get { return m_AllowHoverHapticsWhileSelecting; } set { m_AllowHoverHapticsWhileSelecting = value; } } public bool allowActivate { get { return m_AllowActivate; } set { m_AllowActivate = value; } } public XRBaseController xrController { get { return m_Controller; } set { if ((Object)(object)m_Controller != (Object)(object)value) { m_Controller = value; OnXRControllerChanged(); } } } public override bool isSelectActive { get { if (!base.isSelectActive) { return false; } if (base.isPerformingManualInteraction) { return true; } switch (m_SelectActionTrigger) { case InputTriggerType.State: if ((Object)(object)m_Controller != (Object)null) { return m_Controller.selectInteractionState.active; } return false; case InputTriggerType.StateChange: if (!((Object)(object)m_Controller != (Object)null) || !m_Controller.selectInteractionState.activatedThisFrame) { if (base.hasSelection && (Object)(object)m_Controller != (Object)null) { return !m_Controller.selectInteractionState.deactivatedThisFrame; } return false; } return true; case InputTriggerType.Toggle: if (!m_ToggleSelectActive) { if ((Object)(object)m_Controller != (Object)null && m_Controller.selectInteractionState.activatedThisFrame) { return !m_ToggleSelectDeactivatedThisFrame; } return false; } return true; case InputTriggerType.Sticky: if (!m_ToggleSelectActive && !m_WaitingForSelectDeactivate) { if ((Object)(object)m_Controller != (Object)null) { return m_Controller.selectInteractionState.activatedThisFrame; } return false; } return true; default: return false; } } } protected virtual bool isUISelectActive { get { if ((Object)(object)m_Controller != (Object)null) { return m_Controller.uiPressInteractionState.active; } return false; } } protected Vector2 uiScrollValue { get { //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)m_Controller != (Object)null)) { return Vector2.zero; } return m_Controller.uiScrollValue; } } public virtual bool shouldActivate { get { if (m_AllowActivate && (base.hasSelection || (m_AllowHoveredActivate && base.hasHover)) && (Object)(object)m_Controller != (Object)null) { return m_Controller.activateInteractionState.activatedThisFrame; } return false; } } public virtual bool shouldDeactivate { get { if (m_AllowActivate && (base.hasSelection || (m_AllowHoveredActivate && base.hasHover)) && (Object)(object)m_Controller != (Object)null) { return m_Controller.activateInteractionState.deactivatedThisFrame; } return false; } } [Obsolete("playAudioClipOnSelectEnter has been deprecated. Use playAudioClipOnSelectEntered instead. (UnityUpgradable) -> playAudioClipOnSelectEntered")] public bool playAudioClipOnSelectEnter => playAudioClipOnSelectEntered; [Obsolete("audioClipForOnSelectEnter has been deprecated. Use audioClipForOnSelectEntered instead. (UnityUpgradable) -> audioClipForOnSelectEntered")] public AudioClip audioClipForOnSelectEnter => audioClipForOnSelectEntered; [Obsolete("AudioClipForOnSelectEnter has been deprecated. Use audioClipForOnSelectEntered instead. (UnityUpgradable) -> audioClipForOnSelectEntered")] public AudioClip AudioClipForOnSelectEnter { get { return audioClipForOnSelectEntered; } set { audioClipForOnSelectEntered = value; } } [Obsolete("playAudioClipOnSelectExit has been deprecated. Use playAudioClipOnSelectExited instead. (UnityUpgradable) -> playAudioClipOnSelectExited")] public bool playAudioClipOnSelectExit => playAudioClipOnSelectExited; [Obsolete("audioClipForOnSelectExit has been deprecated. Use audioClipForOnSelectExited instead. (UnityUpgradable) -> audioClipForOnSelectExited")] public AudioClip audioClipForOnSelectExit => audioClipForOnSelectExited; [Obsolete("AudioClipForOnSelectExit has been deprecated. Use audioClipForOnSelectExited instead. (UnityUpgradable) -> audioClipForOnSelectExited")] public AudioClip AudioClipForOnSelectExit { get { return audioClipForOnSelectExited; } set { audioClipForOnSelectExited = value; } } [Obsolete("playAudioClipOnHoverEnter has been deprecated. Use playAudioClipOnHoverEntered instead. (UnityUpgradable) -> playAudioClipOnHoverEntered")] public bool playAudioClipOnHoverEnter => playAudioClipOnHoverEntered; [Obsolete("audioClipForOnHoverEnter has been deprecated. Use audioClipForOnHoverEntered instead. (UnityUpgradable) -> audioClipForOnHoverEntered")] public AudioClip audioClipForOnHoverEnter => audioClipForOnHoverEntered; [Obsolete("AudioClipForOnHoverEnter has been deprecated. Use audioClipForOnHoverEntered instead. (UnityUpgradable) -> audioClipForOnHoverEntered")] public AudioClip AudioClipForOnHoverEnter { get { return audioClipForOnHoverEntered; } set { audioClipForOnHoverEntered = value; } } [Obsolete("playAudioClipOnHoverExit has been deprecated. Use playAudioClipOnHoverExited instead. (UnityUpgradable) -> playAudioClipOnHoverExited")] public bool playAudioClipOnHoverExit => playAudioClipOnHoverExited; [Obsolete("audioClipForOnHoverExit has been deprecated. Use audioClipForOnHoverExited instead. (UnityUpgradable) -> audioClipForOnHoverExited")] public AudioClip audioClipForOnHoverExit => audioClipForOnHoverExited; [Obsolete("AudioClipForOnHoverExit has been deprecated. Use audioClipForOnHoverExited instead. (UnityUpgradable) -> audioClipForOnHoverExited")] public AudioClip AudioClipForOnHoverExit { get { return audioClipForOnHoverExited; } set { audioClipForOnHoverExited = value; } } [Obsolete("playHapticsOnSelectEnter has been deprecated. Use playHapticsOnSelectEntered instead. (UnityUpgradable) -> playHapticsOnSelectEntered")] public bool playHapticsOnSelectEnter => playHapticsOnSelectEntered; [Obsolete("playHapticsOnSelectExit has been deprecated. Use playHapticsOnSelectExited instead. (UnityUpgradable) -> playHapticsOnSelectExited")] public bool playHapticsOnSelectExit => playHapticsOnSelectExited; [Obsolete("playHapticsOnHoverEnter has been deprecated. Use playHapticsOnHoverEntered instead. (UnityUpgradable) -> playHapticsOnHoverEntered")] public bool playHapticsOnHoverEnter => playHapticsOnHoverEntered; [Obsolete("validTargets has been deprecated. Use a property of type List instead.")] protected virtual List validTargets { get; } = new List(); protected override void Awake() { targetsForSelection = new List(); base.Awake(); xrController = FindControllerComponent(); if ((Object)(object)xrController == (Object)null) { Debug.LogWarning((object)string.Format("Could not find {0} component on {1} or any of its parents.", "XRBaseController", ((Component)this).gameObject), (Object)(object)this); } if (m_SelectActionTrigger == InputTriggerType.Toggle && (Object)(object)base.startingSelectedInteractable != (Object)null) { m_ToggleSelectActive = true; } if (m_PlayAudioClipOnSelectEntered || m_PlayAudioClipOnSelectExited || m_PlayAudioClipOnSelectCanceled || m_PlayAudioClipOnHoverEntered || m_PlayAudioClipOnHoverExited || m_PlayAudioClipOnHoverCanceled) { CreateEffectsAudioSource(); } } internal XRBaseController FindControllerComponent() { return ((Component)this).gameObject.GetComponentInParent(true); } private protected virtual void OnXRControllerChanged() { } public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.PreprocessInteractor(updatePhase); if (updatePhase != XRInteractionUpdateOrder.UpdatePhase.Dynamic) { return; } m_ToggleSelectDeactivatedThisFrame = false; if ((m_SelectActionTrigger == InputTriggerType.Toggle || m_SelectActionTrigger == InputTriggerType.Sticky) && !((Object)(object)m_Controller == (Object)null)) { if (m_ToggleSelectActive && m_Controller.selectInteractionState.activatedThisFrame) { m_ToggleSelectActive = false; m_ToggleSelectDeactivatedThisFrame = true; m_WaitingForSelectDeactivate = true; } if (m_Controller.selectInteractionState.deactivatedThisFrame) { m_WaitingForSelectDeactivate = false; } } } public override void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.ProcessInteractor(updatePhase); if (updatePhase != XRInteractionUpdateOrder.UpdatePhase.Dynamic || !m_AllowActivate) { return; } bool flag = shouldActivate; bool flag2 = shouldDeactivate; if (flag || flag2) { GetActivateTargets(s_ActivateTargets); if (flag) { SendActivateEvent(s_ActivateTargets); } if (flag2) { SendDeactivateEvent(s_ActivateTargets); } } } private void SendActivateEvent(List targets) { foreach (IXRActivateInteractable target in targets) { if (target != null && !((Object)((target is Object) ? target : null) == (Object)null)) { ActivateEventArgs v; using (m_ActivateEventArgs.Get(out v)) { v.interactorObject = this; v.interactableObject = target; target.OnActivated(v); } } } } private void SendDeactivateEvent(List targets) { foreach (IXRActivateInteractable target in targets) { if (target != null && !((Object)((target is Object) ? target : null) == (Object)null)) { DeactivateEventArgs v; using (m_DeactivateEventArgs.Get(out v)) { v.interactorObject = this; v.interactableObject = target; target.OnDeactivated(v); } } } } public virtual void GetActivateTargets(List targets) { targets.Clear(); if (base.hasSelection) { foreach (IXRSelectInteractable item3 in base.interactablesSelected) { if (item3 is IXRActivateInteractable item) { targets.Add(item); } } return; } if (!m_AllowHoveredActivate || !base.hasHover) { return; } foreach (IXRHoverInteractable item4 in base.interactablesHovered) { if (item4 is IXRActivateInteractable item2) { targets.Add(item2); } } } protected override void OnSelectEntering(SelectEnterEventArgs args) { base.OnSelectEntering(args); HandleSelecting(); if (m_PlayHapticsOnSelectEntered) { SendHapticImpulse(m_HapticSelectEnterIntensity, m_HapticSelectEnterDuration); } if (m_PlayAudioClipOnSelectEntered) { PlayAudio(m_AudioClipForOnSelectEntered); } } protected override void OnSelectExiting(SelectExitEventArgs args) { base.OnSelectExiting(args); HandleDeselecting(); if (args.isCanceled) { if (m_PlayHapticsOnSelectCanceled) { SendHapticImpulse(m_HapticSelectCancelIntensity, m_HapticSelectCancelDuration); } if (m_PlayAudioClipOnSelectCanceled) { PlayAudio(m_AudioClipForOnSelectCanceled); } } else { if (m_PlayHapticsOnSelectExited) { SendHapticImpulse(m_HapticSelectExitIntensity, m_HapticSelectExitDuration); } if (m_PlayAudioClipOnSelectExited) { PlayAudio(m_AudioClipForOnSelectExited); } } } protected override void OnHoverEntering(HoverEnterEventArgs args) { base.OnHoverEntering(args); IXRHoverInteractable interactableObject = args.interactableObject; if (m_PlayHapticsOnHoverEntered && CanPlayHoverHaptics(interactableObject)) { SendHapticImpulse(m_HapticHoverEnterIntensity, m_HapticHoverEnterDuration); } if (m_PlayAudioClipOnHoverEntered && CanPlayHoverAudio(interactableObject)) { PlayAudio(m_AudioClipForOnHoverEntered); } } protected override void OnHoverExiting(HoverExitEventArgs args) { base.OnHoverExiting(args); IXRHoverInteractable interactableObject = args.interactableObject; if (args.isCanceled) { if (m_PlayHapticsOnHoverCanceled && CanPlayHoverHaptics(interactableObject)) { SendHapticImpulse(m_HapticHoverCancelIntensity, m_HapticHoverCancelDuration); } if (m_PlayAudioClipOnHoverCanceled && CanPlayHoverAudio(interactableObject)) { PlayAudio(m_AudioClipForOnHoverCanceled); } } else { if (m_PlayHapticsOnHoverExited && CanPlayHoverHaptics(interactableObject)) { SendHapticImpulse(m_HapticHoverExitIntensity, m_HapticHoverExitDuration); } if (m_PlayAudioClipOnHoverExited && CanPlayHoverAudio(interactableObject)) { PlayAudio(m_AudioClipForOnHoverExited); } } } private bool CanPlayHoverAudio(IXRHoverInteractable hoveredInteractable) { if (!m_AllowHoverAudioWhileSelecting) { return !IsSelecting(hoveredInteractable); } return true; } private bool CanPlayHoverHaptics(IXRHoverInteractable hoveredInteractable) { if (!m_AllowHoverHapticsWhileSelecting) { return !IsSelecting(hoveredInteractable); } return true; } public bool SendHapticImpulse(float amplitude, float duration) { if ((Object)(object)m_Controller != (Object)null) { return m_Controller.SendHapticImpulse(amplitude, duration); } return false; } protected virtual void PlayAudio(AudioClip audioClip) { if (!((Object)(object)audioClip == (Object)null)) { if ((Object)(object)m_EffectsAudioSource == (Object)null) { CreateEffectsAudioSource(); } m_EffectsAudioSource.PlayOneShot(audioClip); } } private void CreateEffectsAudioSource() { m_EffectsAudioSource = ((Component)this).gameObject.AddComponent(); m_EffectsAudioSource.loop = false; m_EffectsAudioSource.playOnAwake = false; } private void HandleSelecting() { m_ToggleSelectActive = true; m_WaitingForSelectDeactivate = false; if (m_HideControllerOnSelect && (Object)(object)m_Controller != (Object)null) { m_Controller.hideControllerModel = true; } } private void HandleDeselecting() { if (!base.hasSelection) { m_ToggleSelectActive = false; m_WaitingForSelectDeactivate = false; if ((Object)(object)m_Controller != (Object)null) { m_Controller.hideControllerModel = false; } } } Transform IXRInteractor.get_transform() { return ((Component)this).transform; } } [SelectionBase] [DisallowMultipleComponent] [DefaultExecutionOrder(-99)] public abstract class XRBaseInteractor : MonoBehaviour, IXRHoverInteractor, IXRInteractor, IXRSelectInteractor, IXRTargetPriorityInteractor, IXRGroupMember, IXRInteractionStrengthInteractor { private const float k_InteractionStrengthHover = 0f; private const float k_InteractionStrengthSelect = 1f; [SerializeField] private XRInteractionManager m_InteractionManager; [SerializeField] private LayerMask m_InteractionLayerMask = LayerMask.op_Implicit(-1); [SerializeField] private InteractionLayerMask m_InteractionLayers = -1; [SerializeField] private Transform m_AttachTransform; [SerializeField] private bool m_KeepSelectedTargetValid = true; [SerializeField] private bool m_DisableVisualsWhenBlockedInGroup = true; [SerializeField] private XRBaseInteractable m_StartingSelectedInteractable; [SerializeField] private XRBaseTargetFilter m_StartingTargetFilter; [SerializeField] private HoverEnterEvent m_HoverEntered = new HoverEnterEvent(); [SerializeField] private HoverExitEvent m_HoverExited = new HoverExitEvent(); [SerializeField] private SelectEnterEvent m_SelectEntered = new SelectEnterEvent(); [SerializeField] private SelectExitEvent m_SelectExited = new SelectExitEvent(); private IXRTargetFilter m_TargetFilter; private bool m_AllowHover = true; private bool m_AllowSelect = true; private bool m_IsPerformingManualInteraction; private readonly HashSetList m_InteractablesHovered = new HashSetList(0); private readonly HashSetList m_InteractablesSelected = new HashSetList(0); [SerializeField] [RequireInterface(typeof(IXRHoverFilter))] private List m_StartingHoverFilters = new List(); private readonly ExposedRegistrationList m_HoverFilters = new ExposedRegistrationList { bufferChanges = false }; [SerializeField] [RequireInterface(typeof(IXRSelectFilter))] private List m_StartingSelectFilters = new List(); private readonly ExposedRegistrationList m_SelectFilters = new ExposedRegistrationList { bufferChanges = false }; private readonly BindableVariable m_LargestInteractionStrength = new BindableVariable(0f, true, (Func)null, false); private readonly Dictionary m_AttachPoseOnSelect = new Dictionary(); private readonly Dictionary m_LocalAttachPoseOnSelect = new Dictionary(); private readonly HashSetList m_InteractionStrengthInteractables = new HashSetList(0); private readonly Dictionary m_InteractionStrengths = new Dictionary(); private IXRSelectInteractable m_ManualInteractionInteractable; private XRInteractionManager m_RegisteredInteractionManager; private static readonly ProfilerMarker s_ProcessInteractionStrengthMarker = new ProfilerMarker("XRI.ProcessInteractionStrength.Interactors"); private Transform m_XROriginTransform; private bool m_HasXROrigin; private bool m_FailedToFindXROrigin; [SerializeField] [FormerlySerializedAs("m_OnHoverEnter")] private XRInteractorEvent m_OnHoverEntered = new XRInteractorEvent(); [SerializeField] [FormerlySerializedAs("m_OnHoverExit")] private XRInteractorEvent m_OnHoverExited = new XRInteractorEvent(); [SerializeField] [FormerlySerializedAs("m_OnSelectEnter")] private XRInteractorEvent m_OnSelectEntered = new XRInteractorEvent(); [SerializeField] [FormerlySerializedAs("m_OnSelectExit")] private XRInteractorEvent m_OnSelectExited = new XRInteractorEvent(); public XRInteractionManager interactionManager { get { return m_InteractionManager; } set { m_InteractionManager = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { RegisterWithInteractionManager(); } } } public IXRInteractionGroup containingGroup { get; private set; } public InteractionLayerMask interactionLayers { get { return m_InteractionLayers; } set { m_InteractionLayers = value; } } public Transform attachTransform { get { return m_AttachTransform; } set { m_AttachTransform = value; } } public bool keepSelectedTargetValid { get { return m_KeepSelectedTargetValid; } set { m_KeepSelectedTargetValid = value; } } public bool disableVisualsWhenBlockedInGroup { get { return m_DisableVisualsWhenBlockedInGroup; } set { m_DisableVisualsWhenBlockedInGroup = value; } } public XRBaseInteractable startingSelectedInteractable { get { return m_StartingSelectedInteractable; } set { m_StartingSelectedInteractable = value; } } public XRBaseTargetFilter startingTargetFilter { get { return m_StartingTargetFilter; } set { m_StartingTargetFilter = value; } } public HoverEnterEvent hoverEntered { get { return m_HoverEntered; } set { m_HoverEntered = value; } } public HoverExitEvent hoverExited { get { return m_HoverExited; } set { m_HoverExited = value; } } public SelectEnterEvent selectEntered { get { return m_SelectEntered; } set { m_SelectEntered = value; } } public SelectExitEvent selectExited { get { return m_SelectExited; } set { m_SelectExited = value; } } public IXRTargetFilter targetFilter { get { IXRTargetFilter iXRTargetFilter = m_TargetFilter; Object val = (Object)((iXRTargetFilter is Object) ? iXRTargetFilter : null); if (val != null && val == (Object)null) { return null; } return m_TargetFilter; } set { if (Application.isPlaying) { targetFilter?.Unlink(this); m_TargetFilter = value; targetFilter?.Link(this); } else { m_TargetFilter = value; } } } public bool allowHover { get { return m_AllowHover; } set { m_AllowHover = value; } } public bool allowSelect { get { return m_AllowSelect; } set { m_AllowSelect = value; } } public bool isPerformingManualInteraction => m_IsPerformingManualInteraction; public List interactablesHovered => (List)m_InteractablesHovered.AsList(); public bool hasHover => m_InteractablesHovered.Count > 0; public List interactablesSelected => (List)m_InteractablesSelected.AsList(); public IXRSelectInteractable firstInteractableSelected { get; private set; } public bool hasSelection => m_InteractablesSelected.Count > 0; public List startingHoverFilters { get { return m_StartingHoverFilters; } set { m_StartingHoverFilters = value; } } public IXRFilterList hoverFilters => m_HoverFilters; public List startingSelectFilters { get { return m_StartingSelectFilters; } set { m_StartingSelectFilters = value; } } public IXRFilterList selectFilters => m_SelectFilters; public IReadOnlyBindableVariable largestInteractionStrength => (IReadOnlyBindableVariable)(object)m_LargestInteractionStrength; public virtual bool isHoverActive => m_AllowHover; public virtual bool isSelectActive => m_AllowSelect; public virtual TargetPriorityMode targetPriorityMode { get; set; } public virtual List targetsForSelection { get; set; } public virtual XRBaseInteractable.MovementType? selectedInteractableMovementTypeOverride => null; [Obsolete("interactionLayerMask has been deprecated. Use interactionLayers instead.")] public LayerMask interactionLayerMask { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_InteractionLayerMask; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_InteractionLayerMask = value; } } [Obsolete("enableInteractions has been deprecated. Use allowHover and allowSelect instead.")] public bool enableInteractions { get { if (m_AllowHover) { return m_AllowSelect; } return false; } set { m_AllowHover = value; m_AllowSelect = value; } } [Obsolete("onHoverEntered has been deprecated. Use hoverEntered with updated signature instead.")] public XRInteractorEvent onHoverEntered { get { return m_OnHoverEntered; } set { m_OnHoverEntered = value; } } [Obsolete("onHoverExited has been deprecated. Use hoverExited with updated signature instead.")] public XRInteractorEvent onHoverExited { get { return m_OnHoverExited; } set { m_OnHoverExited = value; } } [Obsolete("onSelectEntered has been deprecated. Use selectEntered with updated signature instead.")] public XRInteractorEvent onSelectEntered { get { return m_OnSelectEntered; } set { m_OnSelectEntered = value; } } [Obsolete("onSelectExited has been deprecated. Use selectExited with updated signature instead.")] public XRInteractorEvent onSelectExited { get { return m_OnSelectExited; } set { m_OnSelectExited = value; } } [Obsolete("onHoverEnter has been deprecated. Use onHoverEntered instead. (UnityUpgradable) -> onHoverEntered")] public XRInteractorEvent onHoverEnter => onHoverEntered; [Obsolete("onHoverExit has been deprecated. Use onHoverExited instead. (UnityUpgradable) -> onHoverExited")] public XRInteractorEvent onHoverExit => onHoverExited; [Obsolete("onSelectEnter has been deprecated. Use onSelectEntered instead. (UnityUpgradable) -> onSelectEntered")] public XRInteractorEvent onSelectEnter => onSelectEntered; [Obsolete("onSelectExit has been deprecated. Use onSelectExited instead. (UnityUpgradable) -> onSelectExited")] public XRInteractorEvent onSelectExit => onSelectExited; [Obsolete("selectTarget has been deprecated. Use interactablesSelected, GetOldestInteractableSelected, hasSelection, or IsSelecting for similar functionality.")] public XRBaseInteractable selectTarget { get { if (!hasSelection) { return null; } return interactablesSelected[0] as XRBaseInteractable; } protected set { interactablesSelected[0] = value; } } [Obsolete("hoverTargets has been deprecated. Use interactablesHovered instead.")] protected List hoverTargets { get; } = new List(); [Obsolete("requireSelectExclusive has been deprecated. Put logic in CanSelect instead.")] public virtual bool requireSelectExclusive => false; public event Action registered; public event Action unregistered; internal bool TryGetXROrigin(out Transform origin) { if (m_HasXROrigin) { origin = m_XROriginTransform; return true; } if (!m_FailedToFindXROrigin) { XROrigin componentInParent = ((Component)this).GetComponentInParent(); if ((Object)(object)componentInParent != (Object)null) { GameObject origin2 = componentInParent.Origin; if ((Object)(object)origin2 != (Object)null) { m_XROriginTransform = origin2.transform; m_HasXROrigin = true; origin = m_XROriginTransform; return true; } } m_FailedToFindXROrigin = true; } origin = null; return false; } [Conditional("UNITY_EDITOR")] protected virtual void Reset() { } protected virtual void Awake() { CreateAttachTransform(); if ((Object)(object)m_StartingTargetFilter != (Object)null) { targetFilter = m_StartingTargetFilter; } m_HoverFilters.RegisterReferences(m_StartingHoverFilters, (Object)(object)this); m_SelectFilters.RegisterReferences(m_StartingSelectFilters, (Object)(object)this); FindCreateInteractionManager(); if (((UnityEventBase)m_OnHoverEntered).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnHoverExited).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnSelectEntered).GetPersistentEventCount() > 0 || ((UnityEventBase)m_OnSelectExited).GetPersistentEventCount() > 0) { Debug.LogWarning((object)"Some deprecated Interactor Events are being used. These deprecated events will be removed in a future version. Please convert these to use the newer events, and update script method signatures for Dynamic listeners.", (Object)(object)this); } } protected virtual void OnEnable() { FindCreateInteractionManager(); RegisterWithInteractionManager(); } protected virtual void OnDisable() { UnregisterWithInteractionManager(); } protected virtual void Start() { if ((Object)(object)m_InteractionManager != (Object)null && (Object)(object)m_StartingSelectedInteractable != (Object)null) { m_InteractionManager.SelectEnter((IXRSelectInteractor)this, (IXRSelectInteractable)m_StartingSelectedInteractable); } } protected virtual void OnDestroy() { targetFilter?.Unlink(this); if (containingGroup != null) { IXRInteractionGroup iXRInteractionGroup = containingGroup; Object val = (Object)((iXRInteractionGroup is Object) ? iXRInteractionGroup : null); if (val == null || val != (Object)null) { containingGroup.RemoveGroupMember(this); } } } public virtual Transform GetAttachTransform(IXRInteractable interactable) { if (!((Object)(object)m_AttachTransform != (Object)null)) { return ((Component)this).transform; } return m_AttachTransform; } public Pose GetAttachPoseOnSelect(IXRSelectInteractable interactable) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (!m_AttachPoseOnSelect.TryGetValue(interactable, out var value)) { return Pose.identity; } return value; } public Pose GetLocalAttachPoseOnSelect(IXRSelectInteractable interactable) { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) if (!m_LocalAttachPoseOnSelect.TryGetValue(interactable, out var value)) { return Pose.identity; } return value; } public virtual void GetValidTargets(List targets) { } private void FindCreateInteractionManager() { if (!((Object)(object)m_InteractionManager != (Object)null)) { m_InteractionManager = ComponentLocatorUtility.FindOrCreateComponent(); } } private void RegisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)(object)m_InteractionManager)) { UnregisterWithInteractionManager(); if ((Object)(object)m_InteractionManager != (Object)null) { m_InteractionManager.RegisterInteractor(this); m_RegisteredInteractionManager = m_InteractionManager; } } } private void UnregisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)null)) { m_RegisteredInteractionManager.UnregisterInteractor(this); m_RegisteredInteractionManager = null; } } public virtual bool CanHover(IXRHoverInteractable interactable) { return true; } public virtual bool CanSelect(IXRSelectInteractable interactable) { return true; } public bool IsHovering(IXRHoverInteractable interactable) { return m_InteractablesHovered.Contains(interactable); } public bool IsSelecting(IXRSelectInteractable interactable) { return m_InteractablesSelected.Contains(interactable); } protected bool IsHovering(IXRInteractable interactable) { if (interactable is IXRHoverInteractable interactable2) { return IsHovering(interactable2); } return false; } protected bool IsSelecting(IXRInteractable interactable) { if (interactable is IXRSelectInteractable interactable2) { return IsSelecting(interactable2); } return false; } protected void CaptureAttachPose(IXRSelectInteractable interactable) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) Transform val = GetAttachTransform(interactable); if ((Object)(object)val != (Object)null) { m_AttachPoseOnSelect[interactable] = new Pose(val.position, val.rotation); m_LocalAttachPoseOnSelect[interactable] = new Pose(val.localPosition, val.localRotation); } else { m_AttachPoseOnSelect.Remove(interactable); m_LocalAttachPoseOnSelect.Remove(interactable); } } protected void CreateAttachTransform() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_AttachTransform == (Object)null) { m_AttachTransform = new GameObject("[" + ((Object)((Component)this).gameObject).name + "] Attach").transform; m_AttachTransform.SetParent(((Component)this).transform, false); m_AttachTransform.localPosition = Vector3.zero; m_AttachTransform.localRotation = Quaternion.identity; } } public virtual void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { } public virtual void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { } public float GetInteractionStrength(IXRInteractable interactable) { if (m_InteractionStrengths.TryGetValue(interactable, out var value)) { return value; } return 0f; } void IXRInteractionStrengthInteractor.ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase) { ProcessInteractionStrength(updatePhase); } void IXRInteractor.OnRegistered(InteractorRegisteredEventArgs args) { OnRegistered(args); } void IXRInteractor.OnUnregistered(InteractorUnregisteredEventArgs args) { OnUnregistered(args); } bool IXRHoverInteractor.CanHover(IXRHoverInteractable interactable) { if (interactable is XRBaseInteractable interactable2) { if (CanHover(interactable2)) { return ProcessHoverFilters(interactable); } return false; } if (CanHover(interactable)) { return ProcessHoverFilters(interactable); } return false; } void IXRHoverInteractor.OnHoverEntering(HoverEnterEventArgs args) { OnHoverEntering(args); } void IXRHoverInteractor.OnHoverEntered(HoverEnterEventArgs args) { OnHoverEntered(args); } void IXRHoverInteractor.OnHoverExiting(HoverExitEventArgs args) { OnHoverExiting(args); } void IXRHoverInteractor.OnHoverExited(HoverExitEventArgs args) { OnHoverExited(args); } bool IXRSelectInteractor.CanSelect(IXRSelectInteractable interactable) { if (interactable is XRBaseInteractable interactable2) { if (CanSelect(interactable2)) { return ProcessSelectFilters(interactable); } return false; } if (CanSelect(interactable)) { return ProcessSelectFilters(interactable); } return false; } void IXRSelectInteractor.OnSelectEntering(SelectEnterEventArgs args) { OnSelectEntering(args); } void IXRSelectInteractor.OnSelectEntered(SelectEnterEventArgs args) { OnSelectEntered(args); } void IXRSelectInteractor.OnSelectExiting(SelectExitEventArgs args) { OnSelectExiting(args); } void IXRSelectInteractor.OnSelectExited(SelectExitEventArgs args) { OnSelectExited(args); } protected virtual void OnRegistered(InteractorRegisteredEventArgs args) { if ((Object)(object)args.manager != (Object)(object)m_InteractionManager) { Debug.LogWarning((object)("An Interactor was registered with an unexpected XRInteractionManager." + $" {this} was expecting to communicate with \"{m_InteractionManager}\" but was registered with \"{args.manager}\"."), (Object)(object)this); } this.registered?.Invoke(args); } protected virtual void OnUnregistered(InteractorUnregisteredEventArgs args) { if ((Object)(object)args.manager != (Object)(object)m_RegisteredInteractionManager) { Debug.LogWarning((object)("An Interactor was unregistered from an unexpected XRInteractionManager." + $" {this} was expecting to communicate with \"{m_RegisteredInteractionManager}\" but was unregistered from \"{args.manager}\"."), (Object)(object)this); } this.unregistered?.Invoke(args); } protected virtual void OnHoverEntering(HoverEnterEventArgs args) { m_InteractablesHovered.Add(args.interactableObject); if (args.interactableObject is IXRInteractionStrengthInteractable iXRInteractionStrengthInteractable) { m_InteractionStrengthInteractables.Add(iXRInteractionStrengthInteractable); } hoverTargets.Add(args.interactable); OnHoverEntering(args.interactable); } protected virtual void OnHoverEntered(HoverEnterEventArgs args) { ((UnityEvent)m_HoverEntered)?.Invoke(args); OnHoverEntered(args.interactable); } protected virtual void OnHoverExiting(HoverExitEventArgs args) { m_InteractablesHovered.Remove(args.interactableObject); if (m_InteractionStrengthInteractables.Count > 0 && args.interactableObject is IXRInteractionStrengthInteractable iXRInteractionStrengthInteractable && !IsSelecting(iXRInteractionStrengthInteractable)) { m_InteractionStrengthInteractables.Remove(iXRInteractionStrengthInteractable); } hoverTargets.Remove(args.interactable); OnHoverExiting(args.interactable); } protected virtual void OnHoverExited(HoverExitEventArgs args) { ((UnityEvent)m_HoverExited)?.Invoke(args); OnHoverExited(args.interactable); } protected virtual void OnSelectEntering(SelectEnterEventArgs args) { m_InteractablesSelected.Add(args.interactableObject); if (args.interactableObject is IXRInteractionStrengthInteractable iXRInteractionStrengthInteractable) { m_InteractionStrengthInteractables.Add(iXRInteractionStrengthInteractable); } if (m_InteractablesSelected.Count == 1) { firstInteractableSelected = args.interactableObject; } CaptureAttachPose(args.interactableObject); OnSelectEntering(args.interactable); } protected virtual void OnSelectEntered(SelectEnterEventArgs args) { ((UnityEvent)m_SelectEntered)?.Invoke(args); OnSelectEntered(args.interactable); } protected virtual void OnSelectExiting(SelectExitEventArgs args) { m_InteractablesSelected.Remove(args.interactableObject); if (m_InteractionStrengthInteractables.Count > 0 && args.interactableObject is IXRInteractionStrengthInteractable iXRInteractionStrengthInteractable && !IsHovering(iXRInteractionStrengthInteractable)) { m_InteractionStrengthInteractables.Remove(iXRInteractionStrengthInteractable); } OnSelectExiting(args.interactable); } protected virtual void OnSelectExited(SelectExitEventArgs args) { ((UnityEvent)m_SelectExited)?.Invoke(args); OnSelectExited(args.interactable); if (m_InteractablesSelected.Count == 0) { firstInteractableSelected = null; m_AttachPoseOnSelect.Clear(); m_LocalAttachPoseOnSelect.Clear(); } } protected unsafe virtual void ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) float num = 0f; ProfilerMarker val = s_ProcessInteractionStrengthMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { m_InteractionStrengths.Clear(); int i = 0; for (int count = m_InteractablesSelected.Count; i < count; i++) { IXRSelectInteractable iXRSelectInteractable = m_InteractablesSelected[i]; if (!(iXRSelectInteractable is IXRInteractionStrengthInteractable)) { m_InteractionStrengths[iXRSelectInteractable] = 1f; num = 1f; } } int j = 0; for (int count2 = m_InteractablesHovered.Count; j < count2; j++) { IXRHoverInteractable iXRHoverInteractable = m_InteractablesHovered[j]; if (!(iXRHoverInteractable is IXRInteractionStrengthInteractable) && !IsSelecting(iXRHoverInteractable)) { m_InteractionStrengths[iXRHoverInteractable] = 0f; } } int k = 0; for (int count3 = m_InteractionStrengthInteractables.Count; k < count3; k++) { IXRInteractionStrengthInteractable iXRInteractionStrengthInteractable = m_InteractionStrengthInteractables[k]; float interactionStrength = iXRInteractionStrengthInteractable.GetInteractionStrength(this); m_InteractionStrengths[iXRInteractionStrengthInteractable] = interactionStrength; num = Mathf.Max(num, interactionStrength); } } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } ((BindableVariableBase)(object)m_LargestInteractionStrength).Value = num; } public virtual void StartManualInteraction(IXRSelectInteractable interactable) { if ((Object)(object)interactionManager == (Object)null) { Debug.LogWarning((object)"Cannot start manual interaction without an Interaction Manager set.", (Object)(object)this); return; } interactionManager.SelectEnter(this, interactable); m_IsPerformingManualInteraction = true; m_ManualInteractionInteractable = interactable; } public virtual void EndManualInteraction() { if ((Object)(object)interactionManager == (Object)null) { Debug.LogWarning((object)"Cannot end manual interaction without an Interaction Manager set.", (Object)(object)this); return; } if (!m_IsPerformingManualInteraction) { Debug.LogWarning((object)"Tried to end manual interaction but was not performing manual interaction. Ignoring request.", (Object)(object)this); return; } interactionManager.SelectExit(this, m_ManualInteractionInteractable); m_IsPerformingManualInteraction = false; m_ManualInteractionInteractable = null; } protected bool ProcessHoverFilters(IXRHoverInteractable interactable) { return XRFilterUtility.Process(m_HoverFilters, this, interactable); } protected bool ProcessSelectFilters(IXRSelectInteractable interactable) { return XRFilterUtility.Process(m_SelectFilters, this, interactable); } void IXRGroupMember.OnRegisteringAsGroupMember(IXRInteractionGroup group) { if (containingGroup != null) { Debug.LogError((object)(((Object)this).name + " is already part of a Group. Remove the member from the Group first."), (Object)(object)this); } else if (!group.ContainsGroupMember(this)) { Debug.LogError((object)("OnRegisteringAsGroupMember was called but the Group does not contain " + ((Object)this).name + ". Add the member to the Group rather than calling this method directly."), (Object)(object)this); } else { containingGroup = group; } } void IXRGroupMember.OnRegisteringAsNonGroupMember() { containingGroup = null; } [Obsolete("OnHoverEntering(XRBaseInteractable) has been deprecated. Use OnHoverEntering(HoverEnterEventArgs) instead.")] protected virtual void OnHoverEntering(XRBaseInteractable interactable) { } [Obsolete("OnHoverEntered(XRBaseInteractable) has been deprecated. Use OnHoverEntered(HoverEnterEventArgs) instead.")] protected virtual void OnHoverEntered(XRBaseInteractable interactable) { ((UnityEvent)m_OnHoverEntered)?.Invoke(interactable); } [Obsolete("OnHoverExiting(XRBaseInteractable) has been deprecated. Use OnHoverExiting(HoverExitEventArgs) instead.")] protected virtual void OnHoverExiting(XRBaseInteractable interactable) { } [Obsolete("OnHoverExited(XRBaseInteractable) has been deprecated. Use OnHoverExited(HoverExitEventArgs) instead.")] protected virtual void OnHoverExited(XRBaseInteractable interactable) { ((UnityEvent)m_OnHoverExited)?.Invoke(interactable); } [Obsolete("OnSelectEntering(XRBaseInteractable) has been deprecated. Use OnSelectEntering(SelectEnterEventArgs) instead.")] protected virtual void OnSelectEntering(XRBaseInteractable interactable) { } [Obsolete("OnSelectEntered(XRBaseInteractable) has been deprecated. Use OnSelectEntered(SelectEnterEventArgs) instead.")] protected virtual void OnSelectEntered(XRBaseInteractable interactable) { ((UnityEvent)m_OnSelectEntered)?.Invoke(interactable); } [Obsolete("OnSelectExiting(XRBaseInteractable) has been deprecated. Use OnSelectExiting(SelectExitEventArgs) instead.")] protected virtual void OnSelectExiting(XRBaseInteractable interactable) { } [Obsolete("OnSelectExited(XRBaseInteractable) has been deprecated. Use OnSelectExited(SelectExitEventArgs) instead.")] protected virtual void OnSelectExited(XRBaseInteractable interactable) { ((UnityEvent)m_OnSelectExited)?.Invoke(interactable); } [Obsolete("GetHoverTargets has been deprecated. Use interactablesHovered instead.")] public void GetHoverTargets(List targets) { targets.Clear(); targets.AddRange(hoverTargets); } [Obsolete("GetValidTargets(List) has been deprecated. Override GetValidTargets(List) instead. XRInteractionManager.GetValidTargets will stitch the results together with GetValidTargets(List), but by default this method now does nothing.")] public virtual void GetValidTargets(List targets) { } [Obsolete("CanHover(XRBaseInteractable) has been deprecated. Use CanHover(IXRHoverInteractable) instead.")] public virtual bool CanHover(XRBaseInteractable interactable) { return CanHover((IXRHoverInteractable)interactable); } [Obsolete("CanSelect(XRBaseInteractable) has been deprecated. Use CanSelect(IXRSelectInteractable) instead.")] public virtual bool CanSelect(XRBaseInteractable interactable) { return CanSelect((IXRSelectInteractable)interactable); } [Obsolete("StartManualInteraction(XRBaseInteractable) has been deprecated. Use StartManualInteraction(IXRSelectInteractable) instead.")] public virtual void StartManualInteraction(XRBaseInteractable interactable) { StartManualInteraction((IXRSelectInteractable)interactable); } Transform IXRInteractor.get_transform() { return ((Component)this).transform; } } [DisallowMultipleComponent] [AddComponentMenu("XR/XR Direct Interactor", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRDirectInteractor.html")] public class XRDirectInteractor : XRBaseControllerInteractor { [SerializeField] private bool m_ImproveAccuracyWithSphereCollider; [SerializeField] private LayerMask m_PhysicsLayerMask = LayerMask.op_Implicit(1); [SerializeField] private QueryTriggerInteraction m_PhysicsTriggerInteraction = (QueryTriggerInteraction)1; private readonly HashSet m_StayedColliders = new HashSet(); private readonly TriggerContactMonitor m_TriggerContactMonitor = new TriggerContactMonitor(); private static readonly WaitForFixedUpdate s_WaitForFixedUpdate = new WaitForFixedUpdate(); private IEnumerator m_UpdateCollidersAfterTriggerStay; private bool m_UsingSphereColliderAccuracyImprovement; private SphereCollider m_SphereCollider; private PhysicsScene m_LocalPhysicsScene; private Vector3 m_LastSphereCastOrigin = Vector3.zero; private readonly Collider[] m_OverlapSphereHits = (Collider[])(object)new Collider[25]; private readonly RaycastHit[] m_SphereCastHits = (RaycastHit[])(object)new RaycastHit[25]; private bool m_FirstFrame = true; private bool m_ContactsSortedThisFrame; private readonly List m_SortedValidTargets = new List(); public bool improveAccuracyWithSphereCollider { get { return m_ImproveAccuracyWithSphereCollider; } set { m_ImproveAccuracyWithSphereCollider = value; } } public bool usingSphereColliderAccuracyImprovement => m_UsingSphereColliderAccuracyImprovement; public LayerMask physicsLayerMask { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PhysicsLayerMask; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_PhysicsLayerMask = value; } } public QueryTriggerInteraction physicsTriggerInteraction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PhysicsTriggerInteraction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_PhysicsTriggerInteraction = value; } } protected List unsortedValidTargets { get; } = new List(); protected override void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) base.Awake(); m_LocalPhysicsScene = PhysicsSceneExtensions.GetPhysicsScene(((Component)this).gameObject.scene); m_TriggerContactMonitor.interactionManager = base.interactionManager; m_UpdateCollidersAfterTriggerStay = UpdateCollidersAfterOnTriggerStay(); ValidateColliderConfiguration(); } protected override void OnEnable() { base.OnEnable(); m_TriggerContactMonitor.contactAdded += OnContactAdded; m_TriggerContactMonitor.contactRemoved += OnContactRemoved; ResetCollidersAndValidTargets(); if (!m_UsingSphereColliderAccuracyImprovement) { ((MonoBehaviour)this).StartCoroutine(m_UpdateCollidersAfterTriggerStay); } } protected override void OnDisable() { base.OnDisable(); m_TriggerContactMonitor.contactAdded -= OnContactAdded; m_TriggerContactMonitor.contactRemoved -= OnContactRemoved; ResetCollidersAndValidTargets(); if (!m_UsingSphereColliderAccuracyImprovement) { ((MonoBehaviour)this).StopCoroutine(m_UpdateCollidersAfterTriggerStay); } } protected void OnTriggerEnter(Collider other) { if (!m_UsingSphereColliderAccuracyImprovement) { m_TriggerContactMonitor.AddCollider(other); } } protected void OnTriggerStay(Collider other) { if (!m_UsingSphereColliderAccuracyImprovement) { m_StayedColliders.Add(other); } } protected void OnTriggerExit(Collider other) { if (!m_UsingSphereColliderAccuracyImprovement) { m_TriggerContactMonitor.RemoveCollider(other); } } private IEnumerator UpdateCollidersAfterOnTriggerStay() { while (true) { yield return s_WaitForFixedUpdate; m_TriggerContactMonitor.UpdateStayedColliders(m_StayedColliders); } } public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.PreprocessInteractor(updatePhase); if (m_UsingSphereColliderAccuracyImprovement && updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { EvaluateSphereOverlap(); } } public override void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.ProcessInteractor(updatePhase); if (!m_UsingSphereColliderAccuracyImprovement && updatePhase == XRInteractionUpdateOrder.UpdatePhase.Fixed) { m_StayedColliders.Clear(); } } private void EvaluateSphereOverlap() { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) m_ContactsSortedThisFrame = false; m_StayedColliders.Clear(); Vector3 val = GetAttachTransform(null).TransformPoint(m_SphereCollider.center); Vector3 overlapStart = m_LastSphereCastOrigin; Vector3 overlapEnd = val; float num = m_SphereCollider.radius * ((Component)m_SphereCollider).transform.lossyScale.x; BurstPhysicsUtils.GetSphereOverlapParameters(in overlapStart, in overlapEnd, out var normalizedOverlapVector, out var overlapSqrMagnitude, out var overlapDistance); if (m_FirstFrame || overlapSqrMagnitude < 0.001f) { int num2 = ((PhysicsScene)(ref m_LocalPhysicsScene)).OverlapSphere(overlapEnd, num, m_OverlapSphereHits, LayerMask.op_Implicit(m_PhysicsLayerMask), m_PhysicsTriggerInteraction); for (int i = 0; i < num2; i++) { m_StayedColliders.Add(m_OverlapSphereHits[i]); } } else { int num3 = ((PhysicsScene)(ref m_LocalPhysicsScene)).SphereCast(overlapStart, num, normalizedOverlapVector, m_SphereCastHits, overlapDistance, LayerMask.op_Implicit(m_PhysicsLayerMask), m_PhysicsTriggerInteraction); for (int j = 0; j < num3; j++) { m_StayedColliders.Add(((RaycastHit)(ref m_SphereCastHits[j])).collider); } } m_TriggerContactMonitor.UpdateStayedColliders(m_StayedColliders); m_LastSphereCastOrigin = val; m_FirstFrame = false; } private void ValidateColliderConfiguration() { Rigidbody val = default(Rigidbody); if (((Component)this).TryGetComponent(ref val)) { return; } Collider[] components = ((Component)this).GetComponents(); if (m_ImproveAccuracyWithSphereCollider && components.Length == 1) { Collider obj = components[0]; SphereCollider val2 = (SphereCollider)(object)((obj is SphereCollider) ? obj : null); if (val2 != null) { m_SphereCollider = val2; ((Collider)m_SphereCollider).enabled = false; m_UsingSphereColliderAccuracyImprovement = true; return; } } bool flag = false; Collider[] array = components; for (int i = 0; i < array.Length; i++) { if (array[i].isTrigger) { flag = true; break; } } if (!flag) { Debug.LogWarning((object)"Direct Interactor does not have required Collider set as a trigger.", (Object)(object)this); } } public override void GetValidTargets(List targets) { targets.Clear(); if (((Behaviour)this).isActiveAndEnabled) { IXRTargetFilter iXRTargetFilter = base.targetFilter; if (iXRTargetFilter != null && iXRTargetFilter.canProcess) { iXRTargetFilter.Process(this, unsortedValidTargets, targets); return; } if (m_ContactsSortedThisFrame) { targets.AddRange(m_SortedValidTargets); return; } SortingHelpers.SortByDistanceToInteractor(this, unsortedValidTargets, m_SortedValidTargets); targets.AddRange(m_SortedValidTargets); m_ContactsSortedThisFrame = true; } } public override bool CanHover(IXRHoverInteractable interactable) { if (base.CanHover(interactable)) { if (base.hasSelection) { return IsSelecting(interactable); } return true; } return false; } public override bool CanSelect(IXRSelectInteractable interactable) { if (base.CanSelect(interactable)) { if (base.hasSelection) { return IsSelecting(interactable); } return true; } return false; } protected override void OnRegistered(InteractorRegisteredEventArgs args) { base.OnRegistered(args); args.manager.interactableRegistered += OnInteractableRegistered; args.manager.interactableUnregistered += OnInteractableUnregistered; m_TriggerContactMonitor.interactionManager = args.manager; if (!m_UsingSphereColliderAccuracyImprovement) { m_TriggerContactMonitor.ResolveUnassociatedColliders(); XRInteractionManager.RemoveAllUnregistered(args.manager, unsortedValidTargets); } } protected override void OnUnregistered(InteractorUnregisteredEventArgs args) { base.OnUnregistered(args); args.manager.interactableRegistered -= OnInteractableRegistered; args.manager.interactableUnregistered -= OnInteractableUnregistered; } private void OnInteractableRegistered(InteractableRegisteredEventArgs args) { IXRInteractable interactableObject = args.interactableObject; m_TriggerContactMonitor.ResolveUnassociatedColliders(interactableObject); if (m_TriggerContactMonitor.IsContacting(interactableObject)) { OnContactAdded(interactableObject); } } private void OnInteractableUnregistered(InteractableUnregisteredEventArgs args) { OnContactRemoved(args.interactableObject); } private void OnContactAdded(IXRInteractable interactable) { if (!unsortedValidTargets.Contains(interactable)) { unsortedValidTargets.Add(interactable); m_ContactsSortedThisFrame = false; } } private void OnContactRemoved(IXRInteractable interactable) { if (unsortedValidTargets.Remove(interactable)) { m_ContactsSortedThisFrame = false; } } private void ResetCollidersAndValidTargets() { unsortedValidTargets.Clear(); m_SortedValidTargets.Clear(); m_ContactsSortedThisFrame = false; m_FirstFrame = true; m_StayedColliders.Clear(); m_TriggerContactMonitor.UpdateStayedColliders(m_StayedColliders); } [Obsolete("CanHover(XRBaseInteractable) has been deprecated. Use CanHover(IXRHoverInteractable) instead.")] public override bool CanHover(XRBaseInteractable interactable) { return CanHover((IXRHoverInteractable)interactable); } [Obsolete("CanSelect(XRBaseInteractable) has been deprecated. Use CanSelect(IXRSelectInteractable) instead.")] public override bool CanSelect(XRBaseInteractable interactable) { return CanSelect((IXRSelectInteractable)interactable); } } [AddComponentMenu("XR/XR Gaze Interactor", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRGazeInteractor.html")] public class XRGazeInteractor : XRRayInteractor { public enum GazeAssistanceCalculation { FixedSize, ColliderSize } [SerializeField] private GazeAssistanceCalculation m_GazeAssistanceCalculation; [SerializeField] private float m_GazeAssistanceColliderFixedSize = 1f; [SerializeField] private float m_GazeAssistanceColliderScale = 1f; [SerializeField] private XRInteractableSnapVolume m_GazeAssistanceSnapVolume; [SerializeField] private bool m_GazeAssistanceDistanceScaling; [SerializeField] private bool m_ClampGazeAssistanceDistanceScaling; [SerializeField] private float m_GazeAssistanceDistanceScalingClampValue = 1f; public GazeAssistanceCalculation gazeAssistanceCalculation { get { return m_GazeAssistanceCalculation; } set { m_GazeAssistanceCalculation = value; } } public float gazeAssistanceColliderFixedSize { get { return m_GazeAssistanceColliderFixedSize; } set { m_GazeAssistanceColliderFixedSize = value; } } public float gazeAssistanceColliderScale { get { return m_GazeAssistanceColliderScale; } set { m_GazeAssistanceColliderScale = value; } } public XRInteractableSnapVolume gazeAssistanceSnapVolume { get { return m_GazeAssistanceSnapVolume; } set { m_GazeAssistanceSnapVolume = value; } } public bool gazeAssistanceDistanceScaling { get { return m_GazeAssistanceDistanceScaling; } set { m_GazeAssistanceDistanceScaling = value; } } public bool clampGazeAssistanceDistanceScaling { get { return m_ClampGazeAssistanceDistanceScaling; } set { m_ClampGazeAssistanceDistanceScaling = value; } } public float gazeAssistanceDistanceScalingClampValue { get { return m_GazeAssistanceDistanceScalingClampValue; } set { m_GazeAssistanceDistanceScalingClampValue = value; } } protected override void Awake() { base.Awake(); CreateGazeAssistanceSnapVolume(); } private void CreateGazeAssistanceSnapVolume() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Expected O, but got Unknown if ((Object)(object)m_GazeAssistanceSnapVolume == (Object)null) { GameObject val = new GameObject("Gaze Snap Volume"); ((Collider)val.AddComponent()).isTrigger = true; m_GazeAssistanceSnapVolume = val.AddComponent(); } else if ((Object)(object)m_GazeAssistanceSnapVolume.snapCollider != (Object)null && !(m_GazeAssistanceSnapVolume.snapCollider is SphereCollider) && !(m_GazeAssistanceSnapVolume.snapCollider is BoxCollider)) { Debug.LogWarning((object)"The Gaze Assistance Snap Volume is using a Snap Collider which does not support automatic dynamic scaling by the XR Gaze Interactor. It must be a Sphere Collider or Box Collider.", (Object)(object)this); } } public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.PreprocessInteractor(updatePhase); if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { IXRInteractable interactable = (CanInteract(base.currentNearestValidTarget) ? base.currentNearestValidTarget : null); UpdateSnapVolumeInteractable(interactable); } } protected virtual void UpdateSnapVolumeInteractable(IXRInteractable interactable) { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_008e: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_GazeAssistanceSnapVolume == (Object)null) { return; } Vector3 val = Vector3.zero; float num = m_GazeAssistanceColliderScale; float num2 = 0f; IXRInteractable interactable2 = null; Collider val2 = null; if (interactable is XRBaseInteractable xRBaseInteractable && (Object)(object)xRBaseInteractable != (Object)null && xRBaseInteractable.allowGazeAssistance) { interactable2 = interactable; val = interactable.transform.position; if (TryGetHitInfo(out var position, out var _, out var _, out var _) && XRInteractableUtility.TryGetClosestCollider(interactable, position, out var distanceInfo)) { val2 = distanceInfo.collider; Bounds bounds = distanceInfo.collider.bounds; val = ((Bounds)(ref bounds)).center; } num2 = CalculateSnapColliderSize(val2); } if (m_GazeAssistanceDistanceScaling) { num *= Vector3.Distance(((Component)this).transform.position, val); if (m_ClampGazeAssistanceDistanceScaling) { num = Mathf.Clamp(num, 0f, m_GazeAssistanceDistanceScalingClampValue); } } Transform transform = ((Component)m_GazeAssistanceSnapVolume).transform; transform.position = val; transform.localScale = new Vector3(num, num, num); Collider snapCollider = m_GazeAssistanceSnapVolume.snapCollider; SphereCollider val3 = (SphereCollider)(object)((snapCollider is SphereCollider) ? snapCollider : null); if (val3 == null) { BoxCollider val4 = (BoxCollider)(object)((snapCollider is BoxCollider) ? snapCollider : null); if (val4 != null) { val4.size = new Vector3(num2, num2, num2); } } else { val3.radius = num2; } m_GazeAssistanceSnapVolume.interactable = interactable2; m_GazeAssistanceSnapVolume.snapToCollider = val2; } private float CalculateSnapColliderSize(Collider interactableCollider) { //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) switch (m_GazeAssistanceCalculation) { case GazeAssistanceCalculation.FixedSize: return m_GazeAssistanceColliderFixedSize; case GazeAssistanceCalculation.ColliderSize: if ((Object)(object)interactableCollider != (Object)null) { Bounds bounds = interactableCollider.bounds; return Vector3Extensions.MaxComponent(((Bounds)(ref bounds)).size); } break; } return 0f; } private bool CanInteract(IXRInteractable interactable) { if (!(interactable is IXRHoverInteractable interactable2) || !base.interactionManager.CanHover(this, interactable2)) { if (interactable is IXRSelectInteractable interactable3) { return base.interactionManager.CanSelect(this, interactable3); } return false; } return true; } protected override float GetHoverTimeToSelect(IXRInteractable interactable) { if (interactable is IXROverridesGazeAutoSelect { overrideGazeTimeToSelect: not false } iXROverridesGazeAutoSelect) { return iXROverridesGazeAutoSelect.gazeTimeToSelect; } return base.GetHoverTimeToSelect(interactable); } protected override float GetTimeToAutoDeselect(IXRInteractable interactable) { if (interactable is IXROverridesGazeAutoSelect { overrideTimeToAutoDeselectGaze: not false } iXROverridesGazeAutoSelect) { return iXROverridesGazeAutoSelect.timeToAutoDeselectGaze; } return base.GetTimeToAutoDeselect(interactable); } } [DisallowMultipleComponent] [AddComponentMenu("XR/XR Interaction Group", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRInteractionGroup.html")] [DefaultExecutionOrder(-100)] public class XRInteractionGroup : MonoBehaviour, IXRInteractionOverrideGroup, IXRInteractionGroup, IXRGroupMember { public static class GroupNames { public static readonly string k_Left = "Left"; public static readonly string k_Right = "Right"; public static readonly string k_Center = "Center"; } [Serializable] internal class GroupMemberAndOverridesPair { [RequireInterface(typeof(IXRGroupMember))] public Object groupMember; [RequireInterface(typeof(IXRGroupMember))] public List overrideGroupMembers = new List(); } [SerializeField] [Tooltip("The name of the interaction group, which can be used to retrieve it from the Interaction Manager.")] private string m_GroupName; [SerializeField] [Tooltip("The XR Interaction Manager that this Interaction Group will communicate with (will find one if not set manually).")] private XRInteractionManager m_InteractionManager; private XRInteractionManager m_RegisteredInteractionManager; [SerializeField] [Tooltip("Ordered list of Interactors or Interaction Groups that are registered with the Group on Awake.")] [RequireInterface(typeof(IXRGroupMember))] private List m_StartingGroupMembers = new List(); [SerializeField] [Tooltip("Configuration for each Group Member of which other Members are able to override its interaction when they attempt to select, despite the difference in priority order.")] private List m_StartingInteractionOverridesMap = new List(); private readonly RegistrationList m_GroupMembers = new RegistrationList(); private readonly List m_TempGroupMembers = new List(); private bool m_IsProcessingGroupMembers; private readonly Dictionary> m_InteractionOverridesMap = new Dictionary>(); private readonly List m_ValidTargets = new List(); private readonly List m_DeprecatedValidTargets = new List(); private static readonly List s_InteractablesSelected = new List(); private static readonly List s_InteractablesHovered = new List(); public string groupName => m_GroupName; public XRInteractionManager interactionManager { get { return m_InteractionManager; } set { m_InteractionManager = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { RegisterWithInteractionManager(); } } } public IXRInteractionGroup containingGroup { get; private set; } public List startingGroupMembers { get { return m_StartingGroupMembers; } set { m_StartingGroupMembers = value; RemoveMissingMembersFromStartingOverridesMap(); } } public IXRInteractor activeInteractor { get; private set; } public IXRInteractor focusInteractor { get; private set; } public IXRFocusInteractable focusInteractable { get; private set; } internal bool isRegisteredWithInteractionManager => (Object)(object)m_RegisteredInteractionManager != (Object)null; internal bool hasRegisteredStartingMembers { get; private set; } public event Action registered; public event Action unregistered; [Conditional("UNITY_EDITOR")] protected virtual void Reset() { } protected virtual void Awake() { FindCreateInteractionManager(); RegisterWithInteractionManager(); if (m_GroupMembers.flushedCount > 0) { int num = 0; foreach (Object startingGroupMember in m_StartingGroupMembers) { if (startingGroupMember != (Object)null && startingGroupMember is IXRGroupMember groupMember) { MoveGroupMemberTo(groupMember, num++); } } } else { foreach (Object startingGroupMember2 in m_StartingGroupMembers) { if (startingGroupMember2 != (Object)null && startingGroupMember2 is IXRGroupMember groupMember2) { AddGroupMember(groupMember2); } } } if (string.IsNullOrWhiteSpace(m_GroupName)) { m_GroupName = ((Object)((Component)this).gameObject).name; } RemoveMissingMembersFromStartingOverridesMap(); foreach (GroupMemberAndOverridesPair item in m_StartingInteractionOverridesMap) { Object groupMember3 = item.groupMember; if (groupMember3 == (Object)null || !(groupMember3 is IXRGroupMember sourceGroupMember)) { continue; } foreach (Object overrideGroupMember2 in item.overrideGroupMembers) { if (overrideGroupMember2 != (Object)null && overrideGroupMember2 is IXRGroupMember overrideGroupMember) { AddInteractionOverrideForGroupMember(sourceGroupMember, overrideGroupMember); } } } hasRegisteredStartingMembers = true; } internal void RemoveMissingMembersFromStartingOverridesMap() { for (int num = m_StartingInteractionOverridesMap.Count - 1; num >= 0; num--) { GroupMemberAndOverridesPair groupMemberAndOverridesPair = m_StartingInteractionOverridesMap[num]; if (!m_StartingGroupMembers.Contains(groupMemberAndOverridesPair.groupMember)) { m_StartingInteractionOverridesMap.RemoveAt(num); } else { List overrideGroupMembers = groupMemberAndOverridesPair.overrideGroupMembers; for (int num2 = overrideGroupMembers.Count - 1; num2 >= 0; num2--) { if (!m_StartingGroupMembers.Contains(overrideGroupMembers[num2])) { overrideGroupMembers.RemoveAt(num2); } } } } } protected virtual void OnEnable() { FindCreateInteractionManager(); RegisterWithInteractionManager(); } protected virtual void OnDisable() { UnregisterWithInteractionManager(); } protected virtual void OnDestroy() { hasRegisteredStartingMembers = false; m_InteractionOverridesMap.Clear(); ClearGroupMembers(); } public void AddStartingInteractionOverride(Object sourceGroupMember, Object overrideGroupMember) { if (sourceGroupMember == (Object)null) { Debug.LogError((object)"sourceGroupMember cannot be null."); return; } if (overrideGroupMember == (Object)null) { Debug.LogError((object)"overrideGroupMember cannot be null."); return; } if (!m_StartingGroupMembers.Contains(sourceGroupMember)) { Debug.LogError((object)($"Cannot add starting override group member for source member {sourceGroupMember} " + $"because {sourceGroupMember} is not included in the starting group members."), (Object)(object)this); return; } if (!m_StartingGroupMembers.Contains(overrideGroupMember)) { Debug.LogError((object)($"Cannot add override group member {overrideGroupMember} for source member " + $"because {overrideGroupMember} is not included in the starting group members."), (Object)(object)this); return; } if (TryGetStartingGroupMemberAndOverridesPair(sourceGroupMember, out var groupMemberAndOverrides)) { groupMemberAndOverrides.overrideGroupMembers.Add(overrideGroupMember); return; } m_StartingInteractionOverridesMap.Add(new GroupMemberAndOverridesPair { groupMember = sourceGroupMember, overrideGroupMembers = new List { overrideGroupMember } }); } public bool RemoveStartingInteractionOverride(Object sourceGroupMember, Object overrideGroupMember) { if (sourceGroupMember == (Object)null) { Debug.LogError((object)"sourceGroupMember cannot be null."); return false; } if (TryGetStartingGroupMemberAndOverridesPair(sourceGroupMember, out var groupMemberAndOverrides)) { return groupMemberAndOverrides.overrideGroupMembers.Remove(overrideGroupMember); } return false; } private bool TryGetStartingGroupMemberAndOverridesPair(Object sourceGroupMember, out GroupMemberAndOverridesPair groupMemberAndOverrides) { if (sourceGroupMember == (Object)null) { groupMemberAndOverrides = null; return false; } foreach (GroupMemberAndOverridesPair item in m_StartingInteractionOverridesMap) { if (!(item.groupMember != sourceGroupMember)) { groupMemberAndOverrides = item; return true; } } groupMemberAndOverrides = null; return false; } void IXRInteractionGroup.OnRegistered(InteractionGroupRegisteredEventArgs args) { if ((Object)(object)args.manager != (Object)(object)m_InteractionManager) { Debug.LogWarning((object)("An Interaction Group was registered with an unexpected XRInteractionManager." + $" {this} was expecting to communicate with \"{m_InteractionManager}\" but was registered with \"{args.manager}\"."), (Object)(object)this); } m_RegisteredInteractionManager = args.manager; m_GroupMembers.Flush(); m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (m_GroupMembers.IsStillRegistered(item) && item.containingGroup == null) { RegisterAsGroupMember(item); } } m_IsProcessingGroupMembers = false; this.registered?.Invoke(args); } void IXRInteractionGroup.OnBeforeUnregistered() { m_GroupMembers.Flush(); m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (m_GroupMembers.IsStillRegistered(item)) { RegisterAsNonGroupMember(item); } } m_IsProcessingGroupMembers = false; } void IXRInteractionGroup.OnUnregistered(InteractionGroupUnregisteredEventArgs args) { if ((Object)(object)args.manager != (Object)(object)m_RegisteredInteractionManager) { Debug.LogWarning((object)("An Interaction Group was unregistered from an unexpected XRInteractionManager." + $" {this} was expecting to communicate with \"{m_RegisteredInteractionManager}\" but was unregistered from \"{args.manager}\"."), (Object)(object)this); } m_RegisteredInteractionManager = null; this.unregistered?.Invoke(args); } public void AddGroupMember(IXRGroupMember groupMember) { if (groupMember == null) { throw new ArgumentNullException("groupMember"); } if (ValidateAddGroupMember(groupMember)) { if (m_IsProcessingGroupMembers) { Debug.LogWarning((object)$"{groupMember} added while {((Object)this).name} is processing Group members. It won't be processed until the next process.", (Object)(object)this); } if (m_GroupMembers.Register(groupMember)) { RegisterAsGroupMember(groupMember); } } } public void MoveGroupMemberTo(IXRGroupMember groupMember, int newIndex) { if (groupMember == null) { throw new ArgumentNullException("groupMember"); } if (!ValidateAddGroupMember(groupMember)) { return; } if (m_IsProcessingGroupMembers) { Debug.LogError((object)$"Cannot move {groupMember} while {((Object)this).name} is processing Group members.", (Object)(object)this); return; } m_GroupMembers.Flush(); if (m_GroupMembers.MoveItemImmediately(groupMember, newIndex) && groupMember.containingGroup == null) { RegisterAsGroupMember(groupMember); } } private bool ValidateAddGroupMember(IXRGroupMember groupMember) { if (!(groupMember is IXRInteractor) && !(groupMember is IXRInteractionGroup)) { Debug.LogError((object)$"Group member {groupMember} must be either an Interactor or an Interaction Group.", (Object)(object)this); return false; } if (groupMember.containingGroup != null && groupMember.containingGroup != this) { Debug.LogError((object)$"Cannot add/move {groupMember} because it is already part of a Group. Remove the member from the Group first.", (Object)(object)this); return false; } if (groupMember is IXRInteractionGroup iXRInteractionGroup && iXRInteractionGroup.HasDependencyOnGroup(this)) { Debug.LogError((object)$"Cannot add/move {groupMember} because this would create a circular dependency of groups.", (Object)(object)this); return false; } return true; } public bool RemoveGroupMember(IXRGroupMember groupMember) { if (m_GroupMembers.Unregister(groupMember)) { if (activeInteractor != null && GroupMemberIsOrContainsInteractor(groupMember, activeInteractor)) { activeInteractor = null; } m_InteractionOverridesMap.Remove(groupMember); RegisterAsNonGroupMember(groupMember); return true; } return false; } private bool GroupMemberIsOrContainsInteractor(IXRGroupMember groupMember, IXRInteractor interactor) { if (groupMember == interactor) { return true; } if (!(groupMember is IXRInteractionGroup iXRInteractionGroup)) { return false; } iXRInteractionGroup.GetGroupMembers(m_TempGroupMembers); foreach (IXRGroupMember tempGroupMember in m_TempGroupMembers) { if (GroupMemberIsOrContainsInteractor(tempGroupMember, interactor)) { return true; } } return false; } public void ClearGroupMembers() { m_GroupMembers.Flush(); for (int num = m_GroupMembers.flushedCount - 1; num >= 0; num--) { IXRGroupMember registeredItemAt = m_GroupMembers.GetRegisteredItemAt(num); RemoveGroupMember(registeredItemAt); } } public bool ContainsGroupMember(IXRGroupMember groupMember) { return m_GroupMembers.IsRegistered(groupMember); } public void GetGroupMembers(List results) { if (results == null) { throw new ArgumentNullException("results"); } m_GroupMembers.GetRegisteredItems(results); } public bool HasDependencyOnGroup(IXRInteractionGroup group) { if (group == this) { return true; } GetGroupMembers(m_TempGroupMembers); foreach (IXRGroupMember tempGroupMember in m_TempGroupMembers) { if (tempGroupMember is IXRInteractionGroup iXRInteractionGroup && iXRInteractionGroup.HasDependencyOnGroup(group)) { return true; } } return false; } public void AddInteractionOverrideForGroupMember(IXRGroupMember sourceGroupMember, IXRGroupMember overrideGroupMember) { if (sourceGroupMember == null) { Debug.LogError((object)"sourceGroupMember cannot be null."); return; } if (overrideGroupMember == null) { Debug.LogError((object)"overrideGroupMember cannot be null."); return; } if (!(overrideGroupMember is IXRSelectInteractor) && !(overrideGroupMember is IXRInteractionOverrideGroup)) { Debug.LogError((object)($"Override group member {overrideGroupMember} must implement either " + "IXRSelectInteractor or IXRInteractionOverrideGroup."), (Object)(object)this); return; } if (!ContainsGroupMember(sourceGroupMember)) { Debug.LogError((object)($"Cannot add override group member for source member {sourceGroupMember} because {sourceGroupMember} " + "is not registered with the Group. Call AddGroupMember first."), (Object)(object)this); return; } if (!ContainsGroupMember(overrideGroupMember)) { Debug.LogError((object)($"Cannot add override group member {overrideGroupMember} for source member because {overrideGroupMember} " + "is not registered with the Group. Call AddGroupMember first."), (Object)(object)this); return; } if (GroupMemberIsPartOfOverrideChain(overrideGroupMember, sourceGroupMember)) { Debug.LogError((object)($"Cannot add {overrideGroupMember} as an override group member for {sourceGroupMember} " + "because this would create a loop of group member overrides."), (Object)(object)this); return; } if (m_InteractionOverridesMap.TryGetValue(sourceGroupMember, out var value)) { value.Add(overrideGroupMember); return; } m_InteractionOverridesMap[sourceGroupMember] = new HashSet { overrideGroupMember }; } public bool GroupMemberIsPartOfOverrideChain(IXRGroupMember sourceGroupMember, IXRGroupMember potentialOverrideGroupMember) { if (potentialOverrideGroupMember == sourceGroupMember) { return true; } if (!m_InteractionOverridesMap.TryGetValue(sourceGroupMember, out var value)) { return false; } foreach (IXRGroupMember item in value) { if (GroupMemberIsPartOfOverrideChain(item, potentialOverrideGroupMember)) { return true; } } return false; } public bool RemoveInteractionOverrideForGroupMember(IXRGroupMember sourceGroupMember, IXRGroupMember overrideGroupMember) { if (sourceGroupMember == null) { Debug.LogError((object)"sourceGroupMember cannot be null."); return false; } if (!ContainsGroupMember(sourceGroupMember)) { Debug.LogError((object)($"Cannot remove override group member for source member {sourceGroupMember} because {sourceGroupMember} " + "is not registered with the Group."), (Object)(object)this); return false; } if (m_InteractionOverridesMap.TryGetValue(sourceGroupMember, out var value)) { return value.Remove(overrideGroupMember); } return false; } public bool ClearInteractionOverridesForGroupMember(IXRGroupMember sourceGroupMember) { if (sourceGroupMember == null) { Debug.LogError((object)"sourceGroupMember cannot be null."); return false; } if (!ContainsGroupMember(sourceGroupMember)) { Debug.LogError((object)($"Cannot clear override group members for source member {sourceGroupMember} because {sourceGroupMember} " + "is not registered with the Group."), (Object)(object)this); return false; } if (!m_InteractionOverridesMap.TryGetValue(sourceGroupMember, out var value)) { return false; } value.Clear(); return true; } public void GetInteractionOverridesForGroupMember(IXRGroupMember sourceGroupMember, HashSet results) { if (sourceGroupMember == null) { Debug.LogError((object)"sourceGroupMember cannot be null."); return; } if (results == null) { Debug.LogError((object)"results cannot be null."); return; } if (!ContainsGroupMember(sourceGroupMember)) { Debug.LogError((object)($"Cannot get override group members for source member {sourceGroupMember} because {sourceGroupMember} " + "is not registered with the Group."), (Object)(object)this); return; } results.Clear(); if (m_InteractionOverridesMap.TryGetValue(sourceGroupMember, out var value)) { results.UnionWith(value); } } private void FindCreateInteractionManager() { if (!((Object)(object)m_InteractionManager != (Object)null)) { m_InteractionManager = ComponentLocatorUtility.FindOrCreateComponent(); } } private void RegisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)(object)m_InteractionManager)) { UnregisterWithInteractionManager(); if ((Object)(object)m_InteractionManager != (Object)null) { m_InteractionManager.RegisterInteractionGroup(this); } } } private void UnregisterWithInteractionManager() { if (!((Object)(object)m_RegisteredInteractionManager == (Object)null)) { m_RegisteredInteractionManager.UnregisterInteractionGroup(this); } } private void RegisterAsGroupMember(IXRGroupMember groupMember) { if (!((Object)(object)m_RegisteredInteractionManager == (Object)null)) { groupMember.OnRegisteringAsGroupMember(this); ReRegisterGroupMemberWithInteractionManager(groupMember); } } private void RegisterAsNonGroupMember(IXRGroupMember groupMember) { if (!((Object)(object)m_RegisteredInteractionManager == (Object)null)) { groupMember.OnRegisteringAsNonGroupMember(); ReRegisterGroupMemberWithInteractionManager(groupMember); } } private void ReRegisterGroupMemberWithInteractionManager(IXRGroupMember groupMember) { if ((Object)(object)m_RegisteredInteractionManager == (Object)null) { return; } if (!(groupMember is IXRInteractor interactor)) { if (groupMember is IXRInteractionGroup interactionGroup) { if (m_RegisteredInteractionManager.IsRegistered(interactionGroup)) { m_RegisteredInteractionManager.UnregisterInteractionGroup(interactionGroup); m_RegisteredInteractionManager.RegisterInteractionGroup(interactionGroup); } } else { Debug.LogError((object)$"Group member {groupMember} must be either an Interactor or an Interaction Group.", (Object)(object)this); } } else if (m_RegisteredInteractionManager.IsRegistered(interactor)) { m_RegisteredInteractionManager.UnregisterInteractor(interactor); m_RegisteredInteractionManager.RegisterInteractor(interactor); } } void IXRInteractionGroup.PreprocessGroupMembers(XRInteractionUpdateOrder.UpdatePhase updatePhase) { m_GroupMembers.Flush(); m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (!m_GroupMembers.IsStillRegistered(item)) { continue; } if (!(item is IXRInteractor iXRInteractor)) { if (item is IXRInteractionGroup iXRInteractionGroup && m_RegisteredInteractionManager.IsRegistered(iXRInteractionGroup)) { iXRInteractionGroup.PreprocessGroupMembers(updatePhase); } } else if (m_RegisteredInteractionManager.IsRegistered(iXRInteractor)) { iXRInteractor.PreprocessInteractor(updatePhase); } } m_IsProcessingGroupMembers = false; } void IXRInteractionGroup.ProcessGroupMembers(XRInteractionUpdateOrder.UpdatePhase updatePhase) { m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (!m_GroupMembers.IsStillRegistered(item)) { continue; } if (!(item is IXRInteractor iXRInteractor)) { if (item is IXRInteractionGroup iXRInteractionGroup && m_RegisteredInteractionManager.IsRegistered(iXRInteractionGroup)) { iXRInteractionGroup.ProcessGroupMembers(updatePhase); } } else if (m_RegisteredInteractionManager.IsRegistered(iXRInteractor)) { iXRInteractor.ProcessInteractor(updatePhase); } } m_IsProcessingGroupMembers = false; } void IXRInteractionGroup.UpdateGroupMemberInteractions() { IXRInteractor prePrioritizedInteractor = null; if (activeInteractor != null && m_RegisteredInteractionManager.IsRegistered(activeInteractor) && activeInteractor is IXRSelectInteractor selectInteractor && CanStartOrContinueAnySelect(selectInteractor)) { prePrioritizedInteractor = activeInteractor; } ((IXRInteractionGroup)this).UpdateGroupMemberInteractions(prePrioritizedInteractor, out IXRInteractor interactorThatPerformedInteraction); activeInteractor = interactorThatPerformedInteraction; } private bool CanStartOrContinueAnySelect(IXRSelectInteractor selectInteractor) { if (selectInteractor.keepSelectedTargetValid) { foreach (IXRSelectInteractable item in selectInteractor.interactablesSelected) { if (m_RegisteredInteractionManager.CanSelect(selectInteractor, item)) { return true; } } } m_RegisteredInteractionManager.GetValidTargets(selectInteractor, m_ValidTargets); foreach (IXRInteractable validTarget in m_ValidTargets) { if (validTarget is IXRSelectInteractable interactable && m_RegisteredInteractionManager.CanSelect(selectInteractor, interactable)) { return true; } } return false; } void IXRInteractionGroup.UpdateGroupMemberInteractions(IXRInteractor prePrioritizedInteractor, out IXRInteractor interactorThatPerformedInteraction) { if (((IXRInteractionOverrideGroup)this).ShouldOverrideActiveInteraction(out IXRSelectInteractor overridingInteractor)) { prePrioritizedInteractor = overridingInteractor; } interactorThatPerformedInteraction = null; m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (!m_GroupMembers.IsStillRegistered(item)) { continue; } if (!(item is IXRInteractor iXRInteractor)) { if (item is IXRInteractionGroup iXRInteractionGroup && m_RegisteredInteractionManager.IsRegistered(iXRInteractionGroup)) { iXRInteractionGroup.UpdateGroupMemberInteractions(prePrioritizedInteractor, out var interactorThatPerformedInteraction2); if (interactorThatPerformedInteraction2 != null) { interactorThatPerformedInteraction = interactorThatPerformedInteraction2; prePrioritizedInteractor = interactorThatPerformedInteraction2; } } } else if (m_RegisteredInteractionManager.IsRegistered(iXRInteractor)) { bool preventInteraction = prePrioritizedInteractor != null && iXRInteractor != prePrioritizedInteractor; UpdateInteractorInteractions(iXRInteractor, preventInteraction, out var performedInteraction); if (performedInteraction) { interactorThatPerformedInteraction = iXRInteractor; prePrioritizedInteractor = iXRInteractor; } } } m_IsProcessingGroupMembers = false; activeInteractor = interactorThatPerformedInteraction; } bool IXRInteractionOverrideGroup.ShouldOverrideActiveInteraction(out IXRSelectInteractor overridingInteractor) { overridingInteractor = null; if (activeInteractor == null || !TryGetOverridesForContainedInteractor(activeInteractor, out var overrideGroupMembers)) { return false; } bool result = false; m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (m_GroupMembers.IsStillRegistered(item) && overrideGroupMembers.Contains(item) && ShouldGroupMemberOverrideInteraction(activeInteractor, item, out overridingInteractor)) { result = true; break; } } m_IsProcessingGroupMembers = false; return result; } private bool TryGetOverridesForContainedInteractor(IXRInteractor interactor, out HashSet overrideGroupMembers) { overrideGroupMembers = null; if (!(interactor is IXRGroupMember { containingGroup: var iXRInteractionGroup } iXRGroupMember)) { Debug.LogError((object)string.Format("Interactor {0} must be a {1}.", interactor, "IXRGroupMember"), (Object)(object)this); return false; } IXRGroupMember key = iXRGroupMember; while (iXRInteractionGroup != null && iXRInteractionGroup != this) { if (iXRInteractionGroup is IXRGroupMember iXRGroupMember2) { iXRInteractionGroup = iXRGroupMember2.containingGroup; key = iXRGroupMember2; } else { iXRInteractionGroup = null; } } if (iXRInteractionGroup == null) { Debug.LogError((object)$"Interactor {interactor} must be contained by this group or one of its sub-groups.", (Object)(object)this); return false; } return m_InteractionOverridesMap.TryGetValue(key, out overrideGroupMembers); } bool IXRInteractionOverrideGroup.ShouldAnyMemberOverrideInteraction(IXRInteractor interactingInteractor, out IXRSelectInteractor overridingInteractor) { overridingInteractor = null; bool result = false; m_IsProcessingGroupMembers = true; foreach (IXRGroupMember item in m_GroupMembers.registeredSnapshot) { if (m_GroupMembers.IsStillRegistered(item) && ShouldGroupMemberOverrideInteraction(interactingInteractor, item, out overridingInteractor)) { result = true; break; } } m_IsProcessingGroupMembers = false; return result; } private bool ShouldGroupMemberOverrideInteraction(IXRInteractor interactingInteractor, IXRGroupMember overrideGroupMember, out IXRSelectInteractor overridingInteractor) { overridingInteractor = null; if (!(overrideGroupMember is IXRSelectInteractor iXRSelectInteractor)) { if (overrideGroupMember is IXRInteractionOverrideGroup iXRInteractionOverrideGroup) { if (!m_RegisteredInteractionManager.IsRegistered(iXRInteractionOverrideGroup)) { return false; } if (iXRInteractionOverrideGroup.ShouldAnyMemberOverrideInteraction(interactingInteractor, out overridingInteractor)) { return true; } } } else { if (!m_RegisteredInteractionManager.IsRegistered(iXRSelectInteractor)) { return false; } if (ShouldInteractorOverrideInteraction(interactingInteractor, iXRSelectInteractor)) { overridingInteractor = iXRSelectInteractor; return true; } } return false; } private bool ShouldInteractorOverrideInteraction(IXRInteractor interactingInteractor, IXRSelectInteractor overridingInteractor) { IXRSelectInteractor iXRSelectInteractor = interactingInteractor as IXRSelectInteractor; IXRHoverInteractor iXRHoverInteractor = interactingInteractor as IXRHoverInteractor; m_RegisteredInteractionManager.GetValidTargets(overridingInteractor, m_ValidTargets); foreach (IXRInteractable validTarget in m_ValidTargets) { if (validTarget is IXRSelectInteractable interactable && m_RegisteredInteractionManager.CanSelect(overridingInteractor, interactable)) { if (iXRSelectInteractor != null && iXRSelectInteractor.IsSelecting(interactable)) { return true; } if (iXRHoverInteractor != null && validTarget is IXRHoverInteractable interactable2 && iXRHoverInteractor.IsHovering(interactable2)) { return true; } } } return false; } private unsafe void UpdateInteractorInteractions(IXRInteractor interactor, bool preventInteraction, out bool performedInteraction) { //IL_0003: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e5: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013b: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0143: Unknown result type (might be due to invalid IL or missing references) performedInteraction = false; ProfilerMarker val = XRInteractionManager.s_GetValidTargetsMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { m_RegisteredInteractionManager.GetValidTargets(interactor, m_ValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } XRInteractionManager.GetOfType(m_ValidTargets, m_DeprecatedValidTargets); IXRSelectInteractor iXRSelectInteractor = interactor as IXRSelectInteractor; IXRHoverInteractor iXRHoverInteractor = interactor as IXRHoverInteractor; if (iXRSelectInteractor != null) { val = XRInteractionManager.s_EvaluateInvalidSelectionsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { if (preventInteraction) { ClearAllInteractorSelections(iXRSelectInteractor); } else { m_RegisteredInteractionManager.ClearInteractorSelectionInternal(iXRSelectInteractor, m_ValidTargets); } } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } if (iXRHoverInteractor != null) { val = XRInteractionManager.s_EvaluateInvalidHoversMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { if (preventInteraction) { ClearAllInteractorHovers(iXRHoverInteractor); } else { m_RegisteredInteractionManager.ClearInteractorHoverInternal(iXRHoverInteractor, m_ValidTargets, m_DeprecatedValidTargets); } } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } if (preventInteraction) { return; } if (iXRSelectInteractor != null) { val = XRInteractionManager.s_EvaluateValidSelectionsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { m_RegisteredInteractionManager.InteractorSelectValidTargetsInternal(iXRSelectInteractor, m_ValidTargets, m_DeprecatedValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } if (iXRSelectInteractor.hasSelection || (interactor is IUIInteractor interactor2 && TrackedDeviceGraphicRaycaster.IsPokeInteractingWithUI(interactor2))) { performedInteraction = true; } } if (iXRHoverInteractor != null) { val = XRInteractionManager.s_EvaluateValidHoversMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { m_RegisteredInteractionManager.InteractorHoverValidTargetsInternal(iXRHoverInteractor, m_ValidTargets, m_DeprecatedValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } if (iXRHoverInteractor.hasHover) { performedInteraction = true; } } } private void ClearAllInteractorSelections(IXRSelectInteractor selectInteractor) { if (selectInteractor.interactablesSelected.Count != 0) { s_InteractablesSelected.Clear(); s_InteractablesSelected.AddRange(selectInteractor.interactablesSelected); for (int num = s_InteractablesSelected.Count - 1; num >= 0; num--) { IXRSelectInteractable interactable = s_InteractablesSelected[num]; m_RegisteredInteractionManager.SelectExitInternal(selectInteractor, interactable); } } } private void ClearAllInteractorHovers(IXRHoverInteractor hoverInteractor) { if (hoverInteractor.interactablesHovered.Count != 0) { s_InteractablesHovered.Clear(); s_InteractablesHovered.AddRange(hoverInteractor.interactablesHovered); for (int num = s_InteractablesHovered.Count - 1; num >= 0; num--) { IXRHoverInteractable interactable = s_InteractablesHovered[num]; m_RegisteredInteractionManager.HoverExitInternal(hoverInteractor, interactable); } } } public void OnFocusEntering(FocusEnterEventArgs args) { focusInteractable = args.interactableObject; focusInteractor = args.interactorObject; } public void OnFocusExiting(FocusExitEventArgs args) { if (focusInteractable == args.interactableObject) { focusInteractable = null; focusInteractor = null; } } void IXRGroupMember.OnRegisteringAsGroupMember(IXRInteractionGroup group) { if (containingGroup != null) { Debug.LogError((object)(((Object)this).name + " is already part of a Group. Remove the member from the Group first."), (Object)(object)this); } else if (!group.ContainsGroupMember(this)) { Debug.LogError((object)("OnRegisteringAsGroupMember was called but the Group does not contain " + ((Object)this).name + ". Add the member to the Group rather than calling this method directly."), (Object)(object)this); } else { containingGroup = group; } } void IXRGroupMember.OnRegisteringAsNonGroupMember() { containingGroup = null; } } [AddComponentMenu("XR/XR Poke Interactor", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRPokeInteractor.html")] public class XRPokeInteractor : XRBaseInteractor, IUIHoverInteractor, IUIInteractor, IPokeStateDataProvider, IAttachPointVelocityProvider { private readonly struct PokeCollision { public readonly IXRInteractable interactable; public readonly IXRPokeFilter filter; public PokeCollision(IXRInteractable interactable, IXRPokeFilter filter) { this.interactable = interactable; this.filter = filter; } } private static readonly List s_Results = new List(); [SerializeField] [Tooltip("The depth threshold within which an interaction can begin to be evaluated as a poke.")] private float m_PokeDepth = 0.1f; [SerializeField] [Tooltip("The width threshold within which an interaction can begin to be evaluated as a poke.")] private float m_PokeWidth = 0.0075f; [SerializeField] [Tooltip("The width threshold within which an interaction can be evaluated as a poke select.")] private float m_PokeSelectWidth = 0.015f; [SerializeField] [Tooltip("The radius threshold within which an interaction can be evaluated as a poke hover.")] private float m_PokeHoverRadius = 0.015f; [SerializeField] [Tooltip("Distance along the poke interactable interaction axis that allows for a poke to be triggered sooner/with less precision.")] private float m_PokeInteractionOffset = 0.005f; [SerializeField] [Tooltip("Physics layer mask used for limiting poke sphere overlap.")] private LayerMask m_PhysicsLayerMask = LayerMask.op_Implicit(-1); [SerializeField] [Tooltip("Determines whether the poke sphere overlap will hit triggers.")] private QueryTriggerInteraction m_PhysicsTriggerInteraction = (QueryTriggerInteraction)1; [SerializeField] [Tooltip("Denotes whether or not valid targets will only include objects with a poke filter.")] private bool m_RequirePokeFilter = true; [SerializeField] [Tooltip("When enabled, this allows the poke interactor to hover and select UI elements.")] private bool m_EnableUIInteraction = true; [SerializeField] [Tooltip("Denotes whether or not debug visuals are enabled for this poke interactor.")] private bool m_DebugVisualizationsEnabled; [SerializeField] private UIHoverEnterEvent m_UIHoverEntered = new UIHoverEnterEvent(); [SerializeField] private UIHoverExitEvent m_UIHoverExited = new UIHoverExitEvent(); private BindableVariable m_PokeStateData = new BindableVariable(default(PokeStateData), true, (Func)null, false); private GameObject m_HoverDebugSphere; private MeshRenderer m_HoverDebugRenderer; private Vector3 m_LastPokeInteractionPoint; private bool m_FirstFrame = true; private IXRSelectInteractable m_CurrentPokeTarget; private IXRPokeFilter m_CurrentPokeFilter; private readonly RaycastHit[] m_SphereCastHits = (RaycastHit[])(object)new RaycastHit[25]; private readonly Collider[] m_OverlapSphereHits = (Collider[])(object)new Collider[25]; private readonly List m_PokeTargets = new List(); private readonly List m_InteractableSelectFilters = new List(); private readonly List m_ValidTargets = new List(); private static readonly Dictionary s_ValidTargetsScratchMap = new Dictionary(); private RegisteredUIInteractorCache m_RegisteredUIInteractorCache; private PhysicsScene m_LocalPhysicsScene; private Func m_PositionProvider; public float pokeDepth { get { return m_PokeDepth; } set { m_PokeDepth = value; } } public float pokeWidth { get { return m_PokeWidth; } set { m_PokeWidth = value; } } public float pokeSelectWidth { get { return m_PokeSelectWidth; } set { m_PokeSelectWidth = value; } } public float pokeHoverRadius { get { return m_PokeHoverRadius; } set { m_PokeHoverRadius = value; } } public float pokeInteractionOffset { get { return m_PokeInteractionOffset; } set { m_PokeInteractionOffset = value; } } public LayerMask physicsLayerMask { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PhysicsLayerMask; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_PhysicsLayerMask = value; } } public QueryTriggerInteraction physicsTriggerInteraction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_PhysicsTriggerInteraction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_PhysicsTriggerInteraction = value; } } public bool requirePokeFilter { get { return m_RequirePokeFilter; } set { m_RequirePokeFilter = value; } } public bool enableUIInteraction { get { return m_EnableUIInteraction; } set { if (m_EnableUIInteraction != value) { m_EnableUIInteraction = value; m_RegisteredUIInteractorCache?.RegisterOrUnregisterXRUIInputModule(m_EnableUIInteraction); } } } public bool debugVisualizationsEnabled { get { return m_DebugVisualizationsEnabled; } set { m_DebugVisualizationsEnabled = value; } } public UIHoverEnterEvent uiHoverEntered { get { return m_UIHoverEntered; } set { m_UIHoverEntered = value; } } public UIHoverExitEvent uiHoverExited { get { return m_UIHoverExited; } set { m_UIHoverExited = value; } } public IReadOnlyBindableVariable pokeStateData => (IReadOnlyBindableVariable)(object)m_PokeStateData; protected IAttachPointVelocityTracker attachPointVelocityTracker { get; set; } = new AttachPointVelocityTracker(); protected override void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) base.Awake(); m_LocalPhysicsScene = PhysicsSceneExtensions.GetPhysicsScene(((Component)this).gameObject.scene); m_RegisteredUIInteractorCache = new RegisteredUIInteractorCache(this); m_PositionProvider = GetPokePosition; } protected override void OnEnable() { base.OnEnable(); SetDebugObjectVisibility(isVisible: true); m_FirstFrame = true; if (m_EnableUIInteraction) { m_RegisteredUIInteractorCache.RegisterWithXRUIInputModule(); } } protected override void OnDisable() { base.OnDisable(); SetDebugObjectVisibility(isVisible: false); m_RegisteredUIInteractorCache?.UnregisterFromXRUIInputModule(); } protected override void OnDestroy() { base.OnDestroy(); } public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.PreprocessInteractor(updatePhase); if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { if (TryGetXROrigin(out var origin)) { attachPointVelocityTracker.UpdateAttachPointVelocityData(GetAttachTransform(null), origin); } else { attachPointVelocityTracker.UpdateAttachPointVelocityData(GetAttachTransform(null)); } RegisterValidTargets(out m_CurrentPokeTarget, out m_CurrentPokeFilter); ProcessPokeStateData(); } } public override void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.ProcessInteractor(updatePhase); if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { UpdateDebugVisuals(); } } private bool RegisterValidTargets(out IXRSelectInteractable currentTarget, out IXRPokeFilter pokeFilter) { bool flag = EvaluateSphereOverlap() > 0; m_ValidTargets.Clear(); s_ValidTargetsScratchMap.Clear(); if (flag) { int count = m_PokeTargets.Count; for (int i = 0; i < count; i++) { if (m_PokeTargets[i].interactable is IXRSelectInteractable iXRSelectInteractable && iXRSelectInteractable is IXRHoverInteractable iXRHoverInteractable && iXRHoverInteractable.IsHoverableBy(this)) { m_ValidTargets.Add(m_PokeTargets[i].interactable); s_ValidTargetsScratchMap.Add(m_PokeTargets[i].interactable, m_PokeTargets[i].filter); } } if (m_ValidTargets.Count > 1) { SortingHelpers.SortByDistanceToInteractor(this, m_ValidTargets, s_Results); m_ValidTargets.Clear(); m_ValidTargets.AddRange(s_Results); } IXRTargetFilter iXRTargetFilter = base.targetFilter; if (iXRTargetFilter != null && iXRTargetFilter.canProcess) { iXRTargetFilter.Process(this, m_ValidTargets, s_Results); m_ValidTargets.Clear(); m_ValidTargets.AddRange(s_Results); } if (m_ValidTargets.Count == 0) { flag = false; } } currentTarget = (flag ? ((IXRSelectInteractable)m_ValidTargets[0]) : null); pokeFilter = (flag ? s_ValidTargetsScratchMap[currentTarget] : null); return flag; } private void ProcessPokeStateData() { if (TrackedDeviceGraphicRaycaster.TryGetPokeStateDataForInteractor(this, out var data)) { ((BindableVariableBase)(object)m_PokeStateData).Value = data; } else if (m_CurrentPokeFilter is IPokeStateDataProvider pokeStateDataProvider) { ((BindableVariableBase)(object)m_PokeStateData).Value = pokeStateDataProvider.pokeStateData.Value; } else { ((BindableVariableBase)(object)m_PokeStateData).Value = default(PokeStateData); } } public override void GetValidTargets(List targets) { targets.Clear(); if (((Behaviour)this).isActiveAndEnabled && m_ValidTargets.Count > 0) { targets.Add(m_ValidTargets[0]); } } private int EvaluateSphereOverlap() { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00ac: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00c1: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) m_PokeTargets.Clear(); Vector3 position = GetAttachTransform(null).position; Vector3 overlapStart = m_LastPokeInteractionPoint; Vector3 overlapEnd = position; BurstPhysicsUtils.GetSphereOverlapParameters(in overlapStart, in overlapEnd, out var normalizedOverlapVector, out var overlapSqrMagnitude, out var overlapDistance); if (m_FirstFrame || overlapSqrMagnitude < 0.001f) { int num = ((PhysicsScene)(ref m_LocalPhysicsScene)).OverlapSphere(overlapEnd, m_PokeHoverRadius, m_OverlapSphereHits, LayerMask.op_Implicit(m_PhysicsLayerMask), m_PhysicsTriggerInteraction); for (int i = 0; i < num; i++) { if (FindPokeTarget(m_OverlapSphereHits[i], out var newPokeCollision)) { m_PokeTargets.Add(newPokeCollision); } } } else { int num2 = ((PhysicsScene)(ref m_LocalPhysicsScene)).SphereCast(overlapStart, m_PokeHoverRadius, normalizedOverlapVector, m_SphereCastHits, overlapDistance, LayerMask.op_Implicit(m_PhysicsLayerMask), m_PhysicsTriggerInteraction); for (int j = 0; j < num2; j++) { if (FindPokeTarget(((RaycastHit)(ref m_SphereCastHits[j])).collider, out var newPokeCollision2)) { m_PokeTargets.Add(newPokeCollision2); } } } m_LastPokeInteractionPoint = position; m_FirstFrame = false; return m_PokeTargets.Count; } private bool FindPokeTarget(Collider hitCollider, out PokeCollision newPokeCollision) { newPokeCollision = default(PokeCollision); if (base.interactionManager.TryGetInteractableForCollider(hitCollider, out var interactable)) { if (!m_RequirePokeFilter) { newPokeCollision = new PokeCollision(interactable, null); return true; } if (interactable is XRBaseInteractable xRBaseInteractable) { xRBaseInteractable.selectFilters.GetAll(m_InteractableSelectFilters); foreach (IXRSelectFilter interactableSelectFilter in m_InteractableSelectFilters) { if (interactableSelectFilter is XRPokeFilter filter && interactableSelectFilter.canProcess) { newPokeCollision = new PokeCollision(interactable, filter); return true; } } } } return false; } private void SetDebugObjectVisibility(bool isVisible) { //IL_007f: Unknown result type (might be due to invalid IL or missing references) if (m_DebugVisualizationsEnabled && (Object)(object)m_HoverDebugSphere == (Object)null) { m_HoverDebugSphere = GameObject.CreatePrimitive((PrimitiveType)0); ((Object)m_HoverDebugSphere).name = "[Debug] Poke - HoverVisual: " + (object)this; m_HoverDebugSphere.transform.SetParent(GetAttachTransform(null), false); m_HoverDebugSphere.transform.localScale = new Vector3(m_PokeHoverRadius, m_PokeHoverRadius, m_PokeHoverRadius); Collider val = default(Collider); if (m_HoverDebugSphere.TryGetComponent(ref val)) { Object.Destroy((Object)(object)val); } m_HoverDebugRenderer = GetOrAddComponent(m_HoverDebugSphere); } bool flag = m_DebugVisualizationsEnabled && isVisible; if ((Object)(object)m_HoverDebugSphere != (Object)null && m_HoverDebugSphere.activeSelf != flag) { m_HoverDebugSphere.SetActive(flag); } } private void UpdateDebugVisuals() { //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) SetDebugObjectVisibility(m_CurrentPokeTarget != null); if (m_DebugVisualizationsEnabled) { ((Renderer)m_HoverDebugRenderer).material.color = ((m_PokeTargets.Count > 0) ? new Color(0f, 0.8f, 0f, 0.1f) : new Color(0.8f, 0f, 0f, 0.1f)); } } private static T GetOrAddComponent(GameObject go) where T : Component { T result = default(T); if (!go.TryGetComponent(ref result)) { return go.AddComponent(); } return result; } public virtual void UpdateUIModel(ref TrackedDeviceModel model) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003b: Unknown result type (might be due to invalid IL or missing references) //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_00a0: Unknown result type (might be due to invalid IL or missing references) if (!((Behaviour)this).isActiveAndEnabled || this.IsBlockedByInteractionWithinGroup()) { model.Reset(resetImplementation: false); return; } Transform obj = GetAttachTransform(null); Vector3 position = obj.position; Quaternion rotation = obj.rotation; Vector3 val = position; Vector3 val2 = rotation * Vector3.forward; Vector3 item = val + val2 * m_PokeDepth; model.position = position; model.orientation = rotation; model.positionProvider = m_PositionProvider; model.raycastLayerMask = m_PhysicsLayerMask; model.pokeDepth = m_PokeDepth; model.interactionType = UIInteractionType.Poke; model.UpdatePokeSelectState(); List raycastPoints = model.raycastPoints; raycastPoints.Clear(); raycastPoints.Add(val); raycastPoints.Add(item); } private Vector3 GetPokePosition() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) return GetAttachTransform(null).position; } public bool TryGetUIModel(out TrackedDeviceModel model) { if (m_RegisteredUIInteractorCache == null) { model = TrackedDeviceModel.invalid; return false; } return m_RegisteredUIInteractorCache.TryGetUIModel(out model); } void IUIHoverInteractor.OnUIHoverEntered(UIHoverEventArgs args) { OnUIHoverEntered(args); } void IUIHoverInteractor.OnUIHoverExited(UIHoverEventArgs args) { OnUIHoverExited(args); } protected virtual void OnUIHoverEntered(UIHoverEventArgs args) { ((UnityEvent)m_UIHoverEntered)?.Invoke(args); } protected virtual void OnUIHoverExited(UIHoverEventArgs args) { ((UnityEvent)m_UIHoverExited)?.Invoke(args); } protected override void OnHoverEntering(HoverEnterEventArgs args) { base.OnHoverEntering(args); if (this.attachPointVelocityTracker is AttachPointVelocityTracker attachPointVelocityTracker) { attachPointVelocityTracker.ResetVelocityTracking(); } } public Vector3 GetAttachPointVelocity() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (TryGetXROrigin(out var origin)) { return attachPointVelocityTracker.GetAttachPointVelocity(origin); } return attachPointVelocityTracker.GetAttachPointVelocity(); } public Vector3 GetAttachPointAngularVelocity() { //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) if (TryGetXROrigin(out var origin)) { return attachPointVelocityTracker.GetAttachPointAngularVelocity(origin); } return attachPointVelocityTracker.GetAttachPointAngularVelocity(); } } [DisallowMultipleComponent] [AddComponentMenu("XR/XR Ray Interactor", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRRayInteractor.html")] public class XRRayInteractor : XRBaseControllerInteractor, IAdvancedLineRenderable, ILineRenderable, IUIHoverInteractor, IUIInteractor, IXRRayProvider, IXRScaleValueProvider { protected sealed class RaycastHitComparer : IComparer { public int Compare(RaycastHit a, RaycastHit b) { float num = (((Object)(object)((RaycastHit)(ref a)).collider != (Object)null) ? ((RaycastHit)(ref a)).distance : float.MaxValue); float value = (((Object)(object)((RaycastHit)(ref b)).collider != (Object)null) ? ((RaycastHit)(ref b)).distance : float.MaxValue); return num.CompareTo(value); } } public enum LineType { StraightLine, ProjectileCurve, BezierCurve } public enum QuerySnapVolumeInteraction { Ignore, Collide } public enum HitDetectionType { Raycast, SphereCast, ConeCast } public enum AnchorRotationMode { RotateOverTime, MatchDirection } private struct SamplePoint { public float3 position { get; set; } public float parameter { get; set; } } private const int k_MaxRaycastHits = 10; private const int k_MaxSpherecastHits = 10; private const int k_MinSampleFrequency = 2; private const int k_MaxSampleFrequency = 100; private static readonly List s_Results = new List(); private static readonly RaycastHit[] s_SpherecastScratch = (RaycastHit[])(object)new RaycastHit[10]; private static readonly HashSet s_OptimalHits = new HashSet(); private readonly List> m_ConeCastDebugInfo = new List>(); [SerializeField] private LineType m_LineType; [SerializeField] private bool m_BlendVisualLinePoints = true; [SerializeField] private float m_MaxRaycastDistance = 30f; [SerializeField] private Transform m_RayOriginTransform; [SerializeField] private Transform m_ReferenceFrame; [SerializeField] private float m_Velocity = 16f; [SerializeField] private float m_Acceleration = 9.8f; [SerializeField] private float m_AdditionalGroundHeight = 0.1f; [SerializeField] private float m_AdditionalFlightTime = 0.5f; [SerializeField] private float m_EndPointDistance = 30f; [SerializeField] private float m_EndPointHeight = -10f; [SerializeField] private float m_ControlPointDistance = 10f; [SerializeField] private float m_ControlPointHeight = 5f; [SerializeField] [Range(2f, 100f)] private int m_SampleFrequency = 20; [SerializeField] private HitDetectionType m_HitDetectionType; [SerializeField] [Range(0.01f, 0.25f)] private float m_SphereCastRadius = 0.1f; [SerializeField] [Range(0f, 180f)] private float m_ConeCastAngle = 6f; private float m_CachedConeCastAngle; private float m_CachedConeCastRadius; [SerializeField] private bool m_LiveConeCastDebugVisuals; [SerializeField] private LayerMask m_RaycastMask = LayerMask.op_Implicit(-1); [SerializeField] private QueryTriggerInteraction m_RaycastTriggerInteraction = (QueryTriggerInteraction)1; [SerializeField] private QuerySnapVolumeInteraction m_RaycastSnapVolumeInteraction = QuerySnapVolumeInteraction.Collide; [SerializeField] private bool m_HitClosestOnly; [SerializeField] private bool m_HoverToSelect; [SerializeField] private float m_HoverTimeToSelect = 0.5f; [SerializeField] private bool m_AutoDeselect; [SerializeField] private float m_TimeToAutoDeselect = 3f; [SerializeField] private bool m_EnableUIInteraction = true; [SerializeField] private bool m_BlockUIOnInteractableSelection = true; [SerializeField] private bool m_AllowAnchorControl = true; [SerializeField] private bool m_UseForceGrab = true; [SerializeField] private float m_RotateSpeed = 180f; [SerializeField] private float m_TranslateSpeed = 1f; [SerializeField] private Transform m_AnchorRotateReferenceFrame; [SerializeField] private AnchorRotationMode m_AnchorRotationMode; [SerializeField] private UIHoverEnterEvent m_UIHoverEntered = new UIHoverEnterEvent(); [SerializeField] private UIHoverExitEvent m_UIHoverExited = new UIHoverExitEvent(); [SerializeField] private bool m_EnableARRaycasting; [SerializeField] private bool m_OccludeARHitsWith3DObjects; [SerializeField] private bool m_OccludeARHitsWith2DObjects; [SerializeField] private ScaleMode m_ScaleMode; private bool m_HasRayOriginTransform; private bool m_HasReferenceFrame; private bool m_ScaleInputActive; private readonly List m_ValidTargets = new List(); private readonly Dictionary m_InteractableRaycastHits = new Dictionary(); private float m_LastTimeHoveredObjectChanged; private bool m_PassedHoverTimeToSelect; private float m_LastTimeAutoSelected; private bool m_PassedTimeToAutoDeselect; private GameObject m_LastUIObject; private float m_LastTimeHoveredUIChanged; private bool m_HoverUISelectActive; private bool m_BlockUIAutoDeselect; private readonly RaycastHit[] m_RaycastHits = (RaycastHit[])(object)new RaycastHit[10]; private int m_RaycastHitsCount; private readonly RaycastHitComparer m_RaycastHitComparer = new RaycastHitComparer(); private List m_SamplePoints; private int m_SamplePointsFrameUpdated = -1; private int m_RaycastHitEndpointIndex; private int m_UIRaycastHitEndpointIndex; private readonly float3[] m_ControlPoints = (float3[])(object)new float3[3]; private readonly float3[] m_HitChordControlPoints = (float3[])(object)new float3[3]; private static List s_ScratchSamplePoints; private static readonly float3[] s_ScratchControlPoints = (float3[])(object)new float3[3]; private PhysicsScene m_LocalPhysicsScene; private RegisteredUIInteractorCache m_RegisteredUIInteractorCache; private bool m_RaycastHitOccurred; private RaycastHit m_RaycastHit; private RaycastResult m_UIRaycastHit; private bool m_IsUIHitClosest; private IXRInteractable m_RaycastInteractable; private ActionBasedController m_ActionBasedController; private XRController m_DeviceBasedController; private XRScreenSpaceController m_ScreenSpaceController; private bool m_IsActionBasedController; private bool m_IsDeviceBasedController; private bool m_IsScreenSpaceController; public LineType lineType { get { return m_LineType; } set { m_LineType = value; } } public bool blendVisualLinePoints { get { return m_BlendVisualLinePoints; } set { m_BlendVisualLinePoints = value; } } public float maxRaycastDistance { get { return m_MaxRaycastDistance; } set { m_MaxRaycastDistance = value; } } public Transform rayOriginTransform { get { return m_RayOriginTransform; } set { m_RayOriginTransform = value; m_HasRayOriginTransform = (Object)(object)m_RayOriginTransform != (Object)null; } } public Transform referenceFrame { get { return m_ReferenceFrame; } set { m_ReferenceFrame = value; m_HasReferenceFrame = (Object)(object)m_ReferenceFrame != (Object)null; } } public float velocity { get { return m_Velocity; } set { m_Velocity = value; } } public float acceleration { get { return m_Acceleration; } set { m_Acceleration = value; } } public float additionalGroundHeight { get { return m_AdditionalGroundHeight; } set { m_AdditionalGroundHeight = value; } } public float additionalFlightTime { get { return m_AdditionalFlightTime; } set { m_AdditionalFlightTime = value; } } public float endPointDistance { get { return m_EndPointDistance; } set { m_EndPointDistance = value; } } public float endPointHeight { get { return m_EndPointHeight; } set { m_EndPointHeight = value; } } public float controlPointDistance { get { return m_ControlPointDistance; } set { m_ControlPointDistance = value; } } public float controlPointHeight { get { return m_ControlPointHeight; } set { m_ControlPointHeight = value; } } public int sampleFrequency { get { return m_SampleFrequency; } set { m_SampleFrequency = SanitizeSampleFrequency(value); } } public HitDetectionType hitDetectionType { get { return m_HitDetectionType; } set { m_HitDetectionType = value; } } public float sphereCastRadius { get { return m_SphereCastRadius; } set { m_SphereCastRadius = value; } } public float coneCastAngle { get { return m_ConeCastAngle; } set { m_ConeCastAngle = value; } } private float coneCastAngleRadius { get { if (!Mathf.Approximately(m_CachedConeCastAngle, m_ConeCastAngle)) { m_CachedConeCastAngle = m_ConeCastAngle; m_CachedConeCastRadius = math.tan(math.radians(m_CachedConeCastAngle) * 0.5f); } return m_CachedConeCastRadius; } } internal bool liveConeCastDebugVisuals { get { return m_LiveConeCastDebugVisuals; } set { m_LiveConeCastDebugVisuals = value; } } public LayerMask raycastMask { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RaycastMask; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_RaycastMask = value; } } public QueryTriggerInteraction raycastTriggerInteraction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RaycastTriggerInteraction; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_RaycastTriggerInteraction = value; } } public QuerySnapVolumeInteraction raycastSnapVolumeInteraction { get { return m_RaycastSnapVolumeInteraction; } set { m_RaycastSnapVolumeInteraction = value; } } public bool hitClosestOnly { get { return m_HitClosestOnly; } set { m_HitClosestOnly = value; } } public bool hoverToSelect { get { return m_HoverToSelect; } set { m_HoverToSelect = value; } } public float hoverTimeToSelect { get { return m_HoverTimeToSelect; } set { m_HoverTimeToSelect = value; } } public bool autoDeselect { get { return m_AutoDeselect; } set { m_AutoDeselect = value; } } public float timeToAutoDeselect { get { return m_TimeToAutoDeselect; } set { m_TimeToAutoDeselect = value; } } public bool enableUIInteraction { get { return m_EnableUIInteraction; } set { if (m_EnableUIInteraction != value) { m_EnableUIInteraction = value; m_RegisteredUIInteractorCache?.RegisterOrUnregisterXRUIInputModule(m_EnableUIInteraction); } } } public bool blockUIOnInteractableSelection { get { return m_BlockUIOnInteractableSelection; } set { m_BlockUIOnInteractableSelection = value; } } public bool allowAnchorControl { get { return m_AllowAnchorControl; } set { m_AllowAnchorControl = value; } } public bool useForceGrab { get { return m_UseForceGrab; } set { m_UseForceGrab = value; } } public float rotateSpeed { get { return m_RotateSpeed; } set { m_RotateSpeed = value; } } public float translateSpeed { get { return m_TranslateSpeed; } set { m_TranslateSpeed = value; } } public Transform anchorRotateReferenceFrame { get { return m_AnchorRotateReferenceFrame; } set { m_AnchorRotateReferenceFrame = value; } } public AnchorRotationMode anchorRotationMode { get { return m_AnchorRotationMode; } set { m_AnchorRotationMode = value; } } public UIHoverEnterEvent uiHoverEntered { get { return m_UIHoverEntered; } set { m_UIHoverEntered = value; } } public UIHoverExitEvent uiHoverExited { get { return m_UIHoverExited; } set { m_UIHoverExited = value; } } public bool enableARRaycasting { get { return m_EnableARRaycasting; } set { m_EnableARRaycasting = value; } } public bool occludeARHitsWith3DObjects { get { return m_OccludeARHitsWith3DObjects; } set { m_OccludeARHitsWith3DObjects = value; } } public bool occludeARHitsWith2DObjects { get { return m_OccludeARHitsWith2DObjects; } set { m_OccludeARHitsWith2DObjects = value; } } public float angle { get { //IL_000b: Unknown result type (might be due to invalid IL or missing references) GetLineOriginAndDirection(out var _, out var direction); return GetProjectileAngle(direction); } } protected IXRInteractable currentNearestValidTarget { get; private set; } public Vector3 rayEndPoint { get; private set; } public Transform rayEndTransform { get; private set; } public ScaleMode scaleMode { get { return m_ScaleMode; } set { m_ScaleMode = value; } } public float scaleValue { get; protected set; } private Transform effectiveRayOrigin { get { if (!m_HasRayOriginTransform) { return ((Component)this).transform; } return m_RayOriginTransform; } } private Vector3 referenceUp { get { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (!m_HasReferenceFrame) { return Vector3.up; } return m_ReferenceFrame.up; } } private Vector3 referencePosition { get { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) if (!m_HasReferenceFrame) { return Vector3.zero; } return m_ReferenceFrame.position; } } private int closestAnyHitIndex { get { if (m_RaycastHitEndpointIndex <= 0 || m_UIRaycastHitEndpointIndex <= 0) { if (m_RaycastHitEndpointIndex <= 0) { return m_UIRaycastHitEndpointIndex; } return m_RaycastHitEndpointIndex; } return Mathf.Min(m_RaycastHitEndpointIndex, m_UIRaycastHitEndpointIndex); } } public override bool isSelectActive { get { if (m_HoverToSelect && m_PassedHoverTimeToSelect) { return base.allowSelect; } return base.isSelectActive; } } protected override bool isUISelectActive { get { if (m_HoverToSelect && m_HoverUISelectActive) { return base.allowSelect; } return base.isUISelectActive; } } [Obsolete("Velocity has been deprecated. Use velocity instead. (UnityUpgradable) -> velocity")] public float Velocity { get { return velocity; } set { velocity = value; } } [Obsolete("Acceleration has been deprecated. Use acceleration instead. (UnityUpgradable) -> acceleration")] public float Acceleration { get { return acceleration; } set { acceleration = value; } } [Obsolete("AdditionalFlightTime has been deprecated. Use additionalFlightTime instead. (UnityUpgradable) -> additionalFlightTime")] public float AdditionalFlightTime { get { return additionalFlightTime; } set { additionalFlightTime = value; } } [Obsolete("Angle has been deprecated. Use angle instead. (UnityUpgradable) -> angle")] public float Angle => angle; [Obsolete("originalAttachTransform has been deprecated. Use rayOriginTransform instead. (UnityUpgradable) -> rayOriginTransform")] protected Transform originalAttachTransform { get { return rayOriginTransform; } set { rayOriginTransform = value; } } protected void OnValidate() { m_HasRayOriginTransform = (Object)(object)m_RayOriginTransform != (Object)null; m_HasReferenceFrame = (Object)(object)m_ReferenceFrame != (Object)null; m_SampleFrequency = SanitizeSampleFrequency(m_SampleFrequency); m_RegisteredUIInteractorCache?.RegisterOrUnregisterXRUIInputModule(m_EnableUIInteraction); } private protected override void OnXRControllerChanged() { base.OnXRControllerChanged(); m_ActionBasedController = base.xrController as ActionBasedController; m_IsActionBasedController = (Object)(object)m_ActionBasedController != (Object)null; m_DeviceBasedController = base.xrController as XRController; m_IsDeviceBasedController = (Object)(object)m_DeviceBasedController != (Object)null; m_ScreenSpaceController = base.xrController as XRScreenSpaceController; m_IsScreenSpaceController = (Object)(object)m_ScreenSpaceController != (Object)null; if (m_IsScreenSpaceController && m_AllowAnchorControl && m_AnchorRotationMode == AnchorRotationMode.RotateOverTime) { Debug.LogWarning((object)"Rotate Over Time is not a valid value for Rotation Mode when using XR Screen Space Controller. This XR Ray Interactor will not be able to rotate the anchor using screen touches.", (Object)(object)this); } } protected override void Awake() { //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) base.Awake(); m_LocalPhysicsScene = PhysicsSceneExtensions.GetPhysicsScene(((Component)this).gameObject.scene); m_RegisteredUIInteractorCache = new RegisteredUIInteractorCache(this); CreateSamplePointsListsIfNecessary(); FindReferenceFrame(); CreateRayOrigin(); if (!Application.isEditor) { m_LiveConeCastDebugVisuals = false; } } protected override void OnEnable() { base.OnEnable(); if (m_EnableUIInteraction) { m_RegisteredUIInteractorCache?.RegisterWithXRUIInputModule(); } } protected override void OnDisable() { base.OnDisable(); m_SamplePoints?.Clear(); m_RegisteredUIInteractorCache?.UnregisterFromXRUIInputModule(); } protected virtual void OnDrawGizmosSelected() { //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_008a: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00cb: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d4: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00e2: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_0100: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0158: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0184: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0190: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b4: Unknown result type (might be due to invalid IL or missing references) //IL_01be: Unknown result type (might be due to invalid IL or missing references) //IL_0203: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0216: Unknown result type (might be due to invalid IL or missing references) //IL_021d: Unknown result type (might be due to invalid IL or missing references) //IL_0222: Unknown result type (might be due to invalid IL or missing references) //IL_0226: Unknown result type (might be due to invalid IL or missing references) //IL_0230: Unknown result type (might be due to invalid IL or missing references) //IL_0235: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_0268: Unknown result type (might be due to invalid IL or missing references) //IL_026d: Unknown result type (might be due to invalid IL or missing references) //IL_026e: Unknown result type (might be due to invalid IL or missing references) //IL_027a: Unknown result type (might be due to invalid IL or missing references) //IL_0284: Unknown result type (might be due to invalid IL or missing references) //IL_0289: Unknown result type (might be due to invalid IL or missing references) //IL_038f: Unknown result type (might be due to invalid IL or missing references) //IL_0394: Unknown result type (might be due to invalid IL or missing references) //IL_03a0: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03b1: Unknown result type (might be due to invalid IL or missing references) //IL_03b6: Unknown result type (might be due to invalid IL or missing references) //IL_03c9: Unknown result type (might be due to invalid IL or missing references) //IL_03ce: Unknown result type (might be due to invalid IL or missing references) //IL_03da: Unknown result type (might be due to invalid IL or missing references) //IL_03df: Unknown result type (might be due to invalid IL or missing references) //IL_03eb: Unknown result type (might be due to invalid IL or missing references) //IL_03f0: Unknown result type (might be due to invalid IL or missing references) //IL_0300: Unknown result type (might be due to invalid IL or missing references) //IL_030c: Unknown result type (might be due to invalid IL or missing references) //IL_0311: Unknown result type (might be due to invalid IL or missing references) //IL_02e5: Unknown result type (might be due to invalid IL or missing references) //IL_0341: Unknown result type (might be due to invalid IL or missing references) //IL_0346: Unknown result type (might be due to invalid IL or missing references) //IL_034d: Unknown result type (might be due to invalid IL or missing references) //IL_0352: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0437: Unknown result type (might be due to invalid IL or missing references) //IL_044d: Unknown result type (might be due to invalid IL or missing references) //IL_045f: Unknown result type (might be due to invalid IL or missing references) //IL_0464: Unknown result type (might be due to invalid IL or missing references) //IL_0469: Unknown result type (might be due to invalid IL or missing references) //IL_046e: Unknown result type (might be due to invalid IL or missing references) if (m_LineType == LineType.StraightLine) { Transform val = (((Object)(object)m_RayOriginTransform != (Object)null) ? m_RayOriginTransform : ((Component)this).transform); Vector3 position = val.position; Vector3 val2 = position + val.forward * m_MaxRaycastDistance; Gizmos.color = new Color(0.22745098f, 0.47843137f, 0.972549f, 79f / 85f); switch (m_HitDetectionType) { case HitDetectionType.Raycast: Gizmos.DrawLine(position, val2); break; case HitDetectionType.SphereCast: { Vector3 val5 = val.up * m_SphereCastRadius; Vector3 val6 = val.right * m_SphereCastRadius; Gizmos.DrawWireSphere(position, m_SphereCastRadius); Gizmos.DrawLine(position + val6, val2 + val6); Gizmos.DrawLine(position - val6, val2 - val6); Gizmos.DrawLine(position + val5, val2 + val5); Gizmos.DrawLine(position - val5, val2 - val5); Gizmos.DrawWireSphere(val2, m_SphereCastRadius); break; } case HitDetectionType.ConeCast: { float num = Mathf.Tan(m_ConeCastAngle * (MathF.PI / 180f) * 0.5f) * m_MaxRaycastDistance; Vector3 val3 = val.up * num; Vector3 val4 = val.right * num; Gizmos.DrawLine(position, val2); Gizmos.DrawLine(position, val2 + val4); Gizmos.DrawLine(position, val2 - val4); Gizmos.DrawLine(position, val2 + val3); Gizmos.DrawLine(position, val2 - val3); Gizmos.DrawWireSphere(val2, num); break; } } } if (!Application.isPlaying || m_SamplePoints == null || m_SamplePoints.Count < 2) { return; } if (TryGetCurrent3DRaycastHit(out var raycastHit)) { Gizmos.color = new Color(0.22745098f, 0.47843137f, 0.972549f, 79f / 85f); Vector3 point = ((RaycastHit)(ref raycastHit)).point; Vector3 point2 = ((RaycastHit)(ref raycastHit)).point; Vector3 normal = ((RaycastHit)(ref raycastHit)).normal; Gizmos.DrawLine(point, point2 + ((Vector3)(ref normal)).normalized * 0.075f); } if (TryGetCurrentUIRaycastResult(out var raycastResult)) { Gizmos.color = new Color(0.22745098f, 0.47843137f, 0.972549f, 79f / 85f); Gizmos.DrawLine(raycastResult.worldPosition, raycastResult.worldPosition + ((Vector3)(ref raycastResult.worldNormal)).normalized * 0.075f); } int num2 = closestAnyHitIndex; for (int i = 0; i < m_SamplePoints.Count; i++) { SamplePoint samplePoint = m_SamplePoints[i]; float num3 = ((m_HitDetectionType == HitDetectionType.SphereCast) ? m_SphereCastRadius : 0.025f); Gizmos.color = ((num2 == 0 || i < num2) ? new Color(0.6392157f, 0.28627452f, 0.6431373f, 0.75f) : new Color(41f / 51f, 0.56078434f, 41f / 51f, 0.5f)); Gizmos.DrawSphere(float3.op_Implicit(samplePoint.position), num3); if (i < m_SamplePoints.Count - 1) { SamplePoint samplePoint2 = m_SamplePoints[i + 1]; Gizmos.DrawLine(float3.op_Implicit(samplePoint.position), float3.op_Implicit(samplePoint2.position)); } } switch (m_LineType) { case LineType.ProjectileCurve: DrawQuadraticBezierGizmo(float3.op_Implicit(m_HitChordControlPoints[0]), float3.op_Implicit(m_HitChordControlPoints[1]), float3.op_Implicit(m_HitChordControlPoints[2])); break; case LineType.BezierCurve: DrawQuadraticBezierGizmo(float3.op_Implicit(m_ControlPoints[0]), float3.op_Implicit(m_ControlPoints[1]), float3.op_Implicit(m_ControlPoints[2])); break; } if (!m_LiveConeCastDebugVisuals) { return; } for (int j = 0; j < m_ConeCastDebugInfo.Count; j += 2) { Gizmos.color = Color.yellow; for (float num4 = 0f; num4 <= 4f; num4 += 1f) { float num5 = num4 / 4f; Gizmos.DrawWireSphere(m_ConeCastDebugInfo[j].Item1 + num5 * (m_ConeCastDebugInfo[j + 1].Item1 - m_ConeCastDebugInfo[j].Item1), m_ConeCastDebugInfo[j].Item2); } } } private static void DrawQuadraticBezierGizmo(Vector3 p0, Vector3 p1, Vector3 p2) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) Gizmos.color = new Color(1f, 0f, 0f, 0.75f); Gizmos.DrawSphere(p0, 0.025f); Gizmos.DrawSphere(p1, 0.025f); Gizmos.DrawSphere(p2, 0.025f); Gizmos.color = new Color(0.5f, 0.5f, 0.5f, 0.75f); Gizmos.DrawLine(p0, p1); Gizmos.DrawLine(p1, p2); Gizmos.color = new Color(0f, 0f, 8.2f, 0.75f); for (float num = 0.1f; num <= 0.9f; num += 0.1f) { Vector3 val = Vector3.Lerp(p0, p1, num); Vector3 val2 = Vector3.Lerp(p1, p2, num); Gizmos.DrawLine(val, val2); } } private void FindReferenceFrame() { m_HasReferenceFrame = (Object)(object)m_ReferenceFrame != (Object)null; if (m_HasReferenceFrame) { return; } if (ComponentLocatorUtility.TryFindComponent(out var component)) { GameObject origin = component.Origin; if ((Object)(object)origin != (Object)null) { m_ReferenceFrame = origin.transform; m_HasReferenceFrame = true; } else { Debug.Log((object)"Reference frame of the curve not set and XROrigin.Origin is not set, using global up as default.", (Object)(object)this); } } else { Debug.Log((object)"Reference frame of the curve not set and XROrigin is not found, using global up as default.", (Object)(object)this); } } private void CreateRayOrigin() { //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00db: Unknown result type (might be due to invalid IL or missing references) m_HasRayOriginTransform = (Object)(object)m_RayOriginTransform != (Object)null; if (!m_HasRayOriginTransform) { m_RayOriginTransform = new GameObject("[" + ((Object)((Component)this).gameObject).name + "] Ray Origin").transform; m_HasRayOriginTransform = true; m_RayOriginTransform.SetParent(((Component)this).transform, false); if ((Object)(object)base.attachTransform == (Object)null) { CreateAttachTransform(); } if ((Object)(object)base.attachTransform == (Object)null) { m_RayOriginTransform.localPosition = Vector3.zero; m_RayOriginTransform.localRotation = Quaternion.identity; } else if ((Object)(object)base.attachTransform.parent == (Object)(object)((Component)this).transform) { m_RayOriginTransform.localPosition = base.attachTransform.localPosition; m_RayOriginTransform.localRotation = base.attachTransform.localRotation; } else { m_RayOriginTransform.SetPositionAndRotation(base.attachTransform.position, base.attachTransform.rotation); } } } Transform IXRRayProvider.GetOrCreateRayOrigin() { CreateRayOrigin(); return m_RayOriginTransform; } Transform IXRRayProvider.GetOrCreateAttachTransform() { CreateAttachTransform(); return base.attachTransform; } void IXRRayProvider.SetRayOrigin(Transform newOrigin) { rayOriginTransform = newOrigin; } void IXRRayProvider.SetAttachTransform(Transform newAttach) { base.attachTransform = newAttach; } public bool IsOverUIGameObject() { if (m_EnableUIInteraction && m_RegisteredUIInteractorCache != null) { return m_RegisteredUIInteractorCache.IsOverUIGameObject(); } return false; } public bool GetLinePoints(ref NativeArray linePoints, out int numPoints, Ray? rayOriginOverride = null) { //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_023e: Unknown result type (might be due to invalid IL or missing references) //IL_0243: Unknown result type (might be due to invalid IL or missing references) //IL_0247: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0280: Unknown result type (might be due to invalid IL or missing references) //IL_01a3: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01ac: Unknown result type (might be due to invalid IL or missing references) //IL_01de: Unknown result type (might be due to invalid IL or missing references) //IL_020c: Unknown result type (might be due to invalid IL or missing references) if (m_SamplePoints == null || m_SamplePoints.Count < 2) { numPoints = 0; return false; } if (!m_BlendVisualLinePoints) { numPoints = m_SamplePoints.Count; EnsureCapacity(ref linePoints, numPoints); NativeArray val = linePoints.Reinterpret(); for (int i = 0; i < numPoints; i++) { val[i] = m_SamplePoints[i].position; } return true; } CreateSamplePointsListsIfNecessary(); UpdateSamplePoints(m_SamplePoints.Count, s_ScratchSamplePoints, rayOriginOverride); if (m_LineType == LineType.StraightLine) { numPoints = 2; EnsureCapacity(ref linePoints, numPoints); NativeArray val = linePoints.Reinterpret(); val[0] = s_ScratchSamplePoints[0].position; val[1] = m_SamplePoints[m_SamplePoints.Count - 1].position; return true; } int num = closestAnyHitIndex; CreateBezierCurve(s_ScratchSamplePoints, num, s_ScratchControlPoints, rayOriginOverride); CurveUtility.ElevateQuadraticToCubicBezier(in s_ScratchControlPoints[0], in s_ScratchControlPoints[1], in s_ScratchControlPoints[2], out var c, out var c2, out var c3, out var c4); CurveUtility.ElevateQuadraticToCubicBezier(in m_HitChordControlPoints[0], in m_HitChordControlPoints[1], in m_HitChordControlPoints[2], out c4, out c3, out var c5, out var c6); if (num > 0 && num != m_SamplePoints.Count - 1 && m_LineType == LineType.ProjectileCurve) { numPoints = m_SamplePoints.Count; EnsureCapacity(ref linePoints, numPoints); NativeArray val = linePoints.Reinterpret(); val[0] = c; float num2 = 1f / (float)num; for (int j = 1; j <= num; j++) { float t = (float)j * num2; CurveUtility.SampleCubicBezierPoint(in c, in c2, in c5, in c6, t, out var point); val[j] = point; } for (int k = num + 1; k < m_SamplePoints.Count; k++) { val[k] = m_SamplePoints[k].position; } } else { numPoints = m_SampleFrequency; EnsureCapacity(ref linePoints, numPoints); NativeArray val = linePoints.Reinterpret(); val[0] = c; float num3 = 1f / (float)(m_SampleFrequency - 1); for (int l = 1; l < m_SampleFrequency; l++) { float t2 = (float)l * num3; CurveUtility.SampleCubicBezierPoint(in c, in c2, in c5, in c6, t2, out var point2); val[l] = point2; } } return true; } public bool GetLinePoints(ref Vector3[] linePoints, out int numPoints) { if (linePoints == null) { linePoints = Array.Empty(); } NativeArray linePoints2 = default(NativeArray); linePoints2..ctor(linePoints, (Allocator)2); bool linePoints3 = GetLinePoints(ref linePoints2, out numPoints); int length = linePoints2.Length; if (linePoints.Length != length) { linePoints = (Vector3[])(object)new Vector3[length]; } linePoints2.CopyTo(linePoints); linePoints2.Dispose(); return linePoints3; } public void GetLineOriginAndDirection(out Vector3 origin, out Vector3 direction) { GetLineOriginAndDirection(effectiveRayOrigin, out origin, out direction); } private void GetLineOriginAndDirection(Ray? rayOriginOverride, out Vector3 origin, out Vector3 direction) { //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0021: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) if (rayOriginOverride.HasValue) { Ray value = rayOriginOverride.Value; origin = ((Ray)(ref value)).origin; direction = ((Ray)(ref value)).direction; } else { GetLineOriginAndDirection(out origin, out direction); } } private static void GetLineOriginAndDirection(Transform rayOrigin, out Vector3 origin, out Vector3 direction) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) origin = rayOrigin.position; direction = rayOrigin.forward; } private static void EnsureCapacity(ref NativeArray linePoints, int numPoints) { //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) if (linePoints.IsCreated && linePoints.Length < numPoints) { linePoints.Dispose(); linePoints = new NativeArray(numPoints, (Allocator)4, (NativeArrayOptions)1); } else if (!linePoints.IsCreated) { linePoints = new NativeArray(numPoints, (Allocator)4, (NativeArrayOptions)1); } } public bool TryGetHitInfo(out Vector3 position, out Vector3 normal, out int positionInLine, out bool isValidTarget) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e8: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) position = default(Vector3); normal = default(Vector3); positionInLine = 0; isValidTarget = false; if (!TryGetCurrentRaycast(out var raycastHit, out var raycastHitIndex, out var uiRaycastHit, out var uiRaycastHitIndex, out var isUIHitClosest)) { return false; } RaycastHit value2; if (base.hasSelection && m_InteractableRaycastHits.TryGetValue(base.interactablesSelected[0], out var value)) { raycastHit = value; } else if (m_ValidTargets.Count > 0 && m_InteractableRaycastHits.TryGetValue(m_ValidTargets[0], out value2)) { raycastHit = value2; } if (uiRaycastHit.HasValue && isUIHitClosest) { position = uiRaycastHit.Value.worldPosition; normal = uiRaycastHit.Value.worldNormal; positionInLine = uiRaycastHitIndex; RaycastResult value3 = uiRaycastHit.Value; isValidTarget = (Object)(object)((RaycastResult)(ref value3)).gameObject != (Object)null; } else if (raycastHit.HasValue) { RaycastHit value4 = raycastHit.Value; position = ((RaycastHit)(ref value4)).point; value4 = raycastHit.Value; normal = ((RaycastHit)(ref value4)).normal; positionInLine = raycastHitIndex; XRInteractionManager xRInteractionManager = base.interactionManager; value4 = raycastHit.Value; isValidTarget = xRInteractionManager.TryGetInteractableForCollider(((RaycastHit)(ref value4)).collider, out var interactable) && IsHovering(interactable); } return true; } public virtual void UpdateUIModel(ref TrackedDeviceModel model) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) if (!((Behaviour)this).isActiveAndEnabled || m_SamplePoints == null || (m_EnableUIInteraction && m_BlockUIOnInteractableSelection && base.hasSelection) || this.IsBlockedByInteractionWithinGroup()) { model.Reset(resetImplementation: false); return; } Transform val = effectiveRayOrigin; model.position = val.position; model.orientation = val.rotation; model.select = isUISelectActive; model.scrollDelta = base.uiScrollValue; model.raycastLayerMask = m_RaycastMask; model.interactionType = UIInteractionType.Ray; List raycastPoints = model.raycastPoints; raycastPoints.Clear(); UpdateSamplePointsIfNecessary(); int count = m_SamplePoints.Count; if (count > 0) { if (raycastPoints.Capacity < count) { raycastPoints.Capacity = count; } for (int i = 0; i < count; i++) { raycastPoints.Add(float3.op_Implicit(m_SamplePoints[i].position)); } } } public bool TryGetUIModel(out TrackedDeviceModel model) { if (m_RegisteredUIInteractorCache == null) { model = TrackedDeviceModel.invalid; return false; } return m_RegisteredUIInteractorCache.TryGetUIModel(out model); } public bool TryGetCurrent3DRaycastHit(out RaycastHit raycastHit) { int raycastEndpointIndex; return TryGetCurrent3DRaycastHit(out raycastHit, out raycastEndpointIndex); } public bool TryGetCurrent3DRaycastHit(out RaycastHit raycastHit, out int raycastEndpointIndex) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) if (m_RaycastHitsCount > 0) { raycastHit = m_RaycastHits[0]; raycastEndpointIndex = m_RaycastHitEndpointIndex; return true; } raycastHit = default(RaycastHit); raycastEndpointIndex = 0; return false; } public bool TryGetCurrentUIRaycastResult(out RaycastResult raycastResult) { int raycastEndpointIndex; return TryGetCurrentUIRaycastResult(out raycastResult, out raycastEndpointIndex); } public bool TryGetCurrentUIRaycastResult(out RaycastResult raycastResult, out int raycastEndpointIndex) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) if (TryGetUIModel(out var model)) { RaycastResult currentRaycast = model.currentRaycast; if (((RaycastResult)(ref currentRaycast)).isValid) { raycastResult = model.currentRaycast; raycastEndpointIndex = model.currentRaycastEndpointIndex; return true; } } raycastResult = default(RaycastResult); raycastEndpointIndex = 0; return false; } public bool TryGetCurrentRaycast(out RaycastHit? raycastHit, out int raycastHitIndex, out RaycastResult? uiRaycastHit, out int uiRaycastHitIndex, out bool isUIHitClosest) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) raycastHit = m_RaycastHit; raycastHitIndex = m_RaycastHitEndpointIndex; uiRaycastHit = m_UIRaycastHit; uiRaycastHitIndex = m_UIRaycastHitEndpointIndex; isUIHitClosest = m_IsUIHitClosest; return m_RaycastHitOccurred; } private void CacheRaycastHit() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_00f9: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) m_RaycastHit = default(RaycastHit); m_UIRaycastHit = default(RaycastResult); m_IsUIHitClosest = false; m_RaycastHitOccurred = false; rayEndTransform = null; m_RaycastInteractable = null; int num = int.MaxValue; float num2 = float.MaxValue; if (TryGetCurrent3DRaycastHit(out var raycastHit, out var raycastEndpointIndex)) { m_RaycastHit = raycastHit; num = raycastEndpointIndex; num2 = ((RaycastHit)(ref raycastHit)).distance; m_RaycastHitOccurred = true; } if (TryGetCurrentUIRaycastResult(out var raycastResult, out m_UIRaycastHitEndpointIndex)) { m_UIRaycastHit = raycastResult; m_IsUIHitClosest = m_UIRaycastHitEndpointIndex > 0 && (m_UIRaycastHitEndpointIndex < num || (m_UIRaycastHitEndpointIndex == num && raycastResult.distance <= num2)); m_RaycastHitOccurred = true; } if (m_RaycastHitOccurred) { if (m_IsUIHitClosest) { rayEndPoint = m_UIRaycastHit.worldPosition; rayEndTransform = ((RaycastResult)(ref m_UIRaycastHit)).gameObject.transform; } else { rayEndPoint = ((RaycastHit)(ref m_RaycastHit)).point; rayEndTransform = (base.interactionManager.TryGetInteractableForCollider(((RaycastHit)(ref m_RaycastHit)).collider, out m_RaycastInteractable) ? m_RaycastInteractable.GetAttachTransform(this) : ((RaycastHit)(ref m_RaycastHit)).transform); } } else { UpdateSamplePointsIfNecessary(); rayEndPoint = float3.op_Implicit(m_SamplePoints[m_SamplePoints.Count - 1].position); } } private void UpdateUIHover() { float num = Time.time - m_LastTimeHoveredUIChanged; if (m_IsUIHitClosest && num > m_HoverTimeToSelect && (num < m_HoverTimeToSelect + m_TimeToAutoDeselect || m_BlockUIAutoDeselect)) { m_HoverUISelectActive = true; } else { m_HoverUISelectActive = false; } } private void UpdateBezierControlPoints(in float3 lineOrigin, in float3 lineDirection, in float3 curveReferenceUp) { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_003c: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_007a: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) m_ControlPoints[0] = lineOrigin; m_ControlPoints[1] = m_ControlPoints[0] + lineDirection * m_ControlPointDistance + curveReferenceUp * m_ControlPointHeight; m_ControlPoints[2] = m_ControlPoints[0] + lineDirection * m_EndPointDistance + curveReferenceUp * m_EndPointHeight; } private float GetProjectileAngle(Vector3 lineDirection) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0023: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) Vector3 val = referenceUp; Vector3 val2 = Vector3.ProjectOnPlane(lineDirection, val); if (!Mathf.Approximately(Vector3.Angle(lineDirection, val2), 0f)) { return Vector3.SignedAngle(lineDirection, val2, Vector3.Cross(val, lineDirection)); } return 0f; } private void CalculateProjectileParameters(in float3 lineOrigin, in float3 lineDirection, out float3 initialVelocity, out float3 constantAcceleration, out float flightTime) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) initialVelocity = lineDirection * m_Velocity; float3 val = float3.op_Implicit(referenceUp); float3 val2 = float3.op_Implicit(referencePosition); constantAcceleration = val * (0f - m_Acceleration); float angleRad = math.sin(GetProjectileAngle(float3.op_Implicit(lineDirection)) * (MathF.PI / 180f)); float height = math.length(math.project(val2 - lineOrigin, val)) + m_AdditionalGroundHeight; CurveUtility.CalculateProjectileFlightTime(m_Velocity, m_Acceleration, angleRad, height, m_AdditionalFlightTime, out flightTime); } private static bool TryRead2DAxis(InputAction action, out Vector2 output) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0005: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) if (action != null) { output = action.ReadValue(); return true; } output = default(Vector2); return false; } private static bool TryReadButton(InputAction action) { if (action != null) { return action.WasPerformedThisFrame(); } return false; } protected virtual void RotateAnchor(Transform anchor, float directionAmount) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (!Mathf.Approximately(directionAmount, 0f)) { float num = directionAmount * (m_RotateSpeed * Time.deltaTime); if ((Object)(object)m_AnchorRotateReferenceFrame != (Object)null) { anchor.Rotate(m_AnchorRotateReferenceFrame.up, num, (Space)0); } else { anchor.Rotate(Vector3.up, num); } } } protected virtual void RotateAnchor(Transform anchor, Vector2 direction, Quaternion referenceRotation) { //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_001a: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) if (!Mathf.Approximately(((Vector2)(ref direction)).sqrMagnitude, 0f)) { Quaternion val = Quaternion.AngleAxis(Mathf.Atan2(direction.x, direction.y) * 57.29578f, Vector3.up); anchor.rotation = referenceRotation * val; } } protected virtual void TranslateAnchor(Transform rayOrigin, Transform anchor, float directionAmount) { //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) if (!Mathf.Approximately(directionAmount, 0f)) { GetLineOriginAndDirection(rayOrigin, out var origin, out var direction); Vector3 val = anchor.position + direction * (directionAmount * m_TranslateSpeed * Time.deltaTime); float num = Vector3.Dot(val - origin, direction); anchor.position = ((num > 0f) ? val : origin); } } public override void PreprocessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.PreprocessInteractor(updatePhase); if (updatePhase == XRInteractionUpdateOrder.UpdatePhase.Dynamic) { UpdateSamplePointsIfNecessary(); if (m_SamplePoints != null && m_SamplePoints.Count >= 2) { UpdateRaycastHits(); CacheRaycastHit(); UpdateUIHover(); CreateBezierCurve(m_SamplePoints, closestAnyHitIndex, m_HitChordControlPoints); } GetValidTargets(m_ValidTargets); IXRInteractable iXRInteractable = ((m_ValidTargets.Count > 0) ? m_ValidTargets[0] : null); if (iXRInteractable != currentNearestValidTarget && !base.hasSelection) { currentNearestValidTarget = iXRInteractable; m_LastTimeHoveredObjectChanged = Time.time; m_PassedHoverTimeToSelect = false; } else if (!m_PassedHoverTimeToSelect && iXRInteractable != null && Mathf.Clamp01((Time.time - m_LastTimeHoveredObjectChanged) / GetHoverTimeToSelect(currentNearestValidTarget)) >= 1f && !base.hasSelection) { m_PassedHoverTimeToSelect = true; } if (m_AutoDeselect && base.hasSelection && !m_PassedTimeToAutoDeselect && Mathf.Clamp01((Time.time - m_LastTimeAutoSelected) / GetTimeToAutoDeselect(currentNearestValidTarget)) >= 1f) { m_PassedTimeToAutoDeselect = true; } } } public override void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01cd: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0327: Unknown result type (might be due to invalid IL or missing references) //IL_032c: Unknown result type (might be due to invalid IL or missing references) //IL_02db: Unknown result type (might be due to invalid IL or missing references) //IL_02e0: Unknown result type (might be due to invalid IL or missing references) //IL_0213: Unknown result type (might be due to invalid IL or missing references) //IL_0218: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_038c: Unknown result type (might be due to invalid IL or missing references) //IL_0391: Unknown result type (might be due to invalid IL or missing references) //IL_033d: Unknown result type (might be due to invalid IL or missing references) //IL_0342: Unknown result type (might be due to invalid IL or missing references) //IL_034b: Unknown result type (might be due to invalid IL or missing references) //IL_02f3: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029f: Unknown result type (might be due to invalid IL or missing references) //IL_0231: Unknown result type (might be due to invalid IL or missing references) //IL_0245: Unknown result type (might be due to invalid IL or missing references) //IL_024a: Unknown result type (might be due to invalid IL or missing references) //IL_03a5: Unknown result type (might be due to invalid IL or missing references) //IL_03aa: Unknown result type (might be due to invalid IL or missing references) //IL_03b3: Unknown result type (might be due to invalid IL or missing references) //IL_035d: Unknown result type (might be due to invalid IL or missing references) //IL_0362: Unknown result type (might be due to invalid IL or missing references) //IL_02be: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_03c8: Unknown result type (might be due to invalid IL or missing references) //IL_03cd: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_01a5: Unknown result type (might be due to invalid IL or missing references) //IL_01ae: Unknown result type (might be due to invalid IL or missing references) //IL_01b0: Unknown result type (might be due to invalid IL or missing references) //IL_0282: Unknown result type (might be due to invalid IL or missing references) //IL_028b: Unknown result type (might be due to invalid IL or missing references) //IL_028d: Unknown result type (might be due to invalid IL or missing references) //IL_03ed: Unknown result type (might be due to invalid IL or missing references) //IL_03f2: Unknown result type (might be due to invalid IL or missing references) //IL_03fb: Unknown result type (might be due to invalid IL or missing references) //IL_0400: Unknown result type (might be due to invalid IL or missing references) //IL_0408: Unknown result type (might be due to invalid IL or missing references) //IL_040d: Unknown result type (might be due to invalid IL or missing references) //IL_0412: Unknown result type (might be due to invalid IL or missing references) //IL_0417: Unknown result type (might be due to invalid IL or missing references) //IL_0422: Unknown result type (might be due to invalid IL or missing references) //IL_0427: Unknown result type (might be due to invalid IL or missing references) //IL_042c: Unknown result type (might be due to invalid IL or missing references) //IL_042e: Unknown result type (might be due to invalid IL or missing references) //IL_0433: Unknown result type (might be due to invalid IL or missing references) //IL_0438: Unknown result type (might be due to invalid IL or missing references) //IL_043f: Unknown result type (might be due to invalid IL or missing references) base.ProcessInteractor(updatePhase); if (updatePhase != XRInteractionUpdateOrder.UpdatePhase.Dynamic) { return; } scaleValue = 0f; if (!m_AllowAnchorControl || !base.hasSelection) { return; } if (m_IsDeviceBasedController) { InputDevice inputDevice = m_DeviceBasedController.inputDevice; if (((InputDevice)(ref inputDevice)).isValid) { m_DeviceBasedController.inputDevice.IsPressed(m_DeviceBasedController.moveObjectIn, out var isPressed, m_DeviceBasedController.axisToPressThreshold); m_DeviceBasedController.inputDevice.IsPressed(m_DeviceBasedController.moveObjectOut, out var isPressed2, m_DeviceBasedController.axisToPressThreshold); if (isPressed || isPressed2) { float directionAmount = (isPressed ? 1f : (-1f)); TranslateAnchor(effectiveRayOrigin, base.attachTransform, directionAmount); } switch (m_AnchorRotationMode) { case AnchorRotationMode.RotateOverTime: { m_DeviceBasedController.inputDevice.IsPressed(m_DeviceBasedController.rotateObjectLeft, out var isPressed3, m_DeviceBasedController.axisToPressThreshold); m_DeviceBasedController.inputDevice.IsPressed(m_DeviceBasedController.rotateObjectRight, out var isPressed4, m_DeviceBasedController.axisToPressThreshold); if (isPressed3 || isPressed4) { float directionAmount2 = (isPressed3 ? (-1f) : 1f); RotateAnchor(base.attachTransform, directionAmount2); } break; } case AnchorRotationMode.MatchDirection: { if (m_DeviceBasedController.inputDevice.TryReadAxis2DValue(m_DeviceBasedController.directionalAnchorRotation, out var value)) { Quaternion referenceRotation = (((Object)(object)m_AnchorRotateReferenceFrame != (Object)null) ? m_AnchorRotateReferenceFrame.rotation : effectiveRayOrigin.rotation); RotateAnchor(base.attachTransform, value, referenceRotation); } break; } } } } InputActionProperty val; if (m_IsActionBasedController) { val = m_ActionBasedController.scaleToggleAction; if (TryReadButton(((InputActionProperty)(ref val)).action)) { m_ScaleInputActive = !m_ScaleInputActive; } if (!m_ScaleInputActive) { switch (m_AnchorRotationMode) { case AnchorRotationMode.RotateOverTime: { val = m_ActionBasedController.rotateAnchorAction; if (TryRead2DAxis(((InputActionProperty)(ref val)).action, out var output2)) { RotateAnchor(base.attachTransform, output2.x); } break; } case AnchorRotationMode.MatchDirection: { val = m_ActionBasedController.directionalAnchorRotationAction; if (TryRead2DAxis(((InputActionProperty)(ref val)).action, out var output)) { Quaternion referenceRotation2 = (((Object)(object)m_AnchorRotateReferenceFrame != (Object)null) ? m_AnchorRotateReferenceFrame.rotation : effectiveRayOrigin.rotation); RotateAnchor(base.attachTransform, output, referenceRotation2); } break; } } val = m_ActionBasedController.translateAnchorAction; if (TryRead2DAxis(((InputActionProperty)(ref val)).action, out var output3)) { TranslateAnchor(effectiveRayOrigin, base.attachTransform, output3.y); } } else if (scaleMode == ScaleMode.Input) { val = m_ActionBasedController.scaleDeltaAction; if (TryRead2DAxis(((InputActionProperty)(ref val)).action, out var output4)) { scaleValue = output4.y; } } } if (!m_IsScreenSpaceController) { return; } AnchorRotationMode anchorRotationMode = m_AnchorRotationMode; if (anchorRotationMode != AnchorRotationMode.RotateOverTime && anchorRotationMode == AnchorRotationMode.MatchDirection) { val = m_ScreenSpaceController.twistDeltaRotationAction; if (((InputActionProperty)(ref val)).action != null) { val = m_ScreenSpaceController.twistDeltaRotationAction; if (InputExtensions.IsInProgress(((InputActionProperty)(ref val)).action.phase)) { val = m_ScreenSpaceController.twistDeltaRotationAction; float directionAmount3 = 0f - ((InputActionProperty)(ref val)).action.ReadValue(); RotateAnchor(base.attachTransform, directionAmount3); goto IL_0463; } } val = m_ScreenSpaceController.dragDeltaAction; if (((InputActionProperty)(ref val)).action != null) { val = m_ScreenSpaceController.dragDeltaAction; if (InputExtensions.IsInProgress(((InputActionProperty)(ref val)).action.phase)) { val = m_ScreenSpaceController.screenTouchCountAction; InputAction action = ((InputActionProperty)(ref val)).action; if (action != null && action.ReadValue() > 1) { val = m_ScreenSpaceController.dragDeltaAction; Vector2 val2 = ((InputActionProperty)(ref val)).action.ReadValue(); Vector3 val3 = Quaternion.Inverse(Quaternion.LookRotation(base.attachTransform.forward, Vector3.up)) * base.attachTransform.rotation * Vector2.op_Implicit(val2); float directionAmount4 = -1f * (val3.x / Screen.dpi) * 50f; RotateAnchor(base.attachTransform, directionAmount4); } } } } goto IL_0463; IL_0463: if (scaleMode == ScaleMode.Distance) { scaleValue = m_ScreenSpaceController.scaleDelta; } } public override void GetValidTargets(List targets) { //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) targets.Clear(); m_InteractableRaycastHits.Clear(); if (!((Behaviour)this).isActiveAndEnabled) { return; } if (m_RaycastHitsCount > 0) { RaycastResult raycastResult; int raycastEndpointIndex; bool flag = TryGetCurrentUIRaycastResult(out raycastResult, out raycastEndpointIndex); for (int i = 0; i < m_RaycastHitsCount; i++) { RaycastHit value = m_RaycastHits[i]; bool flag2 = (Object)(object)((RaycastResult)(ref raycastResult)).gameObject != (Object)(object)((Component)((RaycastHit)(ref value)).collider).gameObject; if ((flag && flag2 && raycastEndpointIndex > 0 && (raycastEndpointIndex < m_RaycastHitEndpointIndex || (raycastEndpointIndex == m_RaycastHitEndpointIndex && raycastResult.distance <= ((RaycastHit)(ref value)).distance))) || !base.interactionManager.TryGetInteractableForCollider(((RaycastHit)(ref value)).collider, out var interactable)) { break; } if (!targets.Contains(interactable)) { targets.Add(interactable); m_InteractableRaycastHits.Add(interactable, value); if (m_HitClosestOnly) { break; } } } } IXRTargetFilter iXRTargetFilter = base.targetFilter; if (iXRTargetFilter != null && iXRTargetFilter.canProcess) { iXRTargetFilter.Process(this, targets, s_Results); targets.Clear(); targets.AddRange(s_Results); } } private void CreateSamplePointsListsIfNecessary() { if (m_SamplePoints == null || s_ScratchSamplePoints == null) { int capacity = ((m_LineType == LineType.StraightLine) ? 2 : m_SampleFrequency); if (m_SamplePoints == null) { m_SamplePoints = new List(capacity); } if (s_ScratchSamplePoints == null) { s_ScratchSamplePoints = new List(capacity); } } } private void UpdateSamplePointsIfNecessary() { CreateSamplePointsListsIfNecessary(); if (m_SamplePointsFrameUpdated != Time.frameCount) { UpdateSamplePoints(m_SampleFrequency, m_SamplePoints); m_SamplePointsFrameUpdated = Time.frameCount; } } private void UpdateSamplePoints(int count, List samplePoints, Ray? rayOriginOverride = null) { //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_0102: Unknown result type (might be due to invalid IL or missing references) //IL_0103: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010c: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0136: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) GetLineOriginAndDirection(rayOriginOverride, out var origin, out var direction); samplePoints.Clear(); SamplePoint item = new SamplePoint { position = float3.op_Implicit(origin), parameter = 0f }; samplePoints.Add(item); switch (m_LineType) { case LineType.StraightLine: item.position = samplePoints[0].position + float3.op_Implicit(direction) * m_MaxRaycastDistance; item.parameter = 1f; samplePoints.Add(item); break; case LineType.ProjectileCurve: { float3 lineOrigin = float3.op_Implicit(origin); CalculateProjectileParameters(in lineOrigin, float3.op_Implicit(direction), out var initialVelocity, out var constantAcceleration, out var flightTime); float num3 = flightTime / (float)(count - 1); for (int j = 1; j < count; j++) { float num4 = (float)j * num3; CurveUtility.SampleProjectilePoint(in lineOrigin, in initialVelocity, in constantAcceleration, num4, out var point2); item.position = point2; item.parameter = num4; samplePoints.Add(item); } break; } case LineType.BezierCurve: { UpdateBezierControlPoints(float3.op_Implicit(origin), float3.op_Implicit(direction), float3.op_Implicit(referenceUp)); float3 p = m_ControlPoints[0]; float3 p2 = m_ControlPoints[1]; float3 p3 = m_ControlPoints[2]; float num = 1f / (float)(count - 1); for (int i = 1; i < count; i++) { float num2 = (float)i * num; CurveUtility.SampleQuadraticBezierPoint(in p, in p2, in p3, num2, out var point); item.position = point; item.parameter = num2; samplePoints.Add(item); } break; } } } private void UpdateRaycastHits() { //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) m_RaycastHitsCount = 0; m_RaycastHitEndpointIndex = 0; m_ConeCastDebugInfo.Clear(); float num = 0f; bool flag = false; for (int i = 1; i < m_SamplePoints.Count; i++) { float3 position = m_SamplePoints[0].position; float3 position2 = m_SamplePoints[i - 1].position; float3 position3 = m_SamplePoints[i].position; CheckCollidersBetweenPoints(float3.op_Implicit(position2), float3.op_Implicit(position3), float3.op_Implicit(position)); if (m_RaycastHitsCount > 0 && !flag) { for (int j = 0; j < m_RaycastHitsCount; j++) { ref RaycastHit reference = ref m_RaycastHits[j]; ((RaycastHit)(ref reference)).distance = ((RaycastHit)(ref reference)).distance + num; } m_RaycastHitEndpointIndex = i; flag = true; } if (!flag) { float num2 = math.length(position3 - position2); num += num2; continue; } break; } } private void CheckCollidersBetweenPoints(Vector3 from, Vector3 to, Vector3 origin) { //IL_0015: Unknown result type (might be due to invalid IL or missing references) //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) Array.Clear(m_RaycastHits, 0, 10); m_RaycastHitsCount = 0; Vector3 val = to - from; Vector3 direction = ((Vector3)(ref val)).normalized; float num = Vector3.Distance(to, from); QueryTriggerInteraction val2 = (QueryTriggerInteraction)((m_RaycastSnapVolumeInteraction == QuerySnapVolumeInteraction.Collide) ? 2 : ((int)m_RaycastTriggerInteraction)); switch (m_HitDetectionType) { case HitDetectionType.Raycast: m_RaycastHitsCount = ((PhysicsScene)(ref m_LocalPhysicsScene)).Raycast(from, direction, m_RaycastHits, num, LayerMask.op_Implicit(m_RaycastMask), val2); break; case HitDetectionType.SphereCast: m_RaycastHitsCount = ((PhysicsScene)(ref m_LocalPhysicsScene)).SphereCast(from, m_SphereCastRadius, direction, m_RaycastHits, num, LayerMask.op_Implicit(m_RaycastMask), val2); break; case HitDetectionType.ConeCast: m_RaycastHitsCount = FilteredConecast(in from, in direction, in origin, m_RaycastHits, num, LayerMask.op_Implicit(m_RaycastMask), val2); break; } if (m_RaycastHitsCount > 0) { if (m_HitDetectionType != HitDetectionType.ConeCast) { m_RaycastHitsCount = FilterOutTriggerColliders(base.interactionManager, m_RaycastHits, m_RaycastHitsCount); } SortingHelpers.Sort((IList)m_RaycastHits, (IComparer)m_RaycastHitComparer, m_RaycastHitsCount); } } private int FilteredConecast(in Vector3 from, in Vector3 direction, in Vector3 origin, RaycastHit[] results, float maxDistance = float.PositiveInfinity, int layerMask = -5, QueryTriggerInteraction queryTriggerInteraction = (QueryTriggerInteraction)0) { //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e1: Unknown result type (might be due to invalid IL or missing references) //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_0062: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0183: Unknown result type (might be due to invalid IL or missing references) //IL_018b: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_01ce: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_0248: Unknown result type (might be due to invalid IL or missing references) //IL_024d: Unknown result type (might be due to invalid IL or missing references) //IL_0252: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_025d: Unknown result type (might be due to invalid IL or missing references) //IL_0262: Unknown result type (might be due to invalid IL or missing references) //IL_0267: Unknown result type (might be due to invalid IL or missing references) //IL_026c: Unknown result type (might be due to invalid IL or missing references) //IL_0271: Unknown result type (might be due to invalid IL or missing references) //IL_0298: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_0229: Unknown result type (might be due to invalid IL or missing references) //IL_022e: Unknown result type (might be due to invalid IL or missing references) //IL_0232: Unknown result type (might be due to invalid IL or missing references) //IL_0237: Unknown result type (might be due to invalid IL or missing references) s_OptimalHits.Clear(); float num = math.min(maxDistance, 1000f); int num2 = 0; int num3 = ((PhysicsScene)(ref m_LocalPhysicsScene)).Raycast(from, direction, s_SpherecastScratch, maxDistance, layerMask, queryTriggerInteraction); IXRInteractable interactable; if (num3 > 0) { num3 = FilterOutTriggerColliders(base.interactionManager, s_SpherecastScratch, num3); for (int i = 0; i < num3; i++) { RaycastHit val = s_SpherecastScratch[i]; if (!(((RaycastHit)(ref val)).distance > num)) { if (!base.interactionManager.TryGetInteractableForCollider(((RaycastHit)(ref val)).collider, out interactable)) { num = math.min(((RaycastHit)(ref val)).distance, num); ((RaycastHit)(ref val)).distance = ((RaycastHit)(ref val)).distance + 1.5f; } results[num2] = val; s_OptimalHits.Add(((RaycastHit)(ref val)).collider); num2++; } } } Vector3 a = origin - from; float magnitude = ((Vector3)(ref a)).magnitude; float maxOffset = num; float castMax; for (float num4 = 0f; num4 < num && !Mathf.Approximately(num4, num); num4 += castMax) { float offsetFromOrigin = magnitude + num4; BurstPhysicsUtils.GetMultiSegmentConecastParameters(coneCastAngleRadius, num4, offsetFromOrigin, maxOffset, in direction, out var originOffset, out var radius, out castMax); if (m_LiveConeCastDebugVisuals) { m_ConeCastDebugInfo.Add(new Tuple(from + originOffset, radius)); m_ConeCastDebugInfo.Add(new Tuple(from + originOffset + castMax * direction, radius)); } int num5 = ((PhysicsScene)(ref m_LocalPhysicsScene)).SphereCast(from + originOffset, radius, direction, s_SpherecastScratch, castMax, layerMask, queryTriggerInteraction); if (num5 <= 0) { continue; } num5 = FilterOutTriggerColliders(base.interactionManager, s_SpherecastScratch, num5); for (int j = 0; j < num5 && num2 < results.Length; j++) { RaycastHit val2 = s_SpherecastScratch[j]; if (num4 + ((RaycastHit)(ref val2)).distance > num || s_OptimalHits.Contains(((RaycastHit)(ref val2)).collider) || !base.interactionManager.TryGetInteractableForCollider(((RaycastHit)(ref val2)).collider, out interactable)) { continue; } if (Mathf.Approximately(((RaycastHit)(ref val2)).distance, 0f)) { a = ((RaycastHit)(ref val2)).point; if (BurstMathUtility.FastVectorEquals(in a, Vector3.zero)) { continue; } } BurstPhysicsUtils.GetConecastOffset(float3.op_Implicit(from), float3.op_Implicit(((RaycastHit)(ref val2)).point), float3.op_Implicit(direction), out var coneOffset); ((RaycastHit)(ref val2)).distance = ((RaycastHit)(ref val2)).distance + (num4 + 1f + coneOffset); results[num2] = val2; num2++; } } s_OptimalHits.Clear(); Array.Clear(s_SpherecastScratch, 0, 10); return num2; } private int FilterOutTriggerColliders(XRInteractionManager manager, RaycastHit[] raycastHits, int raycastHitCount) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Invalid comparison between Unknown and I4 //IL_000a: Unknown result type (might be due to invalid IL or missing references) bool flag = (int)m_RaycastTriggerInteraction == 2 || ((int)m_RaycastTriggerInteraction == 0 && Physics.queriesHitTriggers); if (m_RaycastSnapVolumeInteraction == QuerySnapVolumeInteraction.Ignore && flag) { raycastHitCount = FilterTriggerColliders(manager, raycastHits, raycastHitCount, (XRInteractableSnapVolume snapVolume) => (Object)(object)snapVolume != (Object)null); } else if (m_RaycastSnapVolumeInteraction == QuerySnapVolumeInteraction.Collide && !flag) { raycastHitCount = FilterTriggerColliders(manager, raycastHits, raycastHitCount, (XRInteractableSnapVolume snapVolume) => (Object)(object)snapVolume == (Object)null); } return raycastHitCount; } private static int FilterTriggerColliders(XRInteractionManager interactionManager, RaycastHit[] raycastHits, int count, Func removeRule) { for (int i = 0; i < count; i++) { Collider collider = ((RaycastHit)(ref raycastHits[i])).collider; if (collider.isTrigger) { interactionManager.TryGetInteractableForCollider(collider, out var _, out var snapVolume); if (removeRule(snapVolume)) { RemoveAt(raycastHits, i, count); count--; i--; } } } return count; } private static void RemoveAt(T[] array, int index, int count) where T : struct { Array.Copy(array, index + 1, array, index, count - index - 1); Array.Clear(array, count - 1, 1); } private void CreateBezierCurve(List samplePoints, int endSamplePointIndex, float3[] quadraticControlPoints, Ray? rayOriginOverride = null) { //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_006f: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00d9: Unknown result type (might be due to invalid IL or missing references) //IL_00da: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00e9: Unknown result type (might be due to invalid IL or missing references) //IL_00ed: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fe: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0121: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0134: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) SamplePoint samplePoint = ((endSamplePointIndex > 0 && endSamplePointIndex < samplePoints.Count) ? samplePoints[endSamplePointIndex] : samplePoints[samplePoints.Count - 1]); float3 position = samplePoint.position; float3 initialPosition = samplePoints[0].position; float3 val = 0.5f * (initialPosition + position); switch (m_LineType) { case LineType.StraightLine: quadraticControlPoints[0] = initialPosition; quadraticControlPoints[1] = val; quadraticControlPoints[2] = position; break; case LineType.ProjectileCurve: { GetLineOriginAndDirection(rayOriginOverride, out var origin, out var direction); CalculateProjectileParameters(float3.op_Implicit(origin), float3.op_Implicit(direction), out var initialVelocity, out var constantAcceleration, out var _); float time = 0.5f * samplePoint.parameter; CurveUtility.SampleProjectilePoint(in initialPosition, in initialVelocity, in constantAcceleration, time, out var point); float3 val2 = val + 2f * (point - val); quadraticControlPoints[0] = initialPosition; quadraticControlPoints[1] = val2; quadraticControlPoints[2] = position; break; } case LineType.BezierCurve: quadraticControlPoints[0] = m_ControlPoints[0]; quadraticControlPoints[1] = m_ControlPoints[1]; quadraticControlPoints[2] = m_ControlPoints[2]; break; } } public override bool CanHover(IXRHoverInteractable interactable) { if (base.CanHover(interactable) && (!base.hasSelection || IsSelecting(interactable))) { if (m_IsScreenSpaceController) { return m_ScreenSpaceController.currentControllerState.isTracked; } return true; } return false; } public override bool CanSelect(IXRSelectInteractable interactable) { if (currentNearestValidTarget == interactable && m_AutoDeselect && base.hasSelection && m_PassedHoverTimeToSelect && m_PassedTimeToAutoDeselect) { return false; } if (m_HoverToSelect && m_PassedHoverTimeToSelect && currentNearestValidTarget != interactable) { return false; } if (base.CanSelect(interactable)) { if (base.hasSelection) { return IsSelecting(interactable); } return true; } return false; } protected virtual float GetHoverTimeToSelect(IXRInteractable interactable) { return m_HoverTimeToSelect; } protected virtual float GetTimeToAutoDeselect(IXRInteractable interactable) { return m_TimeToAutoDeselect; } protected override void OnSelectEntering(SelectEnterEventArgs args) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) base.OnSelectEntering(args); if (m_AutoDeselect && m_PassedHoverTimeToSelect) { m_LastTimeAutoSelected = Time.time; m_PassedTimeToAutoDeselect = false; } if (!m_UseForceGrab && base.interactablesSelected.Count == 1 && TryGetCurrent3DRaycastHit(out var raycastHit)) { base.attachTransform.position = ((RaycastHit)(ref raycastHit)).point; } } protected override void OnSelectExiting(SelectExitEventArgs args) { base.OnSelectExiting(args); m_PassedHoverTimeToSelect = false; m_LastTimeHoveredObjectChanged = Time.time; m_PassedTimeToAutoDeselect = false; if (!base.hasSelection) { RestoreAttachTransform(); } } void IUIHoverInteractor.OnUIHoverEntered(UIHoverEventArgs args) { OnUIHoverEntered(args); } void IUIHoverInteractor.OnUIHoverExited(UIHoverEventArgs args) { OnUIHoverExited(args); } protected virtual void OnUIHoverEntered(UIHoverEventArgs args) { GameObject selectableObject = args.deviceModel.selectableObject; if ((Object)(object)m_LastUIObject != (Object)(object)selectableObject) { m_LastUIObject = selectableObject; if ((Object)(object)selectableObject != (Object)null) { m_LastTimeHoveredUIChanged = Time.time; m_BlockUIAutoDeselect = (Object)(object)m_LastUIObject.GetComponent() != (Object)null; } else { m_BlockUIAutoDeselect = false; } m_HoverUISelectActive = false; } ((UnityEvent)m_UIHoverEntered)?.Invoke(args); } protected virtual void OnUIHoverExited(UIHoverEventArgs args) { GameObject selectableObject = args.deviceModel.selectableObject; if ((Object)(object)m_LastUIObject != (Object)(object)selectableObject) { m_LastUIObject = null; m_LastTimeHoveredUIChanged = Time.time; m_BlockUIAutoDeselect = false; m_HoverUISelectActive = false; } ((UnityEvent)m_UIHoverExited)?.Invoke(args); } private void RestoreAttachTransform() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Pose localAttachPoseOnSelect = GetLocalAttachPoseOnSelect(base.firstInteractableSelected); base.attachTransform.localPosition = localAttachPoseOnSelect.position; base.attachTransform.localRotation = localAttachPoseOnSelect.rotation; } private static int SanitizeSampleFrequency(int value) { return Mathf.Max(value, 2); } [Obsolete("GetLinePoints with ref int parameter has been deprecated. Use signature with out int parameter instead.", true)] public bool GetLinePoints(ref Vector3[] linePoints, ref int numPoints, int _ = 0) { return GetLinePoints(ref linePoints, out numPoints); } [Obsolete("TryGetHitInfo with ref parameters has been deprecated. Use signature with out parameters instead.", true)] public bool TryGetHitInfo(ref Vector3 position, ref Vector3 normal, ref int positionInLine, ref bool isValidTarget, int _ = 0) { return TryGetHitInfo(out position, out normal, out positionInLine, out isValidTarget); } [Obsolete("GetCurrentRaycastHit has been deprecated. Use TryGetCurrent3DRaycastHit instead. (UnityUpgradable) -> TryGetCurrent3DRaycastHit(*)")] public bool GetCurrentRaycastHit(out RaycastHit raycastHit) { return TryGetCurrent3DRaycastHit(out raycastHit); } [Obsolete("CanHover(XRBaseInteractable) has been deprecated. Use CanHover(IXRHoverInteractable) instead.")] public override bool CanHover(XRBaseInteractable interactable) { return CanHover((IXRHoverInteractable)interactable); } [Obsolete("CanSelect(XRBaseInteractable) has been deprecated. Use CanSelect(IXRSelectInteractable) instead.")] public override bool CanSelect(XRBaseInteractable interactable) { return CanSelect((IXRSelectInteractable)interactable); } } public enum SocketScaleMode { None, Fixed, StretchedToFitSize } [DisallowMultipleComponent] [AddComponentMenu("XR/XR Socket Interactor", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRSocketInteractor.html")] public class XRSocketInteractor : XRBaseInteractor { [StructLayout(LayoutKind.Sequential, Size = 1)] private struct ShaderPropertyLookup { public static readonly int surface = Shader.PropertyToID("_Surface"); public static readonly int mode = Shader.PropertyToID("_Mode"); public static readonly int srcBlend = Shader.PropertyToID("_SrcBlend"); public static readonly int dstBlend = Shader.PropertyToID("_DstBlend"); public static readonly int zWrite = Shader.PropertyToID("_ZWrite"); public static readonly int baseColor = Shader.PropertyToID("_BaseColor"); public static readonly int color = Shader.PropertyToID("_Color"); } [SerializeField] private bool m_ShowInteractableHoverMeshes = true; [SerializeField] private Material m_InteractableHoverMeshMaterial; [SerializeField] private Material m_InteractableCantHoverMeshMaterial; [SerializeField] private bool m_SocketActive = true; [SerializeField] private float m_InteractableHoverScale = 1f; [SerializeField] private float m_RecycleDelayTime = 1f; private float m_LastRemoveTime = -1f; [SerializeField] private bool m_HoverSocketSnapping; [SerializeField] private float m_SocketSnappingRadius = 0.1f; [SerializeField] private SocketScaleMode m_SocketScaleMode; [SerializeField] private Vector3 m_FixedScale = Vector3.one; [SerializeField] private Vector3 m_TargetBoundsSize = Vector3.one; private readonly HashSet m_StayedColliders = new HashSet(); private readonly TriggerContactMonitor m_TriggerContactMonitor = new TriggerContactMonitor(); private readonly Dictionary m_MeshFilterCache = new Dictionary(); private static readonly List s_MeshFilters = new List(); private static readonly WaitForFixedUpdate s_WaitForFixedUpdate = new WaitForFixedUpdate(); private IEnumerator m_UpdateCollidersAfterTriggerStay; private readonly XRSocketGrabTransformer m_SocketGrabTransformer = new XRSocketGrabTransformer(); private readonly HashSetList m_InteractablesWithSocketTransformer = new HashSetList(0); public bool showInteractableHoverMeshes { get { return m_ShowInteractableHoverMeshes; } set { m_ShowInteractableHoverMeshes = value; } } public Material interactableHoverMeshMaterial { get { return m_InteractableHoverMeshMaterial; } set { m_InteractableHoverMeshMaterial = value; } } public Material interactableCantHoverMeshMaterial { get { return m_InteractableCantHoverMeshMaterial; } set { m_InteractableCantHoverMeshMaterial = value; } } public bool socketActive { get { return m_SocketActive; } set { m_SocketActive = value; m_SocketGrabTransformer.canProcess = value && ((Behaviour)this).isActiveAndEnabled; } } public float interactableHoverScale { get { return m_InteractableHoverScale; } set { m_InteractableHoverScale = value; } } public float recycleDelayTime { get { return m_RecycleDelayTime; } set { m_RecycleDelayTime = value; } } public bool hoverSocketSnapping { get { return m_HoverSocketSnapping; } set { m_HoverSocketSnapping = value; } } public float socketSnappingRadius { get { return m_SocketSnappingRadius; } set { m_SocketSnappingRadius = value; m_SocketGrabTransformer.socketSnappingRadius = value; } } public SocketScaleMode socketScaleMode { get { return m_SocketScaleMode; } set { m_SocketScaleMode = value; m_SocketGrabTransformer.scaleMode = value; } } public Vector3 fixedScale { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_FixedScale; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) m_FixedScale = value; m_SocketGrabTransformer.fixedScale = float3.op_Implicit(value); } } public Vector3 targetBoundsSize { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_TargetBoundsSize; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) m_TargetBoundsSize = value; m_SocketGrabTransformer.targetBoundsSize = float3.op_Implicit(value); } } protected List unsortedValidTargets { get; } = new List(); protected virtual int socketSnappingLimit => 1; protected virtual bool ejectExistingSocketsWhenSnapping => true; public override bool isHoverActive { get { if (base.isHoverActive) { return m_SocketActive; } return false; } } public override bool isSelectActive { get { if (base.isSelectActive) { return m_SocketActive; } return false; } } public override XRBaseInteractable.MovementType? selectedInteractableMovementTypeOverride => XRBaseInteractable.MovementType.Instantaneous; private bool isHoverRecycleAllowed { get { if (!m_HoverSocketSnapping) { if (!(m_LastRemoveTime < 0f) && !(m_RecycleDelayTime <= 0f)) { return Time.time > m_LastRemoveTime + m_RecycleDelayTime; } return true; } return true; } } protected virtual void OnValidate() { SyncTransformerParams(); } protected override void Awake() { base.Awake(); m_TriggerContactMonitor.interactionManager = base.interactionManager; m_UpdateCollidersAfterTriggerStay = UpdateCollidersAfterOnTriggerStay(); SyncTransformerParams(); CreateDefaultHoverMaterials(); } protected override void OnEnable() { base.OnEnable(); m_TriggerContactMonitor.contactAdded += OnContactAdded; m_TriggerContactMonitor.contactRemoved += OnContactRemoved; m_SocketGrabTransformer.canProcess = m_SocketActive; SyncTransformerParams(); ResetCollidersAndValidTargets(); ((MonoBehaviour)this).StartCoroutine(m_UpdateCollidersAfterTriggerStay); } protected override void OnDisable() { base.OnDisable(); m_SocketGrabTransformer.canProcess = false; m_TriggerContactMonitor.contactAdded -= OnContactAdded; m_TriggerContactMonitor.contactRemoved -= OnContactRemoved; ResetCollidersAndValidTargets(); ((MonoBehaviour)this).StopCoroutine(m_UpdateCollidersAfterTriggerStay); } protected void OnTriggerEnter(Collider other) { m_TriggerContactMonitor.AddCollider(other); } protected void OnTriggerStay(Collider other) { m_StayedColliders.Add(other); } protected void OnTriggerExit(Collider other) { m_TriggerContactMonitor.RemoveCollider(other); } private IEnumerator UpdateCollidersAfterOnTriggerStay() { while (true) { yield return s_WaitForFixedUpdate; m_TriggerContactMonitor.UpdateStayedColliders(m_StayedColliders); } } public override void ProcessInteractor(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.ProcessInteractor(updatePhase); switch (updatePhase) { case XRInteractionUpdateOrder.UpdatePhase.Fixed: m_StayedColliders.Clear(); break; case XRInteractionUpdateOrder.UpdatePhase.Dynamic: if (m_ShowInteractableHoverMeshes && base.hasHover && isHoverRecycleAllowed) { DrawHoveredInteractables(); } break; } } protected virtual void CreateDefaultHoverMaterials() { //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Expected O, but got Unknown //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Expected O, but got Unknown //IL_00cf: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_InteractableHoverMeshMaterial != (Object)null && (Object)(object)m_InteractableCantHoverMeshMaterial != (Object)null) { return; } string text = (Object.op_Implicit((Object)(object)GraphicsSettings.currentRenderPipeline) ? "Universal Render Pipeline/Lit" : "Standard"); Shader val = Shader.Find(text); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)("Failed to create default materials for Socket Interactor, was unable to find \"" + text + "\" Shader. Make sure the shader is included into the game build."), (Object)(object)this); return; } if ((Object)(object)m_InteractableHoverMeshMaterial == (Object)null) { m_InteractableHoverMeshMaterial = new Material(val); SetMaterialFade(m_InteractableHoverMeshMaterial, new Color(0f, 0f, 1f, 0.6f)); } if ((Object)(object)m_InteractableCantHoverMeshMaterial == (Object)null) { m_InteractableCantHoverMeshMaterial = new Material(val); SetMaterialFade(m_InteractableCantHoverMeshMaterial, new Color(1f, 0f, 0f, 0.6f)); } } private static void SetMaterialFade(Material material, Color color) { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) material.SetOverrideTag("RenderType", "Transparent"); bool flag = (Object)(object)GraphicsSettings.currentRenderPipeline != (Object)null; if (flag) { material.SetFloat(ShaderPropertyLookup.surface, 1f); } material.SetFloat(ShaderPropertyLookup.mode, 2f); material.SetInt(ShaderPropertyLookup.srcBlend, 5); material.SetInt(ShaderPropertyLookup.dstBlend, 10); material.SetInt(ShaderPropertyLookup.zWrite, 0); material.DisableKeyword("_ALPHATEST_ON"); material.EnableKeyword("_ALPHABLEND_ON"); material.DisableKeyword("_ALPHAPREMULTIPLY_ON"); material.renderQueue = 3000; material.SetColor(flag ? ShaderPropertyLookup.baseColor : ShaderPropertyLookup.color, color); } protected override void OnHoverEntering(HoverEnterEventArgs args) { base.OnHoverEntering(args); if (!m_ShowInteractableHoverMeshes) { return; } IXRHoverInteractable interactableObject = args.interactableObject; s_MeshFilters.Clear(); ((Component)interactableObject.transform).GetComponentsInChildren(true, s_MeshFilters); if (s_MeshFilters.Count != 0) { (MeshFilter, Renderer)[] array = new(MeshFilter, Renderer)[s_MeshFilters.Count]; for (int i = 0; i < s_MeshFilters.Count; i++) { MeshFilter val = s_MeshFilters[i]; array[i] = (val, ((Component)val).GetComponent()); } m_MeshFilterCache.Add(interactableObject, array); } } protected override void OnHoverEntered(HoverEnterEventArgs args) { base.OnHoverEntered(args); if (CanHoverSnap(args.interactableObject) && args.interactableObject is XRGrabInteractable grabInteractable) { StartSocketSnapping(grabInteractable); } } protected virtual bool CanHoverSnap(IXRInteractable interactable) { if (m_HoverSocketSnapping) { if (base.hasSelection) { return IsSelecting(interactable); } return true; } return false; } protected override void OnHoverExiting(HoverExitEventArgs args) { base.OnHoverExiting(args); IXRHoverInteractable interactableObject = args.interactableObject; m_MeshFilterCache.Remove(interactableObject); if (interactableObject is XRGrabInteractable grabInteractable) { EndSocketSnapping(grabInteractable); } } protected override void OnSelectEntered(SelectEnterEventArgs args) { base.OnSelectEntered(args); if (args.interactableObject is XRGrabInteractable grabInteractable) { StartSocketSnapping(grabInteractable); } } protected override void OnSelectExiting(SelectExitEventArgs args) { base.OnSelectExiting(args); m_LastRemoveTime = Time.time; } protected override void OnSelectExited(SelectExitEventArgs args) { base.OnSelectExited(args); if (args.interactableObject is XRGrabInteractable grabInteractable) { EndSocketSnapping(grabInteractable); } } private Matrix4x4 GetHoverMeshMatrix(IXRInteractable interactable, MeshFilter meshFilter, float hoverScale) { //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a8: Unknown result type (might be due to invalid IL or missing references) //IL_00ad: Unknown result type (might be due to invalid IL or missing references) //IL_00ae: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00bb: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00c8: Unknown result type (might be due to invalid IL or missing references) //IL_00cd: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0115: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011c: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012a: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013d: Unknown result type (might be due to invalid IL or missing references) //IL_0142: Unknown result type (might be due to invalid IL or missing references) //IL_0144: Unknown result type (might be due to invalid IL or missing references) //IL_0149: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0150: Unknown result type (might be due to invalid IL or missing references) //IL_0155: Unknown result type (might be due to invalid IL or missing references) //IL_015d: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_018e: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_0197: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) Transform val = interactable.GetAttachTransform(this); XRGrabInteractable xRGrabInteractable = interactable as XRGrabInteractable; Pose val2 = default(Pose); if ((Object)(object)xRGrabInteractable != (Object)null && !xRGrabInteractable.useDynamicAttach && xRGrabInteractable.isSelected && (Object)(object)val != (Object)(object)interactable.transform && val.IsChildOf(interactable.transform)) { Pose localAttachPoseOnSelect = xRGrabInteractable.GetLocalAttachPoseOnSelect(xRGrabInteractable.firstInteractorSelecting); Transform parent = val.parent; ((Pose)(ref val2))..ctor(parent.TransformPoint(localAttachPoseOnSelect.position), parent.rotation * localAttachPoseOnSelect.rotation); } else { ((Pose)(ref val2))..ctor(val.position, val.rotation); } Vector3 direction = ((Component)meshFilter).transform.position - val2.position; Vector3 val3 = InverseTransformDirection(val2, direction) * hoverScale; Quaternion val4 = Quaternion.Inverse(Quaternion.Inverse(((Component)meshFilter).transform.rotation) * val2.rotation); Transform val5 = GetAttachTransform(interactable); Pose val6 = default(Pose); ((Pose)(ref val6))..ctor(val5.position, val5.rotation); Vector3 val7; Quaternion val8; if ((Object)(object)xRGrabInteractable == (Object)null || xRGrabInteractable.trackRotation) { val7 = val6.rotation * val3 + val6.position; val8 = val6.rotation * val4; } else { val7 = val2.rotation * val3 + val6.position; val8 = ((Component)meshFilter).transform.rotation; } if ((Object)(object)xRGrabInteractable != (Object)null && !xRGrabInteractable.trackPosition) { val7 = ((Component)meshFilter).transform.position; } Vector3 val9 = ((Component)meshFilter).transform.lossyScale * hoverScale; return Matrix4x4.TRS(val7, val8, val9); } private static Vector3 InverseTransformDirection(Pose pose, Vector3 direction) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) return Quaternion.Inverse(pose.rotation) * direction; } protected virtual void DrawHoveredInteractables() { //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00c3: Unknown result type (might be due to invalid IL or missing references) //IL_00d5: Unknown result type (might be due to invalid IL or missing references) if (!m_ShowInteractableHoverMeshes || m_InteractableHoverScale <= 0f) { return; } Camera main = Camera.main; if ((Object)(object)main == (Object)null) { return; } foreach (IXRHoverInteractable item in base.interactablesHovered) { if (item == null || IsSelecting(item) || !m_MeshFilterCache.TryGetValue(item, out var value) || value == null || value.Length == 0) { continue; } Material hoveredInteractableMaterial = GetHoveredInteractableMaterial(item); if ((Object)(object)hoveredInteractableMaterial == (Object)null) { continue; } (MeshFilter, Renderer)[] array = value; for (int i = 0; i < array.Length; i++) { var (val, meshRenderer) = array[i]; if (ShouldDrawHoverMesh(val, meshRenderer, main)) { Matrix4x4 hoverMeshMatrix = GetHoverMeshMatrix(item, val, m_InteractableHoverScale); Mesh sharedMesh = val.sharedMesh; for (int j = 0; j < sharedMesh.subMeshCount; j++) { Graphics.DrawMesh(sharedMesh, hoverMeshMatrix, hoveredInteractableMaterial, ((Component)this).gameObject.layer, (Camera)null, j); } } } } } protected virtual Material GetHoveredInteractableMaterial(IXRHoverInteractable interactable) { if (!base.hasSelection) { return m_InteractableHoverMeshMaterial; } return m_InteractableCantHoverMeshMaterial; } public override void GetValidTargets(List targets) { targets.Clear(); if (((Behaviour)this).isActiveAndEnabled) { IXRTargetFilter iXRTargetFilter = base.targetFilter; if (iXRTargetFilter != null && iXRTargetFilter.canProcess) { iXRTargetFilter.Process(this, unsortedValidTargets, targets); } else { SortingHelpers.SortByDistanceToInteractor(this, unsortedValidTargets, targets); } } } public override bool CanHover(IXRHoverInteractable interactable) { if (base.CanHover(interactable)) { return isHoverRecycleAllowed; } return false; } public override bool CanSelect(IXRSelectInteractable interactable) { if (base.CanSelect(interactable)) { if (base.hasSelection || interactable.isSelected) { if (IsSelecting(interactable)) { return interactable.interactorsSelecting.Count == 1; } return false; } return true; } return false; } protected virtual bool ShouldDrawHoverMesh(MeshFilter meshFilter, Renderer meshRenderer, Camera mainCamera) { int cullingMask = mainCamera.cullingMask; if ((Object)(object)meshFilter != (Object)null && (cullingMask & (1 << ((Component)meshFilter).gameObject.layer)) != 0 && (Object)(object)meshRenderer != (Object)null) { return meshRenderer.enabled; } return false; } protected override void OnRegistered(InteractorRegisteredEventArgs args) { base.OnRegistered(args); args.manager.interactableRegistered += OnInteractableRegistered; args.manager.interactableUnregistered += OnInteractableUnregistered; m_TriggerContactMonitor.interactionManager = args.manager; m_TriggerContactMonitor.ResolveUnassociatedColliders(); XRInteractionManager.RemoveAllUnregistered(args.manager, unsortedValidTargets); } protected override void OnUnregistered(InteractorUnregisteredEventArgs args) { base.OnUnregistered(args); args.manager.interactableRegistered -= OnInteractableRegistered; args.manager.interactableUnregistered -= OnInteractableUnregistered; } private void OnInteractableRegistered(InteractableRegisteredEventArgs args) { m_TriggerContactMonitor.ResolveUnassociatedColliders(args.interactableObject); if (m_TriggerContactMonitor.IsContacting(args.interactableObject) && !unsortedValidTargets.Contains(args.interactableObject)) { unsortedValidTargets.Add(args.interactableObject); } } private void OnInteractableUnregistered(InteractableUnregisteredEventArgs args) { unsortedValidTargets.Remove(args.interactableObject); } private void OnContactAdded(IXRInteractable interactable) { if (!unsortedValidTargets.Contains(interactable)) { unsortedValidTargets.Add(interactable); } } private void OnContactRemoved(IXRInteractable interactable) { unsortedValidTargets.Remove(interactable); } private void ResetCollidersAndValidTargets() { unsortedValidTargets.Clear(); m_StayedColliders.Clear(); m_TriggerContactMonitor.UpdateStayedColliders(m_StayedColliders); } protected virtual bool StartSocketSnapping(XRGrabInteractable grabInteractable) { int count = m_InteractablesWithSocketTransformer.Count; if (count >= socketSnappingLimit || m_InteractablesWithSocketTransformer.Contains(grabInteractable)) { return false; } if (count > 0 && ejectExistingSocketsWhenSnapping) { foreach (XRGrabInteractable item in m_InteractablesWithSocketTransformer.AsList()) { item.RemoveSingleGrabTransformer(m_SocketGrabTransformer); } m_InteractablesWithSocketTransformer.Clear(); } grabInteractable.AddSingleGrabTransformer(m_SocketGrabTransformer); m_InteractablesWithSocketTransformer.Add(grabInteractable); return true; } protected virtual bool EndSocketSnapping(XRGrabInteractable grabInteractable) { grabInteractable.RemoveSingleGrabTransformer(m_SocketGrabTransformer); return m_InteractablesWithSocketTransformer.Remove(grabInteractable); } private void SyncTransformerParams() { //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) m_SocketGrabTransformer.socketInteractor = this; m_SocketGrabTransformer.socketSnappingRadius = socketSnappingRadius; m_SocketGrabTransformer.scaleMode = socketScaleMode; m_SocketGrabTransformer.fixedScale = float3.op_Implicit(fixedScale); m_SocketGrabTransformer.targetBoundsSize = float3.op_Implicit(targetBoundsSize); } [Obsolete("CanHover(XRBaseInteractable) has been deprecated. Use CanHover(IXRHoverInteractable) instead.")] public override bool CanHover(XRBaseInteractable interactable) { return CanHover((IXRHoverInteractable)interactable); } [Obsolete("CanSelect(XRBaseInteractable) has been deprecated. Use CanSelect(IXRSelectInteractable) instead.")] public override bool CanSelect(XRBaseInteractable interactable) { return CanSelect((IXRSelectInteractable)interactable); } } [Serializable] public struct InteractionLayerMask : ISerializationCallbackReceiver { [SerializeField] private uint m_Bits; private int m_Mask; public int value { get { return m_Mask; } set { m_Mask = value; m_Bits = (uint)value; } } public static implicit operator int(InteractionLayerMask mask) { return mask.m_Mask; } public static implicit operator InteractionLayerMask(int intVal) { InteractionLayerMask result = default(InteractionLayerMask); result.m_Mask = intVal; result.m_Bits = (uint)intVal; return result; } public static string LayerToName(int layer) { if (layer < 0 || layer >= 32) { return string.Empty; } return ScriptableSettings.Instance.GetLayerNameAt(layer); } public static int NameToLayer(string layerName) { return ScriptableSettings.Instance.GetLayer(layerName); } public static int GetMask(params string[] layerNames) { if (layerNames == null) { throw new ArgumentNullException("layerNames"); } int num = 0; for (int i = 0; i < layerNames.Length; i++) { int num2 = NameToLayer(layerNames[i]); if (num2 != -1) { num |= 1 << num2; } } return num; } public void OnAfterDeserialize() { m_Mask = (int)m_Bits; } public void OnBeforeSerialize() { } } [ScriptableSettingsPath("Assets/XRI/Settings")] internal class InteractionLayerSettings : ScriptableSettings, ISerializationCallbackReceiver { private const string k_DefaultLayerName = "Default"; internal const int layerSize = 32; internal const int builtInLayerSize = 1; [SerializeField] private string[] m_LayerNames; internal bool IsLayerEmpty(int index) { return string.IsNullOrEmpty(m_LayerNames[index]); } internal void SetLayerNameAt(int index, string layerName) { m_LayerNames[index] = layerName; } internal string GetLayerNameAt(int index) { return m_LayerNames[index]; } internal int GetLayer(string layerName) { for (int i = 0; i < m_LayerNames.Length; i++) { if (string.Equals(layerName, m_LayerNames[i])) { return i; } } return -1; } internal void GetLayerNamesAndValues(List names, List values) { for (int i = 0; i < m_LayerNames.Length; i++) { string text = m_LayerNames[i]; if (!string.IsNullOrEmpty(text)) { names.Add(text); values.Add(i); } } } public void OnBeforeSerialize() { if (m_LayerNames == null) { m_LayerNames = new string[32]; } if (m_LayerNames.Length != 32) { Array.Resize(ref m_LayerNames, 32); } if (!string.Equals(m_LayerNames[0], "Default")) { m_LayerNames[0] = "Default"; } } public void OnAfterDeserialize() { } } public interface IXRAimAssist { Vector3 GetAssistedVelocity(in Vector3 source, in Vector3 velocity, float gravity); Vector3 GetAssistedVelocity(in Vector3 source, in Vector3 velocity, float gravity, float maxAngle); } public interface IXROverridesGazeAutoSelect { bool overrideGazeTimeToSelect { get; } float gazeTimeToSelect { get; } bool overrideTimeToAutoDeselectGaze { get; } float timeToAutoDeselectGaze { get; } } [DisallowMultipleComponent] [AddComponentMenu("XR/XR Gaze Assistance", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRGazeAssistance.html")] [DefaultExecutionOrder(-29980)] public class XRGazeAssistance : MonoBehaviour, IXRAimAssist { [Serializable] public sealed class InteractorData { [SerializeField] [RequireInterface(typeof(IXRRayProvider))] [Tooltip("The interactor that can fall back to gaze data.")] private Object m_Interactor; [SerializeField] [Tooltip("Changes mediation behavior to account for teleportation controls.")] private bool m_TeleportRay; private bool m_Initialized; private IXRRayProvider m_RayProvider; private IXRSelectInteractor m_SelectInteractor; private bool m_RestoreVisuals; private XRInteractorLineVisual m_LineVisual; private bool m_HasLineVisual; private Transform m_OriginalRayOrigin; private Transform m_OriginalAttach; private Transform m_OriginalVisualLineOrigin; private bool m_OriginalOverrideVisualLineOrigin; private Transform m_FallbackRayOrigin; private Transform m_FallbackAttach; private Transform m_FallbackVisualLineOrigin; public Object interactor { get { return m_Interactor; } set { m_Interactor = value; } } public bool teleportRay { get { return m_TeleportRay; } set { m_TeleportRay = value; } } public bool fallback { get; private set; } internal void Initialize() { //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) if (m_Initialized) { return; } m_RayProvider = m_Interactor as IXRRayProvider; m_SelectInteractor = m_Interactor as IXRSelectInteractor; if (m_RayProvider == null || m_SelectInteractor == null) { Debug.LogWarning((object)"No ray and select interactor found!"); return; } m_OriginalRayOrigin = m_RayProvider.GetOrCreateRayOrigin(); m_OriginalAttach = m_RayProvider.GetOrCreateAttachTransform(); Transform transform = m_SelectInteractor.transform; string name = ((Object)((Component)transform).gameObject).name; m_FallbackRayOrigin = new GameObject("Gaze Assistance [" + name + "] Ray Origin").transform; m_FallbackAttach = new GameObject("Gaze Assistance [" + name + "] Attach").transform; m_FallbackRayOrigin.parent = m_OriginalRayOrigin.parent; m_FallbackAttach.parent = m_FallbackRayOrigin; m_HasLineVisual = ((Component)transform).TryGetComponent(ref m_LineVisual); if (m_HasLineVisual) { m_FallbackVisualLineOrigin = new GameObject("Gaze Assistance [" + name + "] Visual Origin").transform; m_FallbackVisualLineOrigin.parent = m_FallbackRayOrigin.parent; } m_Initialized = true; } internal void UpdateFallbackRayOrigin(Transform gazeTransform) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_001e: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0026: Unknown result type (might be due to invalid IL or missing references) if (m_Initialized && fallback) { Vector3 position = gazeTransform.position; Quaternion rotation = gazeTransform.rotation; m_FallbackRayOrigin.SetPositionAndRotation(position, rotation); } } internal void UpdateLineVisualOrigin() { //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) if (m_Initialized && m_HasLineVisual && fallback) { Vector3 position; Quaternion val; if (m_OriginalOverrideVisualLineOrigin && (Object)(object)m_OriginalVisualLineOrigin != (Object)null) { position = m_OriginalVisualLineOrigin.position; val = ((!m_TeleportRay) ? m_OriginalVisualLineOrigin.rotation : m_FallbackRayOrigin.rotation); } else { position = m_OriginalRayOrigin.position; val = ((!m_TeleportRay) ? m_OriginalRayOrigin.rotation : m_FallbackRayOrigin.rotation); } m_FallbackVisualLineOrigin.SetPositionAndRotation(position, val); } } internal bool UpdateFallbackState(Transform gazeTransform, float fallbackDivergence, bool selectionLocked) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012e: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0135: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_018d: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0194: Unknown result type (might be due to invalid IL or missing references) //IL_019f: Unknown result type (might be due to invalid IL or missing references) //IL_01a4: Unknown result type (might be due to invalid IL or missing references) //IL_01a6: Unknown result type (might be due to invalid IL or missing references) if (!m_Initialized) { return false; } bool flag = !selectionLocked && Vector3.Angle(gazeTransform.forward, m_OriginalRayOrigin.forward) > fallbackDivergence; if (!m_SelectInteractor.isSelectActive) { if (flag && !fallback) { if (m_HasLineVisual) { m_OriginalOverrideVisualLineOrigin = m_LineVisual.overrideInteractorLineOrigin; m_OriginalVisualLineOrigin = m_LineVisual.lineOriginTransform; m_LineVisual.overrideInteractorLineOrigin = true; m_LineVisual.lineOriginTransform = m_FallbackVisualLineOrigin; } m_RayProvider.SetRayOrigin(m_FallbackRayOrigin); m_RayProvider.SetAttachTransform(m_FallbackAttach); } else if (!flag && fallback) { if (m_HasLineVisual) { m_LineVisual.overrideInteractorLineOrigin = m_OriginalOverrideVisualLineOrigin; m_LineVisual.lineOriginTransform = m_OriginalVisualLineOrigin; } m_RayProvider.SetRayOrigin(m_OriginalRayOrigin); m_RayProvider.SetAttachTransform(m_OriginalAttach); if (!m_TeleportRay) { m_RestoreVisuals = true; } } fallback = flag; } if (fallback) { Vector3 position = gazeTransform.position; Quaternion rotation = gazeTransform.rotation; if (!m_TeleportRay && m_SelectInteractor.isSelectActive && m_SelectInteractor.hasSelection) { Vector3 val = m_FallbackAttach.position - position; float num = Mathf.Clamp01(((Vector3)(ref val)).magnitude / 0.5f); m_FallbackRayOrigin.SetPositionAndRotation(Vector3.Lerp(m_OriginalRayOrigin.position, position, num), Quaternion.Lerp(m_OriginalRayOrigin.rotation, rotation, num)); if (m_HasLineVisual) { ((Behaviour)m_LineVisual).enabled = true; } return true; } if (m_HasLineVisual && !m_TeleportRay) { ((Behaviour)m_LineVisual).enabled = false; } } return false; } internal void RestoreVisuals() { if (m_RestoreVisuals && m_HasLineVisual && !fallback) { ((Behaviour)m_LineVisual).enabled = true; } m_RestoreVisuals = false; } } private const float k_MinAttachDistance = 0.5f; private const float k_MinFallbackDivergence = 0f; private const float k_MaxFallbackDivergence = 90f; private const float k_MinAimAssistRequiredAngle = 0f; private const float k_MaxAimAssistRequiredAngle = 90f; [SerializeField] [Tooltip("Eye data source used as fallback data and to determine if fallback data should be used.")] private XRGazeInteractor m_GazeInteractor; [SerializeField] [Range(0f, 90f)] [Tooltip("How far an interactor must point away from the user's view area before eye gaze will be used instead.")] private float m_FallbackDivergence = 60f; [SerializeField] [Tooltip("If the eye reticle should be hidden when all interactors are using their original data.")] private bool m_HideCursorWithNoActiveRays = true; [SerializeField] [Tooltip("Interactors that can fall back to gaze data.")] private List m_RayInteractors = new List(); [SerializeField] [Tooltip("How far projectiles can aim outside of eye gaze and still be considered for aim assist.")] [Range(0f, 90f)] private float m_AimAssistRequiredAngle = 30f; [SerializeField] [Tooltip("How fast a projectile must be moving to be considered for aim assist.")] private float m_AimAssistRequiredSpeed = 0.25f; [SerializeField] [Tooltip("How much of the corrected aim velocity to use, as a percentage.")] [Range(0f, 1f)] private float m_AimAssistPercent = 0.8f; [SerializeField] [Tooltip("How much additional speed a projectile can receive from aim assistance, as a percentage.")] private float m_AimAssistMaxSpeedPercent = 10f; private InteractorData m_SelectingInteractorData; private XRInteractorReticleVisual m_GazeReticleVisual; private bool m_HasGazeReticleVisual; public XRGazeInteractor gazeInteractor { get { return m_GazeInteractor; } set { m_GazeInteractor = value; } } public float fallbackDivergence { get { return m_FallbackDivergence; } set { m_FallbackDivergence = Mathf.Clamp(value, 0f, 90f); } } public bool hideCursorWithNoActiveRays { get { return m_HideCursorWithNoActiveRays; } set { m_HideCursorWithNoActiveRays = value; } } public List rayInteractors { get { return m_RayInteractors; } set { m_RayInteractors = value; } } public float aimAssistRequiredAngle { get { return m_AimAssistRequiredAngle; } set { m_AimAssistRequiredAngle = Mathf.Clamp(value, 0f, 90f); } } public float aimAssistRequiredSpeed { get { return m_AimAssistRequiredSpeed; } set { m_AimAssistRequiredSpeed = value; } } public float aimAssistPercent { get { return m_AimAssistPercent; } set { m_AimAssistPercent = Mathf.Clamp01(value); } } public float aimAssistMaxSpeedPercent { get { return m_AimAssistMaxSpeedPercent; } set { m_AimAssistMaxSpeedPercent = value; } } private void Initialize() { if ((Object)(object)m_GazeInteractor != (Object)null) { m_HasGazeReticleVisual = ((Component)m_GazeInteractor).TryGetComponent(ref m_GazeReticleVisual); for (int i = 0; i < m_RayInteractors.Count; i++) { m_RayInteractors[i].Initialize(); } } else { Debug.LogError((object)$"Gaze Interactor not set or missing on {this}. Disabling this XR Gaze Assistance component.", (Object)(object)this); ((Behaviour)this).enabled = false; } } protected void OnEnable() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown Application.onBeforeRender += new UnityAction(OnBeforeRender); } protected void OnDisable() { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Expected O, but got Unknown Application.onBeforeRender -= new UnityAction(OnBeforeRender); } protected void Start() { Initialize(); } protected void Update() { Transform rayOriginTransform = m_GazeInteractor.rayOriginTransform; for (int i = 0; i < m_RayInteractors.Count; i++) { InteractorData interactorData = m_RayInteractors[i]; interactorData.RestoreVisuals(); interactorData.UpdateFallbackRayOrigin(rayOriginTransform); } } protected void LateUpdate() { if (!((Behaviour)m_GazeInteractor).isActiveAndEnabled) { return; } Transform rayOriginTransform = m_GazeInteractor.rayOriginTransform; if (m_SelectingInteractorData != null && !m_SelectingInteractorData.UpdateFallbackState(rayOriginTransform, m_FallbackDivergence, selectionLocked: false)) { m_SelectingInteractorData = null; } bool flag = false; for (int i = 0; i < m_RayInteractors.Count; i++) { InteractorData interactorData = m_RayInteractors[i]; if (interactorData.fallback) { flag = true; } if (interactorData != m_SelectingInteractorData && interactorData.UpdateFallbackState(rayOriginTransform, m_FallbackDivergence, m_SelectingInteractorData != null)) { m_SelectingInteractorData = interactorData; } } if (m_HideCursorWithNoActiveRays && m_HasGazeReticleVisual) { bool flag2 = m_SelectingInteractorData != null; ((Behaviour)m_GazeReticleVisual).enabled = flag && !flag2; } } [BeforeRenderOrder(95)] private void OnBeforeRender() { for (int i = 0; i < m_RayInteractors.Count; i++) { m_RayInteractors[i].UpdateLineVisualOrigin(); } } public Vector3 GetAssistedVelocity(in Vector3 source, in Vector3 velocity, float gravity) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) GetAssistedVelocityInternal(in source, m_GazeInteractor.rayEndPoint, in velocity, gravity, m_AimAssistRequiredAngle, m_AimAssistRequiredSpeed, m_AimAssistMaxSpeedPercent, m_AimAssistPercent, Mathf.Epsilon, out var adjustedVelocity); return adjustedVelocity; } public Vector3 GetAssistedVelocity(in Vector3 source, in Vector3 velocity, float gravity, float maxAngle) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) GetAssistedVelocityInternal(in source, m_GazeInteractor.rayEndPoint, in velocity, gravity, maxAngle, m_AimAssistRequiredSpeed, m_AimAssistMaxSpeedPercent, m_AimAssistPercent, Mathf.Epsilon, out var adjustedVelocity); return adjustedVelocity; } private static void GetAssistedVelocityInternal(in Vector3 source, in Vector3 target, in Vector3 velocity, float gravity, float maxAngle, float requiredSpeed, float maxSpeedPercent, float assistPercent, float epsilon, out Vector3 adjustedVelocity) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_003a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0041: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_0047: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006c: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0076: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00ea: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0109: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_014b: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_016c: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_017f: Unknown result type (might be due to invalid IL or missing references) //IL_0186: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01bc: Unknown result type (might be due to invalid IL or missing references) //IL_01c2: Unknown result type (might be due to invalid IL or missing references) //IL_01c4: Unknown result type (might be due to invalid IL or missing references) //IL_01c6: Unknown result type (might be due to invalid IL or missing references) //IL_01cb: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01e0: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e4: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) //IL_01f0: Unknown result type (might be due to invalid IL or missing references) //IL_01f5: Unknown result type (might be due to invalid IL or missing references) //IL_01f9: Unknown result type (might be due to invalid IL or missing references) //IL_0207: Unknown result type (might be due to invalid IL or missing references) //IL_0208: Unknown result type (might be due to invalid IL or missing references) //IL_020d: Unknown result type (might be due to invalid IL or missing references) //IL_020f: Unknown result type (might be due to invalid IL or missing references) //IL_0214: Unknown result type (might be due to invalid IL or missing references) //IL_021b: Unknown result type (might be due to invalid IL or missing references) //IL_0221: Unknown result type (might be due to invalid IL or missing references) //IL_022f: Unknown result type (might be due to invalid IL or missing references) //IL_0234: Unknown result type (might be due to invalid IL or missing references) Vector3 val = target - source; float num = math.length(float3.op_Implicit(velocity)); float3 val2 = math.normalize(float3.op_Implicit(velocity)); float3 val3 = math.normalize(float3.op_Implicit(val)); if (Vector3.Angle(float3.op_Implicit(val2), float3.op_Implicit(val3)) > maxAngle) { adjustedVelocity = velocity; return; } if (gravity < epsilon) { adjustedVelocity = float3.op_Implicit(val3 * num); return; } if (num < requiredSpeed) { adjustedVelocity = velocity; return; } float3 val4 = float3.op_Implicit(val); val4.y = 0f; float num2 = math.length(val4); if (num2 < epsilon) { adjustedVelocity = velocity; return; } float2 val5 = default(float2); ((float2)(ref val5))..ctor(math.sqrt(0.5f * gravity * (num2 * num2) / (num2 - val.y)), 0f); val5.y = val5.x; float2 val6 = default(float2); ((float2)(ref val6))..ctor(val5.x, 0f); if (val.y < 0f) { val6.x = math.sqrt(0.5f * gravity * num2 * num2 / (0f - val.y)); } else { val6.x *= 2f; val6.y = val6.x * (val.y + 0.5f * gravity * (num2 / val6.x) * (num2 / val6.x)) / num2; } float num3 = math.length(val5); float num4 = math.length(val6); float num5 = math.abs(num3 - num); float num6 = math.abs(num4 - num); if (velocity.y <= 0f) { num6 *= 0.25f; } float2 val7 = ((num5 < num6) ? val5 : val6); val7 = math.normalize(val7) * math.min(math.length(val7), maxSpeedPercent * num); float3 val8 = math.normalize(val4) * val7.x; val8.y = val7.y; adjustedVelocity = Vector3.Slerp(float3.op_Implicit(val2), float3.op_Implicit(math.normalize(val8)), assistPercent) * math.lerp(num, math.length(val8), assistPercent); } Vector3 IXRAimAssist.GetAssistedVelocity(in Vector3 source, in Vector3 velocity, float gravity) { //IL_0004: Unknown result type (might be due to invalid IL or missing references) return GetAssistedVelocity(in source, in velocity, gravity); } Vector3 IXRAimAssist.GetAssistedVelocity(in Vector3 source, in Vector3 velocity, float gravity, float maxAngle) { //IL_0006: Unknown result type (might be due to invalid IL or missing references) return GetAssistedVelocity(in source, in velocity, gravity, maxAngle); } } public abstract class BaseInteractionEventArgs { public IXRInteractor interactorObject { get; set; } public IXRInteractable interactableObject { get; set; } [Obsolete("interactor has been deprecated. Use interactorObject instead.")] public XRBaseInteractor interactor { get { return interactorObject as XRBaseInteractor; } set { interactorObject = value; } } [Obsolete("interactable has been deprecated. Use interactableObject instead.")] public XRBaseInteractable interactable { get { return interactableObject as XRBaseInteractable; } set { interactableObject = value; } } } [Serializable] public sealed class TeleportingEvent : UnityEvent { } public class TeleportingEventArgs : BaseInteractionEventArgs { public TeleportRequest teleportRequest { get; set; } } [Serializable] public sealed class HoverEnterEvent : UnityEvent { } public class HoverEnterEventArgs : BaseInteractionEventArgs { public new IXRHoverInteractor interactorObject { get { return (IXRHoverInteractor)base.interactorObject; } set { base.interactorObject = value; } } public new IXRHoverInteractable interactableObject { get { return (IXRHoverInteractable)base.interactableObject; } set { base.interactableObject = value; } } public XRInteractionManager manager { get; set; } } [Serializable] public sealed class HoverExitEvent : UnityEvent { } public class HoverExitEventArgs : BaseInteractionEventArgs { public new IXRHoverInteractor interactorObject { get { return (IXRHoverInteractor)base.interactorObject; } set { base.interactorObject = value; } } public new IXRHoverInteractable interactableObject { get { return (IXRHoverInteractable)base.interactableObject; } set { base.interactableObject = value; } } public XRInteractionManager manager { get; set; } public bool isCanceled { get; set; } } [Serializable] public sealed class SelectEnterEvent : UnityEvent { } public class SelectEnterEventArgs : BaseInteractionEventArgs { public new IXRSelectInteractor interactorObject { get { return (IXRSelectInteractor)base.interactorObject; } set { base.interactorObject = value; } } public new IXRSelectInteractable interactableObject { get { return (IXRSelectInteractable)base.interactableObject; } set { base.interactableObject = value; } } public XRInteractionManager manager { get; set; } } [Serializable] public sealed class SelectExitEvent : UnityEvent { } public class SelectExitEventArgs : BaseInteractionEventArgs { public new IXRSelectInteractor interactorObject { get { return (IXRSelectInteractor)base.interactorObject; } set { base.interactorObject = value; } } public new IXRSelectInteractable interactableObject { get { return (IXRSelectInteractable)base.interactableObject; } set { base.interactableObject = value; } } public XRInteractionManager manager { get; set; } public bool isCanceled { get; set; } } [Serializable] public sealed class FocusEnterEvent : UnityEvent { } public class FocusEnterEventArgs : BaseInteractionEventArgs { public IXRInteractionGroup interactionGroup { get; set; } public new IXRFocusInteractable interactableObject { get { return (IXRFocusInteractable)base.interactableObject; } set { base.interactableObject = value; } } public XRInteractionManager manager { get; set; } } [Serializable] public sealed class FocusExitEvent : UnityEvent { } public class FocusExitEventArgs : BaseInteractionEventArgs { public IXRInteractionGroup interactionGroup { get; set; } public new IXRFocusInteractable interactableObject { get { return (IXRFocusInteractable)base.interactableObject; } set { base.interactableObject = value; } } public XRInteractionManager manager { get; set; } public bool isCanceled { get; set; } } [Serializable] public sealed class ActivateEvent : UnityEvent { } public class ActivateEventArgs : BaseInteractionEventArgs { public new IXRActivateInteractor interactorObject { get { return (IXRActivateInteractor)base.interactorObject; } set { base.interactorObject = value; } } public new IXRActivateInteractable interactableObject { get { return (IXRActivateInteractable)base.interactableObject; } set { base.interactableObject = value; } } } [Serializable] public sealed class DeactivateEvent : UnityEvent { } public class DeactivateEventArgs : BaseInteractionEventArgs { public new IXRActivateInteractor interactorObject { get { return (IXRActivateInteractor)base.interactorObject; } set { base.interactorObject = value; } } public new IXRActivateInteractable interactableObject { get { return (IXRActivateInteractable)base.interactableObject; } set { base.interactableObject = value; } } } public abstract class BaseRegistrationEventArgs { public XRInteractionManager manager { get; set; } } public class InteractionGroupRegisteredEventArgs : BaseRegistrationEventArgs { public IXRInteractionGroup interactionGroupObject { get; set; } public IXRInteractionGroup containingGroupObject { get; set; } } public class InteractorRegisteredEventArgs : BaseRegistrationEventArgs { public IXRInteractor interactorObject { get; set; } public IXRInteractionGroup containingGroupObject { get; set; } [Obsolete("interactor has been deprecated. Use interactorObject instead.")] public XRBaseInteractor interactor { get { return interactorObject as XRBaseInteractor; } set { interactorObject = value; } } } public class InteractableRegisteredEventArgs : BaseRegistrationEventArgs { public IXRInteractable interactableObject { get; set; } [Obsolete("interactable has been deprecated. Use interactableObject instead.")] public XRBaseInteractable interactable { get { return interactableObject as XRBaseInteractable; } set { interactableObject = value; } } } public class InteractionGroupUnregisteredEventArgs : BaseRegistrationEventArgs { public IXRInteractionGroup interactionGroupObject { get; set; } } public class InteractorUnregisteredEventArgs : BaseRegistrationEventArgs { public IXRInteractor interactorObject { get; set; } [Obsolete("interactor has been deprecated. Use interactorObject instead.")] public XRBaseInteractor interactor { get { return interactorObject as XRBaseInteractor; } set { interactorObject = value; } } } public class InteractableUnregisteredEventArgs : BaseRegistrationEventArgs { public IXRInteractable interactableObject { get; set; } [Obsolete("interactable has been deprecated. Use interactableObject instead.")] public XRBaseInteractable interactable { get { return interactableObject as XRBaseInteractable; } set { interactableObject = value; } } } [Serializable] [Obsolete("XRInteractableEvent has been deprecated. Use events specific to each state change instead.")] public class XRInteractableEvent : UnityEvent { } [Serializable] [Obsolete("XRInteractorEvent has been deprecated. Use events specific to each state change instead.")] public class XRInteractorEvent : UnityEvent { } [AddComponentMenu("XR/XR Interaction Manager", 11)] [DisallowMultipleComponent] [DefaultExecutionOrder(-105)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.XRInteractionManager.html")] public class XRInteractionManager : MonoBehaviour { [SerializeField] [RequireInterface(typeof(IXRHoverFilter))] private List m_StartingHoverFilters = new List(); private readonly ExposedRegistrationList m_HoverFilters = new ExposedRegistrationList { bufferChanges = false }; [SerializeField] [RequireInterface(typeof(IXRSelectFilter))] private List m_StartingSelectFilters = new List(); private readonly ExposedRegistrationList m_SelectFilters = new ExposedRegistrationList { bufferChanges = false }; private readonly Dictionary m_ColliderToInteractableMap = new Dictionary(); private readonly Dictionary m_ColliderToSnapVolumes = new Dictionary(); private readonly RegistrationList m_Interactors = new RegistrationList(); private readonly RegistrationList m_InteractionGroups = new RegistrationList(); private readonly RegistrationList m_Interactables = new RegistrationList(); private readonly List m_CurrentHovered = new List(); private readonly List m_CurrentSelected = new List(); private readonly Dictionary> m_HighestPriorityTargetMap = new Dictionary>(); private static readonly LinkedPool> s_TargetPriorityInteractorListPool = new LinkedPool>(() => new List(), null, delegate(List list) { list.Clear(); }, null, collectionCheck: false); private readonly List m_ValidTargets = new List(); private readonly HashSet m_UnorderedValidTargets = new HashSet(); private readonly HashSet m_InteractorsInGroup = new HashSet(); private readonly HashSet m_GroupsInGroup = new HashSet(); private readonly List m_DeprecatedValidTargets = new List(); private readonly List m_ScratchInteractionGroups = new List(); private readonly List m_ScratchInteractors = new List(); private readonly List m_ScratchInteractables = new List(); private readonly LinkedPool m_FocusEnterEventArgs = new LinkedPool(() => new FocusEnterEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_FocusExitEventArgs = new LinkedPool(() => new FocusExitEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_SelectEnterEventArgs = new LinkedPool(() => new SelectEnterEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_SelectExitEventArgs = new LinkedPool(() => new SelectExitEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_HoverEnterEventArgs = new LinkedPool(() => new HoverEnterEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_HoverExitEventArgs = new LinkedPool(() => new HoverExitEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_InteractionGroupRegisteredEventArgs = new LinkedPool(() => new InteractionGroupRegisteredEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_InteractionGroupUnregisteredEventArgs = new LinkedPool(() => new InteractionGroupUnregisteredEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_InteractorRegisteredEventArgs = new LinkedPool(() => new InteractorRegisteredEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_InteractorUnregisteredEventArgs = new LinkedPool(() => new InteractorUnregisteredEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_InteractableRegisteredEventArgs = new LinkedPool(() => new InteractableRegisteredEventArgs(), null, null, null, collectionCheck: false); private readonly LinkedPool m_InteractableUnregisteredEventArgs = new LinkedPool(() => new InteractableUnregisteredEventArgs(), null, null, null, collectionCheck: false); private static readonly ProfilerMarker s_PreprocessInteractorsMarker = new ProfilerMarker("XRI.PreprocessInteractors"); private static readonly ProfilerMarker s_ProcessInteractionStrengthMarker = new ProfilerMarker("XRI.ProcessInteractionStrength"); private static readonly ProfilerMarker s_ProcessInteractorsMarker = new ProfilerMarker("XRI.ProcessInteractors"); private static readonly ProfilerMarker s_ProcessInteractablesMarker = new ProfilerMarker("XRI.ProcessInteractables"); private static readonly ProfilerMarker s_UpdateGroupMemberInteractionsMarker = new ProfilerMarker("XRI.UpdateGroupMemberInteractions"); internal static readonly ProfilerMarker s_GetValidTargetsMarker = new ProfilerMarker("XRI.GetValidTargets"); private static readonly ProfilerMarker s_FilterRegisteredValidTargetsMarker = new ProfilerMarker("XRI.FilterRegisteredValidTargets"); internal static readonly ProfilerMarker s_EvaluateInvalidFocusMarker = new ProfilerMarker("XRI.EvaluateInvalidFocus"); internal static readonly ProfilerMarker s_EvaluateInvalidSelectionsMarker = new ProfilerMarker("XRI.EvaluateInvalidSelections"); internal static readonly ProfilerMarker s_EvaluateInvalidHoversMarker = new ProfilerMarker("XRI.EvaluateInvalidHovers"); internal static readonly ProfilerMarker s_EvaluateValidSelectionsMarker = new ProfilerMarker("XRI.EvaluateValidSelections"); internal static readonly ProfilerMarker s_EvaluateValidHoversMarker = new ProfilerMarker("XRI.EvaluateValidHovers"); private static readonly ProfilerMarker s_FocusEnterMarker = new ProfilerMarker("XRI.FocusEnter"); private static readonly ProfilerMarker s_FocusExitMarker = new ProfilerMarker("XRI.FocusExit"); private static readonly ProfilerMarker s_SelectEnterMarker = new ProfilerMarker("XRI.SelectEnter"); private static readonly ProfilerMarker s_SelectExitMarker = new ProfilerMarker("XRI.SelectExit"); private static readonly ProfilerMarker s_HoverEnterMarker = new ProfilerMarker("XRI.HoverEnter"); private static readonly ProfilerMarker s_HoverExitMarker = new ProfilerMarker("XRI.HoverExit"); public List startingHoverFilters { get { return m_StartingHoverFilters; } set { m_StartingHoverFilters = value; } } public IXRFilterList hoverFilters => m_HoverFilters; public List startingSelectFilters { get { return m_StartingSelectFilters; } set { m_StartingSelectFilters = value; } } public IXRFilterList selectFilters => m_SelectFilters; public IXRFocusInteractable lastFocused { get; protected set; } internal static List activeInteractionManagers { get; } = new List(); public event Action interactionGroupRegistered; public event Action interactionGroupUnregistered; public event Action interactorRegistered; public event Action interactorUnregistered; public event Action interactableRegistered; public event Action interactableUnregistered; public event Action focusGained; public event Action focusLost; protected virtual void Awake() { m_HoverFilters.RegisterReferences(m_StartingHoverFilters, (Object)(object)this); m_SelectFilters.RegisterReferences(m_StartingSelectFilters, (Object)(object)this); } protected virtual void OnEnable() { //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Expected O, but got Unknown if (activeInteractionManagers.Count > 0) { Debug.LogWarning((object)"There are multiple active and enabled XR Interaction Manager components in the loaded scenes. This is supported, but may not be intended since interactors and interactables are not able to interact with those registered to a different manager. You can use the Window > Analysis > XR Interaction Debugger window to verify the interactors and interactables registered with each.", (Object)(object)this); } activeInteractionManagers.Add(this); Application.onBeforeRender += new UnityAction(OnBeforeRender); } protected virtual void OnDisable() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Expected O, but got Unknown Application.onBeforeRender -= new UnityAction(OnBeforeRender); activeInteractionManagers.Remove(this); ClearPriorityForSelectionMap(); } protected unsafe virtual void Update() { //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_0011: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0019: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0075: Unknown result type (might be due to invalid IL or missing references) //IL_008d: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_024b: Unknown result type (might be due to invalid IL or missing references) //IL_0250: Unknown result type (might be due to invalid IL or missing references) //IL_0253: Unknown result type (might be due to invalid IL or missing references) //IL_0258: Unknown result type (might be due to invalid IL or missing references) //IL_010e: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_0270: Unknown result type (might be due to invalid IL or missing references) //IL_0275: Unknown result type (might be due to invalid IL or missing references) //IL_0278: Unknown result type (might be due to invalid IL or missing references) //IL_027d: Unknown result type (might be due to invalid IL or missing references) //IL_0161: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_0169: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_0295: Unknown result type (might be due to invalid IL or missing references) //IL_029a: Unknown result type (might be due to invalid IL or missing references) //IL_029d: Unknown result type (might be due to invalid IL or missing references) //IL_02a2: Unknown result type (might be due to invalid IL or missing references) //IL_0191: Unknown result type (might be due to invalid IL or missing references) //IL_0196: Unknown result type (might be due to invalid IL or missing references) //IL_0199: Unknown result type (might be due to invalid IL or missing references) //IL_019e: Unknown result type (might be due to invalid IL or missing references) //IL_01c7: Unknown result type (might be due to invalid IL or missing references) //IL_01cc: Unknown result type (might be due to invalid IL or missing references) //IL_01cf: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01fd: Unknown result type (might be due to invalid IL or missing references) //IL_0202: Unknown result type (might be due to invalid IL or missing references) //IL_0205: Unknown result type (might be due to invalid IL or missing references) //IL_020a: Unknown result type (might be due to invalid IL or missing references) ClearPriorityForSelectionMap(); FlushRegistration(); ProfilerMarker val = s_PreprocessInteractorsMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { PreprocessInteractors(XRInteractionUpdateOrder.UpdatePhase.Dynamic); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } foreach (IXRInteractionGroup item in m_InteractionGroups.registeredSnapshot) { if (m_InteractionGroups.IsStillRegistered(item) && !m_GroupsInGroup.Contains(item)) { val = s_EvaluateInvalidFocusMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ClearInteractionGroupFocusInternal(item); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } val = s_UpdateGroupMemberInteractionsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { item.UpdateGroupMemberInteractions(); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } } foreach (IXRInteractor item2 in m_Interactors.registeredSnapshot) { if (!m_Interactors.IsStillRegistered(item2) || m_InteractorsInGroup.Contains(item2)) { continue; } val = s_GetValidTargetsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { GetValidTargets(item2, m_ValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } GetOfType(m_ValidTargets, m_DeprecatedValidTargets); IXRSelectInteractor iXRSelectInteractor = item2 as IXRSelectInteractor; IXRHoverInteractor iXRHoverInteractor = item2 as IXRHoverInteractor; if (iXRSelectInteractor != null) { val = s_EvaluateInvalidSelectionsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ClearInteractorSelectionInternal(iXRSelectInteractor, m_ValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } if (iXRHoverInteractor != null) { val = s_EvaluateInvalidHoversMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ClearInteractorHoverInternal(iXRHoverInteractor, m_ValidTargets, m_DeprecatedValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } if (iXRSelectInteractor != null) { val = s_EvaluateValidSelectionsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { InteractorSelectValidTargetsInternal(iXRSelectInteractor, m_ValidTargets, m_DeprecatedValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } if (iXRHoverInteractor != null) { val = s_EvaluateValidHoversMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { InteractorHoverValidTargetsInternal(iXRHoverInteractor, m_ValidTargets, m_DeprecatedValidTargets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } } val = s_ProcessInteractionStrengthMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase.Dynamic); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } val = s_ProcessInteractorsMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractors(XRInteractionUpdateOrder.UpdatePhase.Dynamic); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } val = s_ProcessInteractablesMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractables(XRInteractionUpdateOrder.UpdatePhase.Dynamic); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } protected unsafe virtual void LateUpdate() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) FlushRegistration(); ProfilerMarker val = s_ProcessInteractorsMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractors(XRInteractionUpdateOrder.UpdatePhase.Late); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } val = s_ProcessInteractablesMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractables(XRInteractionUpdateOrder.UpdatePhase.Late); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } protected unsafe virtual void FixedUpdate() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) FlushRegistration(); ProfilerMarker val = s_ProcessInteractorsMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractors(XRInteractionUpdateOrder.UpdatePhase.Fixed); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } val = s_ProcessInteractablesMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractables(XRInteractionUpdateOrder.UpdatePhase.Fixed); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } [BeforeRenderOrder(100)] protected unsafe virtual void OnBeforeRender() { //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_000b: Unknown result type (might be due to invalid IL or missing references) //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0033: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) FlushRegistration(); ProfilerMarker val = s_ProcessInteractorsMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractors(XRInteractionUpdateOrder.UpdatePhase.OnBeforeRender); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } val = s_ProcessInteractablesMarker; val2 = ((ProfilerMarker)(ref val)).Auto(); try { ProcessInteractables(XRInteractionUpdateOrder.UpdatePhase.OnBeforeRender); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } protected virtual void PreprocessInteractors(XRInteractionUpdateOrder.UpdatePhase updatePhase) { foreach (IXRInteractionGroup item in m_InteractionGroups.registeredSnapshot) { if (m_InteractionGroups.IsStillRegistered(item) && !m_GroupsInGroup.Contains(item)) { item.PreprocessGroupMembers(updatePhase); } } foreach (IXRInteractor item2 in m_Interactors.registeredSnapshot) { if (m_Interactors.IsStillRegistered(item2) && !m_InteractorsInGroup.Contains(item2)) { item2.PreprocessInteractor(updatePhase); } } } protected virtual void ProcessInteractors(XRInteractionUpdateOrder.UpdatePhase updatePhase) { foreach (IXRInteractionGroup item in m_InteractionGroups.registeredSnapshot) { if (m_InteractionGroups.IsStillRegistered(item) && !m_GroupsInGroup.Contains(item)) { item.ProcessGroupMembers(updatePhase); } } foreach (IXRInteractor item2 in m_Interactors.registeredSnapshot) { if (m_Interactors.IsStillRegistered(item2) && !m_InteractorsInGroup.Contains(item2)) { item2.ProcessInteractor(updatePhase); } } } protected virtual void ProcessInteractables(XRInteractionUpdateOrder.UpdatePhase updatePhase) { foreach (IXRInteractable item in m_Interactables.registeredSnapshot) { if (m_Interactables.IsStillRegistered(item)) { item.ProcessInteractable(updatePhase); } } } protected virtual void ProcessInteractionStrength(XRInteractionUpdateOrder.UpdatePhase updatePhase) { foreach (IXRInteractable item in m_Interactables.registeredSnapshot) { if (m_Interactables.IsStillRegistered(item) && item is IXRInteractionStrengthInteractable iXRInteractionStrengthInteractable) { iXRInteractionStrengthInteractable.ProcessInteractionStrength(updatePhase); } } foreach (IXRInteractor item2 in m_Interactors.registeredSnapshot) { if (m_Interactors.IsStillRegistered(item2) && item2 is IXRInteractionStrengthInteractor iXRInteractionStrengthInteractor) { iXRInteractionStrengthInteractor.ProcessInteractionStrength(updatePhase); } } } public virtual bool CanHover(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { if (interactor.isHoverActive) { return IsHoverPossible(interactor, interactable); } return false; } public bool IsHoverPossible(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { if (HasInteractionLayerOverlap(interactor, interactable) && ProcessHoverFilters(interactor, interactable) && interactor.CanHover(interactable)) { return interactable.IsHoverableBy(interactor); } return false; } public virtual bool CanSelect(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (interactor.isSelectActive) { return IsSelectPossible(interactor, interactable); } return false; } public bool IsSelectPossible(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (HasInteractionLayerOverlap(interactor, interactable) && ProcessSelectFilters(interactor, interactable) && interactor.CanSelect(interactable)) { return interactable.IsSelectableBy(interactor); } return false; } public virtual bool CanFocus(IXRInteractor interactor, IXRFocusInteractable interactable) { return IsFocusPossible(interactor, interactable); } public bool IsFocusPossible(IXRInteractor interactor, IXRFocusInteractable interactable) { if (interactable.canFocus) { return HasInteractionLayerOverlap(interactor, interactable); } return false; } public virtual void RegisterInteractionGroup(IXRInteractionGroup interactionGroup) { IXRInteractionGroup iXRInteractionGroup = null; if (interactionGroup is IXRGroupMember iXRGroupMember) { iXRInteractionGroup = iXRGroupMember.containingGroup; } if (iXRInteractionGroup != null && !IsRegistered(iXRInteractionGroup)) { Debug.LogError((object)($"Cannot register {interactionGroup} with Interaction Manager before its containing " + "Interaction Group is registered."), (Object)(object)this); } else if (m_InteractionGroups.Register(interactionGroup)) { if (iXRInteractionGroup != null) { m_GroupsInGroup.Add(interactionGroup); } InteractionGroupRegisteredEventArgs v; using (m_InteractionGroupRegisteredEventArgs.Get(out v)) { v.manager = this; v.interactionGroupObject = interactionGroup; v.containingGroupObject = iXRInteractionGroup; OnRegistered(v); } } } protected virtual void OnRegistered(InteractionGroupRegisteredEventArgs args) { args.interactionGroupObject.OnRegistered(args); this.interactionGroupRegistered?.Invoke(args); } public virtual void UnregisterInteractionGroup(IXRInteractionGroup interactionGroup) { if (!IsRegistered(interactionGroup)) { return; } interactionGroup.OnBeforeUnregistered(); if (m_InteractionGroups.flushedCount > 0) { m_InteractionGroups.GetRegisteredItems(m_ScratchInteractionGroups); foreach (IXRInteractionGroup scratchInteractionGroup in m_ScratchInteractionGroups) { if (scratchInteractionGroup is IXRGroupMember iXRGroupMember && iXRGroupMember.containingGroup == interactionGroup) { Debug.LogError((object)($"Cannot unregister {interactionGroup} with Interaction Manager before its " + "Group Members have been re-registered as not part of the Group."), (Object)(object)this); return; } } } if (m_Interactors.flushedCount > 0) { m_Interactors.GetRegisteredItems(m_ScratchInteractors); foreach (IXRInteractor scratchInteractor in m_ScratchInteractors) { if (scratchInteractor is IXRGroupMember iXRGroupMember2 && iXRGroupMember2.containingGroup == interactionGroup) { Debug.LogError((object)($"Cannot unregister {interactionGroup} with Interaction Manager before its " + "Group Members have been re-registered as not part of the Group."), (Object)(object)this); return; } } } if (!m_InteractionGroups.Unregister(interactionGroup)) { return; } m_GroupsInGroup.Remove(interactionGroup); InteractionGroupUnregisteredEventArgs v; using (m_InteractionGroupUnregisteredEventArgs.Get(out v)) { v.manager = this; v.interactionGroupObject = interactionGroup; OnUnregistered(v); } } protected virtual void OnUnregistered(InteractionGroupUnregisteredEventArgs args) { args.interactionGroupObject.OnUnregistered(args); this.interactionGroupUnregistered?.Invoke(args); } public void GetInteractionGroups(List interactionGroups) { m_InteractionGroups.GetRegisteredItems(interactionGroups); } public IXRInteractionGroup GetInteractionGroup(string groupName) { foreach (IXRInteractionGroup item in m_InteractionGroups.registeredSnapshot) { if (item.groupName == groupName) { return item; } } return null; } public virtual void RegisterInteractor(IXRInteractor interactor) { IXRInteractionGroup iXRInteractionGroup = null; if (interactor is IXRGroupMember iXRGroupMember) { iXRInteractionGroup = iXRGroupMember.containingGroup; } if (iXRInteractionGroup != null && !IsRegistered(iXRInteractionGroup)) { Debug.LogError((object)($"Cannot register {interactor} with Interaction Manager before its containing " + "Interaction Group is registered."), (Object)(object)this); } else if (m_Interactors.Register(interactor)) { if (iXRInteractionGroup != null) { m_InteractorsInGroup.Add(interactor); } InteractorRegisteredEventArgs v; using (m_InteractorRegisteredEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.containingGroupObject = iXRInteractionGroup; OnRegistered(v); } } } protected virtual void OnRegistered(InteractorRegisteredEventArgs args) { args.interactorObject.OnRegistered(args); this.interactorRegistered?.Invoke(args); } public virtual void UnregisterInteractor(IXRInteractor interactor) { if (!IsRegistered(interactor)) { return; } Transform transform = interactor.transform; if ((Object)(object)transform == (Object)null || ((Component)transform).gameObject.activeSelf) { CancelInteractorFocusInternal(interactor); } if (interactor is IXRSelectInteractor interactor2) { CancelInteractorSelectionInternal(interactor2); } if (interactor is IXRHoverInteractor interactor3) { CancelInteractorHoverInternal(interactor3); } if (!m_Interactors.Unregister(interactor)) { return; } m_InteractorsInGroup.Remove(interactor); InteractorUnregisteredEventArgs v; using (m_InteractorUnregisteredEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; OnUnregistered(v); } } protected virtual void OnUnregistered(InteractorUnregisteredEventArgs args) { args.interactorObject.OnUnregistered(args); this.interactorUnregistered?.Invoke(args); } public virtual void RegisterInteractable(IXRInteractable interactable) { if (!m_Interactables.Register(interactable)) { return; } foreach (Collider collider in interactable.colliders) { if (!((Object)(object)collider == (Object)null)) { if (!m_ColliderToInteractableMap.TryGetValue(collider, out var value)) { m_ColliderToInteractableMap.Add(collider, interactable); } else { Debug.LogWarning((object)("A collider used by an Interactable object is already registered with another Interactable object." + $" The {collider} will remain associated with {value}, which was registered before {interactable}." + " The value returned by XRInteractionManager.TryGetInteractableForCollider will be the first association."), (Object)((interactable is Object) ? interactable : null)); } } } InteractableRegisteredEventArgs v; using (m_InteractableRegisteredEventArgs.Get(out v)) { v.manager = this; v.interactableObject = interactable; OnRegistered(v); } } protected virtual void OnRegistered(InteractableRegisteredEventArgs args) { args.interactableObject.OnRegistered(args); this.interactableRegistered?.Invoke(args); } public virtual void UnregisterInteractable(IXRInteractable interactable) { if (!IsRegistered(interactable)) { return; } if (interactable is IXRFocusInteractable interactable2) { CancelInteractableFocusInternal(interactable2); } if (interactable is IXRSelectInteractable interactable3) { CancelInteractableSelectionInternal(interactable3); } if (interactable is IXRHoverInteractable interactable4) { CancelInteractableHoverInternal(interactable4); } if (!m_Interactables.Unregister(interactable)) { return; } foreach (Collider collider in interactable.colliders) { if (!((Object)(object)collider == (Object)null) && m_ColliderToInteractableMap.TryGetValue(collider, out var value) && value == interactable) { m_ColliderToInteractableMap.Remove(collider); } } InteractableUnregisteredEventArgs v; using (m_InteractableUnregisteredEventArgs.Get(out v)) { v.manager = this; v.interactableObject = interactable; OnUnregistered(v); } } protected virtual void OnUnregistered(InteractableUnregisteredEventArgs args) { args.interactableObject.OnUnregistered(args); this.interactableUnregistered?.Invoke(args); } public void RegisterSnapVolume(XRInteractableSnapVolume snapVolume) { if ((Object)(object)snapVolume == (Object)null) { return; } Collider snapCollider = snapVolume.snapCollider; if (!((Object)(object)snapCollider == (Object)null)) { if (!m_ColliderToSnapVolumes.TryGetValue(snapCollider, out var value)) { m_ColliderToSnapVolumes.Add(snapCollider, snapVolume); } else { Debug.LogWarning((object)("A collider used by a snap volume component is already registered with another snap volume component." + $" The {snapCollider} will remain associated with {value}, which was registered before {snapVolume}." + " The value returned by XRInteractionManager.TryGetInteractableForCollider will be the first association."), (Object)(object)snapVolume); } } } public void UnregisterSnapVolume(XRInteractableSnapVolume snapVolume) { if (!((Object)(object)snapVolume == (Object)null)) { Collider snapCollider = snapVolume.snapCollider; if (!((Object)(object)snapCollider == (Object)null) && m_ColliderToSnapVolumes.TryGetValue(snapCollider, out var value) && (Object)(object)value == (Object)(object)snapVolume) { m_ColliderToSnapVolumes.Remove(snapCollider); } } } public void GetRegisteredInteractionGroups(List results) { if (results == null) { throw new ArgumentNullException("results"); } m_InteractionGroups.GetRegisteredItems(results); } public void GetRegisteredInteractors(List results) { if (results == null) { throw new ArgumentNullException("results"); } m_Interactors.GetRegisteredItems(results); } public void GetRegisteredInteractables(List results) { if (results == null) { throw new ArgumentNullException("results"); } m_Interactables.GetRegisteredItems(results); } public bool IsRegistered(IXRInteractionGroup interactionGroup) { return m_InteractionGroups.IsRegistered(interactionGroup); } public bool IsRegistered(IXRInteractor interactor) { return m_Interactors.IsRegistered(interactor); } public bool IsRegistered(IXRInteractable interactable) { return m_Interactables.IsRegistered(interactable); } public bool TryGetInteractableForCollider(Collider interactableCollider, out IXRInteractable interactable) { interactable = null; if ((Object)(object)interactableCollider == (Object)null) { return false; } if (!m_ColliderToInteractableMap.TryGetValue(interactableCollider, out interactable) && m_ColliderToSnapVolumes.TryGetValue(interactableCollider, out var value) && (Object)(object)value != (Object)null) { interactable = value.interactable; } if (interactable != null) { IXRInteractable obj = interactable; Object val = (Object)((obj is Object) ? obj : null); if (val != null) { return val != (Object)null; } return true; } return false; } public bool TryGetInteractableForCollider(Collider interactableCollider, out IXRInteractable interactable, out XRInteractableSnapVolume snapVolume) { interactable = null; snapVolume = null; if ((Object)(object)interactableCollider == (Object)null) { return false; } bool flag = m_ColliderToInteractableMap.TryGetValue(interactableCollider, out interactable); if (m_ColliderToSnapVolumes.TryGetValue(interactableCollider, out snapVolume) && (Object)(object)snapVolume != (Object)null) { if (flag) { if (snapVolume.interactable != interactable) { snapVolume = null; } } else { interactable = snapVolume.interactable; } } if (interactable != null) { IXRInteractable obj = interactable; Object val = (Object)((obj is Object) ? obj : null); if (val != null) { return val != (Object)null; } return true; } return false; } public bool IsHighestPriorityTarget(IXRSelectInteractable target, List interactors = null) { if (!m_HighestPriorityTargetMap.TryGetValue(target, out var value)) { return false; } if (interactors == null) { return true; } interactors.Clear(); interactors.AddRange(value); return true; } public unsafe void GetValidTargets(IXRInteractor interactor, List targets) { //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005e: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) targets.Clear(); interactor.GetValidTargets(targets); if (interactor is XRBaseInteractor xRBaseInteractor) { m_DeprecatedValidTargets.Clear(); GetOfType(targets, m_DeprecatedValidTargets); if (targets.Count == m_DeprecatedValidTargets.Count) { xRBaseInteractor.GetValidTargets(m_DeprecatedValidTargets); GetOfType(m_DeprecatedValidTargets, targets); } } ProfilerMarker val = s_FilterRegisteredValidTargetsMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { RemoveAllUnregistered(this, targets); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } internal static int RemoveAllUnregistered(XRInteractionManager manager, List interactables) { int num = 0; for (int num2 = interactables.Count - 1; num2 >= 0; num2--) { if (!manager.m_Interactables.IsRegistered(interactables[num2])) { interactables.RemoveAt(num2); num++; } } return num; } protected virtual void ClearInteractionGroupFocus(IXRInteractionGroup interactionGroup) { IXRInteractor focusInteractor = interactionGroup.focusInteractor; IXRFocusInteractable focusInteractable = interactionGroup.focusInteractable; if (focusInteractor != null && focusInteractable != null) { bool flag = false; IXRSelectInteractor iXRSelectInteractor = focusInteractor as IXRSelectInteractor; IXRSelectInteractable interactable = focusInteractable as IXRSelectInteractable; if (iXRSelectInteractor != null) { flag = iXRSelectInteractor.isSelectActive && !iXRSelectInteractor.IsSelecting(interactable); } if (flag || !CanFocus(focusInteractor, focusInteractable)) { FocusExitInternal(interactionGroup, interactionGroup.focusInteractable); } } } internal void ClearInteractionGroupFocusInternal(IXRInteractionGroup interactionGroup) { ClearInteractionGroupFocus(interactionGroup); } private void CancelInteractorFocusInternal(IXRInteractor interactor) { IXRInteractionGroup iXRInteractionGroup = (interactor as IXRGroupMember)?.containingGroup; if (iXRInteractionGroup != null && iXRInteractionGroup.focusInteractable != null) { FocusCancelInternal(iXRInteractionGroup, iXRInteractionGroup.focusInteractable); } } public virtual void CancelInteractableFocus(IXRFocusInteractable interactable) { for (int num = interactable.interactionGroupsFocusing.Count - 1; num >= 0; num--) { FocusCancelInternal(interactable.interactionGroupsFocusing[num], interactable); } } private void CancelInteractableFocusInternal(IXRFocusInteractable interactable) { CancelInteractableFocus(interactable); } protected virtual void ClearInteractorSelection(IXRSelectInteractor interactor, List validTargets) { if (interactor.interactablesSelected.Count == 0) { return; } m_CurrentSelected.Clear(); m_CurrentSelected.AddRange(interactor.interactablesSelected); m_UnorderedValidTargets.Clear(); if (validTargets.Count > 0) { foreach (IXRInteractable validTarget in validTargets) { m_UnorderedValidTargets.Add(validTarget); } } for (int num = m_CurrentSelected.Count - 1; num >= 0; num--) { IXRSelectInteractable iXRSelectInteractable = m_CurrentSelected[num]; if (!CanSelect(interactor, iXRSelectInteractable) || (!interactor.keepSelectedTargetValid && !m_UnorderedValidTargets.Contains(iXRSelectInteractable))) { SelectExitInternal(interactor, iXRSelectInteractable); } } } internal void ClearInteractorSelectionInternal(IXRSelectInteractor interactor, List validTargets) { ClearInteractorSelection(interactor, validTargets); if (interactor is XRBaseInteractor interactor2) { ClearInteractorSelection(interactor2); } } public virtual void CancelInteractorSelection(IXRSelectInteractor interactor) { for (int num = interactor.interactablesSelected.Count - 1; num >= 0; num--) { SelectCancelInternal(interactor, interactor.interactablesSelected[num]); } } private void CancelInteractorSelectionInternal(IXRSelectInteractor interactor) { if (interactor is XRBaseInteractor interactor2) { CancelInteractorSelection(interactor2); } else { CancelInteractorSelection(interactor); } } public virtual void CancelInteractableSelection(IXRSelectInteractable interactable) { for (int num = interactable.interactorsSelecting.Count - 1; num >= 0; num--) { SelectCancelInternal(interactable.interactorsSelecting[num], interactable); } } private void CancelInteractableSelectionInternal(IXRSelectInteractable interactable) { if (interactable is XRBaseInteractable interactable2) { CancelInteractableSelection(interactable2); } else { CancelInteractableSelection(interactable); } } protected virtual void ClearInteractorHover(IXRHoverInteractor interactor, List validTargets) { if (interactor.interactablesHovered.Count == 0) { return; } m_CurrentHovered.Clear(); m_CurrentHovered.AddRange(interactor.interactablesHovered); m_UnorderedValidTargets.Clear(); if (validTargets.Count > 0) { foreach (IXRInteractable validTarget in validTargets) { m_UnorderedValidTargets.Add(validTarget); } } for (int num = m_CurrentHovered.Count - 1; num >= 0; num--) { IXRHoverInteractable iXRHoverInteractable = m_CurrentHovered[num]; if (!CanHover(interactor, iXRHoverInteractable) || !m_UnorderedValidTargets.Contains(iXRHoverInteractable)) { HoverExitInternal(interactor, iXRHoverInteractable); } } } internal void ClearInteractorHoverInternal(IXRHoverInteractor interactor, List validTargets, List deprecatedValidTargets) { ClearInteractorHover(interactor, validTargets); if (interactor is XRBaseInteractor interactor2) { ClearInteractorHover(interactor2, deprecatedValidTargets); } } public virtual void CancelInteractorHover(IXRHoverInteractor interactor) { for (int num = interactor.interactablesHovered.Count - 1; num >= 0; num--) { HoverCancelInternal(interactor, interactor.interactablesHovered[num]); } } private void CancelInteractorHoverInternal(IXRHoverInteractor interactor) { if (interactor is XRBaseInteractor interactor2) { CancelInteractorHover(interactor2); } else { CancelInteractorHover(interactor); } } public virtual void CancelInteractableHover(IXRHoverInteractable interactable) { for (int num = interactable.interactorsHovering.Count - 1; num >= 0; num--) { HoverCancelInternal(interactable.interactorsHovering[num], interactable); } } private void CancelInteractableHoverInternal(IXRHoverInteractable interactable) { if (interactable is XRBaseInteractable interactable2) { CancelInteractableHover(interactable2); } else { CancelInteractableHover(interactable); } } public virtual void FocusEnter(IXRInteractor interactor, IXRFocusInteractable interactable) { IXRInteractionGroup iXRInteractionGroup = (interactor as IXRGroupMember)?.containingGroup; if (iXRInteractionGroup == null || !CanFocus(interactor, interactable) || (interactable.isFocused && !ResolveExistingFocus(iXRInteractionGroup, interactable))) { return; } FocusEnterEventArgs v; using (m_FocusEnterEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; v.interactionGroup = iXRInteractionGroup; FocusEnterInternal(iXRInteractionGroup, interactable, v); } } public virtual void FocusExit(IXRInteractionGroup group, IXRFocusInteractable interactable) { IXRInteractor focusInteractor = group.focusInteractor; FocusExitEventArgs v; using (m_FocusExitEventArgs.Get(out v)) { v.manager = this; v.interactorObject = focusInteractor; v.interactableObject = interactable; v.interactionGroup = group; v.isCanceled = false; FocusExitInternal(group, interactable, v); } } internal void FocusExitInternal(IXRInteractionGroup group, IXRFocusInteractable interactable) { FocusExit(group, interactable); } public virtual void FocusCancel(IXRInteractionGroup group, IXRFocusInteractable interactable) { FocusExitEventArgs v; using (m_FocusExitEventArgs.Get(out v)) { v.manager = this; v.interactorObject = group.focusInteractor; v.interactableObject = interactable; v.interactionGroup = group; v.isCanceled = true; FocusExitInternal(group, interactable, v); } } private void FocusCancelInternal(IXRInteractionGroup group, IXRFocusInteractable interactable) { FocusCancel(group, interactable); } public virtual void SelectEnter(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (!interactable.isSelected || ResolveExistingSelect(interactor, interactable)) { SelectEnterEventArgs v; using (m_SelectEnterEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; SelectEnterInternal(interactor, interactable, v); } if (interactable is IXRFocusInteractable interactable2) { FocusEnter(interactor, interactable2); } } } private void SelectEnterInternal(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { SelectEnter(interactor2, interactable2); } else { SelectEnter(interactor, interactable); } } public virtual void SelectExit(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { SelectExitEventArgs v; using (m_SelectExitEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; v.isCanceled = false; SelectExitInternal(interactor, interactable, v); } } internal void SelectExitInternal(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { SelectExit(interactor2, interactable2); } else { SelectExit(interactor, interactable); } } public virtual void SelectCancel(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { SelectExitEventArgs v; using (m_SelectExitEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; v.isCanceled = true; SelectExitInternal(interactor, interactable, v); } } private void SelectCancelInternal(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { SelectCancel(interactor2, interactable2); } else { SelectCancel(interactor, interactable); } } public virtual void HoverEnter(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { HoverEnterEventArgs v; using (m_HoverEnterEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; HoverEnterInternal(interactor, interactable, v); } } private void HoverEnterInternal(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { HoverEnter(interactor2, interactable2); } else { HoverEnter(interactor, interactable); } } public virtual void HoverExit(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { HoverExitEventArgs v; using (m_HoverExitEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; v.isCanceled = false; HoverExitInternal(interactor, interactable, v); } } internal void HoverExitInternal(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { HoverExit(interactor2, interactable2); } else { HoverExit(interactor, interactable); } } public virtual void HoverCancel(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { HoverExitEventArgs v; using (m_HoverExitEventArgs.Get(out v)) { v.manager = this; v.interactorObject = interactor; v.interactableObject = interactable; v.isCanceled = true; HoverExitInternal(interactor, interactable, v); } } private void HoverCancelInternal(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { HoverCancel(interactor2, interactable2); } else { HoverCancel(interactor, interactable); } } protected unsafe virtual void FocusEnter(IXRInteractionGroup group, IXRFocusInteractable interactable, FocusEnterEventArgs args) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) args.manager = this; ProfilerMarker val = s_FocusEnterMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { group.OnFocusEntering(args); interactable.OnFocusEntering(args); interactable.OnFocusEntered(args); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } lastFocused = interactable; this.focusGained?.Invoke(args); } private void FocusEnterInternal(IXRInteractionGroup group, IXRFocusInteractable interactable, FocusEnterEventArgs args) { FocusEnter(group, interactable, args); } protected unsafe virtual void FocusExit(IXRInteractionGroup group, IXRFocusInteractable interactable, FocusExitEventArgs args) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) args.manager = this; ProfilerMarker val = s_FocusExitMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { group.OnFocusExiting(args); interactable.OnFocusExiting(args); interactable.OnFocusExited(args); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } if (interactable == lastFocused) { lastFocused = null; } this.focusLost?.Invoke(args); } private void FocusExitInternal(IXRInteractionGroup group, IXRFocusInteractable interactable, FocusExitEventArgs args) { FocusExit(group, interactable, args); } protected unsafe virtual void SelectEnter(IXRSelectInteractor interactor, IXRSelectInteractable interactable, SelectEnterEventArgs args) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) args.manager = this; ProfilerMarker val = s_SelectEnterMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { interactor.OnSelectEntering(args); interactable.OnSelectEntering(args); interactor.OnSelectEntered(args); interactable.OnSelectEntered(args); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } private void SelectEnterInternal(IXRSelectInteractor interactor, IXRSelectInteractable interactable, SelectEnterEventArgs args) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { SelectEnter(interactor2, interactable2, args); } else { SelectEnter(interactor, interactable, args); } } protected unsafe virtual void SelectExit(IXRSelectInteractor interactor, IXRSelectInteractable interactable, SelectExitEventArgs args) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) args.manager = this; ProfilerMarker val = s_SelectExitMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { interactor.OnSelectExiting(args); interactable.OnSelectExiting(args); interactor.OnSelectExited(args); interactable.OnSelectExited(args); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } private void SelectExitInternal(IXRSelectInteractor interactor, IXRSelectInteractable interactable, SelectExitEventArgs args) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { SelectExit(interactor2, interactable2, args); } else { SelectExit(interactor, interactable, args); } } protected unsafe virtual void HoverEnter(IXRHoverInteractor interactor, IXRHoverInteractable interactable, HoverEnterEventArgs args) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) args.manager = this; ProfilerMarker val = s_HoverEnterMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { interactor.OnHoverEntering(args); interactable.OnHoverEntering(args); interactor.OnHoverEntered(args); interactable.OnHoverEntered(args); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } private void HoverEnterInternal(IXRHoverInteractor interactor, IXRHoverInteractable interactable, HoverEnterEventArgs args) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { HoverEnter(interactor2, interactable2, args); } else { HoverEnter(interactor, interactable, args); } } protected unsafe virtual void HoverExit(IXRHoverInteractor interactor, IXRHoverInteractable interactable, HoverExitEventArgs args) { //IL_0007: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) args.manager = this; ProfilerMarker val = s_HoverExitMarker; AutoScope val2 = ((ProfilerMarker)(ref val)).Auto(); try { interactor.OnHoverExiting(args); interactable.OnHoverExiting(args); interactor.OnHoverExited(args); interactable.OnHoverExited(args); } finally { ((IDisposable)(*(AutoScope*)(&val2))/*cast due to .constrained prefix*/).Dispose(); } } private void HoverExitInternal(IXRHoverInteractor interactor, IXRHoverInteractable interactable, HoverExitEventArgs args) { if (interactor is XRBaseInteractor interactor2 && interactable is XRBaseInteractable interactable2) { HoverExit(interactor2, interactable2, args); } else { HoverExit(interactor, interactable, args); } } protected virtual void InteractorSelectValidTargets(IXRSelectInteractor interactor, List validTargets) { if (validTargets.Count == 0) { return; } IXRTargetPriorityInteractor iXRTargetPriorityInteractor = interactor as IXRTargetPriorityInteractor; TargetPriorityMode targetPriorityMode = TargetPriorityMode.None; if (iXRTargetPriorityInteractor != null) { targetPriorityMode = iXRTargetPriorityInteractor.targetPriorityMode; } bool flag = false; foreach (IXRInteractable validTarget in validTargets) { if (!(validTarget is IXRSelectInteractable iXRSelectInteractable)) { continue; } if (targetPriorityMode == TargetPriorityMode.None || (targetPriorityMode == TargetPriorityMode.HighestPriorityOnly && flag)) { if (CanSelect(interactor, iXRSelectInteractable)) { SelectEnterInternal(interactor, iXRSelectInteractable); } } else { if (!IsSelectPossible(interactor, iXRSelectInteractable)) { continue; } if (!flag) { flag = true; if (!m_HighestPriorityTargetMap.TryGetValue(iXRSelectInteractable, out var value)) { value = s_TargetPriorityInteractorListPool.Get(); m_HighestPriorityTargetMap[iXRSelectInteractable] = value; } value.Add(iXRTargetPriorityInteractor); } iXRTargetPriorityInteractor.targetsForSelection?.Add(iXRSelectInteractable); if (interactor.isSelectActive) { SelectEnterInternal(interactor, iXRSelectInteractable); } } } } internal void InteractorSelectValidTargetsInternal(IXRSelectInteractor interactor, List validTargets, List deprecatedValidTargets) { InteractorSelectValidTargets(interactor, validTargets); if (interactor is XRBaseInteractor interactor2) { InteractorSelectValidTargets(interactor2, deprecatedValidTargets); } } protected virtual void InteractorHoverValidTargets(IXRHoverInteractor interactor, List validTargets) { if (validTargets.Count == 0) { return; } foreach (IXRInteractable validTarget in validTargets) { if (validTarget is IXRHoverInteractable interactable && CanHover(interactor, interactable) && !interactor.IsHovering(interactable)) { HoverEnterInternal(interactor, interactable); } } } internal void InteractorHoverValidTargetsInternal(IXRHoverInteractor interactor, List validTargets, List deprecatedValidTargets) { InteractorHoverValidTargets(interactor, validTargets); if (interactor is XRBaseInteractor interactor2) { InteractorHoverValidTargets(interactor2, deprecatedValidTargets); } } protected virtual bool ResolveExistingFocus(IXRInteractionGroup interactionGroup, IXRFocusInteractable interactable) { if (interactionGroup.focusInteractable == interactable) { return false; } switch (interactable.focusMode) { case InteractableFocusMode.Single: ExitInteractableFocus(interactable); break; default: return false; case InteractableFocusMode.Multiple: break; } return true; } protected virtual bool ResolveExistingSelect(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { if (interactor.IsSelecting(interactable)) { return false; } if (interactor is XRBaseInteractor { requireSelectExclusive: not false }) { return false; } switch (interactable.selectMode) { case InteractableSelectMode.Single: ExitInteractableSelection(interactable); break; default: return false; case InteractableSelectMode.Multiple: break; } return true; } protected static bool HasInteractionLayerOverlap(IXRInteractor interactor, IXRInteractable interactable) { return ((int)interactor.interactionLayers & (int)interactable.interactionLayers) != 0; } protected bool ProcessHoverFilters(IXRHoverInteractor interactor, IXRHoverInteractable interactable) { return XRFilterUtility.Process(m_HoverFilters, interactor, interactable); } protected bool ProcessSelectFilters(IXRSelectInteractor interactor, IXRSelectInteractable interactable) { return XRFilterUtility.Process(m_SelectFilters, interactor, interactable); } private void ExitInteractableSelection(IXRSelectInteractable interactable) { for (int num = interactable.interactorsSelecting.Count - 1; num >= 0; num--) { SelectExitInternal(interactable.interactorsSelecting[num], interactable); } } private void ExitInteractableFocus(IXRFocusInteractable interactable) { for (int num = interactable.interactionGroupsFocusing.Count - 1; num >= 0; num--) { FocusExitInternal(interactable.interactionGroupsFocusing[num], interactable); } } private void ClearPriorityForSelectionMap() { if (m_HighestPriorityTargetMap.Count == 0) { return; } foreach (List value in m_HighestPriorityTargetMap.Values) { foreach (IXRTargetPriorityInteractor item in value) { item?.targetsForSelection?.Clear(); } s_TargetPriorityInteractorListPool.Release(value); } m_HighestPriorityTargetMap.Clear(); } private void FlushRegistration() { m_InteractionGroups.Flush(); m_Interactors.Flush(); m_Interactables.Flush(); } internal static void GetOfType(List source, List destination) { destination.Clear(); if (source.Count == 0) { return; } foreach (TSource item2 in source) { if (item2 is TDestination item) { destination.Add(item); } } } [Obsolete("RegisterInteractor(XRBaseInteractor) has been deprecated. Use RegisterInteractor(IXRInteractor) instead.")] public virtual void RegisterInteractor(XRBaseInteractor interactor) { RegisterInteractor((IXRInteractor)interactor); } [Obsolete("UnregisterInteractor(XRBaseInteractor) has been deprecated. Use UnregisterInteractor(IXRInteractor) instead.")] public virtual void UnregisterInteractor(XRBaseInteractor interactor) { UnregisterInteractor((IXRInteractor)interactor); } [Obsolete("RegisterInteractable(XRBaseInteractable) has been deprecated. Use RegisterInteractable(IXRInteractable) instead.")] public virtual void RegisterInteractable(XRBaseInteractable interactable) { RegisterInteractable((IXRInteractable)interactable); } [Obsolete("UnregisterInteractable(XRBaseInteractable) has been deprecated. Use UnregisterInteractable(IXRInteractable) instead.")] public virtual void UnregisterInteractable(XRBaseInteractable interactable) { UnregisterInteractable((IXRInteractable)interactable); } [Obsolete("GetRegisteredInteractors(List) has been deprecated. Use GetRegisteredInteractors(List) instead.")] public void GetRegisteredInteractors(List results) { GetRegisteredInteractors(m_ScratchInteractors); GetOfType(m_ScratchInteractors, results); } [Obsolete("GetRegisteredInteractables(List) has been deprecated. Use GetRegisteredInteractables(List) instead.")] public void GetRegisteredInteractables(List results) { GetRegisteredInteractables(m_ScratchInteractables); GetOfType(m_ScratchInteractables, results); } [Obsolete("IsRegistered(XRBaseInteractor) has been deprecated. Use IsRegistered(IXRInteractor) instead.")] public bool IsRegistered(XRBaseInteractor interactor) { return IsRegistered((IXRInteractor)interactor); } [Obsolete("IsRegistered(XRBaseInteractable) has been deprecated. Use IsRegistered(IXRInteractable) instead.")] public bool IsRegistered(XRBaseInteractable interactable) { return IsRegistered((IXRInteractable)interactable); } [Obsolete("TryGetInteractableForCollider has been deprecated. Use GetInteractableForCollider instead. (UnityUpgradable) -> GetInteractableForCollider(*)")] public XRBaseInteractable TryGetInteractableForCollider(Collider interactableCollider) { return GetInteractableForCollider(interactableCollider); } [Obsolete("GetInteractableForCollider has been deprecated. Use TryGetInteractableForCollider(Collider, out IXRInteractable) instead.")] public XRBaseInteractable GetInteractableForCollider(Collider interactableCollider) { if (TryGetInteractableForCollider(interactableCollider, out var interactable)) { return interactable as XRBaseInteractable; } return null; } [Obsolete("GetColliderToInteractableMap has been deprecated. The signature no longer matches the field used by the XRInteractionManager, so a copy is returned instead of a ref. Changes to the returned Dictionary will not be observed by the XRInteractionManager.", true)] public void GetColliderToInteractableMap(ref Dictionary map) { if (map == null) { return; } map.Clear(); foreach (KeyValuePair item in m_ColliderToInteractableMap) { if (item.Value is XRBaseInteractable value) { map.Add(item.Key, value); } } } [Obsolete("GetValidTargets(XRBaseInteractor, List) has been deprecated. Use GetValidTargets(IXRInteractor, List) instead.")] public List GetValidTargets(XRBaseInteractor interactor, List validTargets) { GetValidTargets(interactor, m_ScratchInteractables); GetOfType(m_ScratchInteractables, validTargets); return validTargets; } [Obsolete("ForceSelect(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use SelectEnter(IXRSelectInteractor, IXRSelectInteractable) instead.")] public void ForceSelect(XRBaseInteractor interactor, XRBaseInteractable interactable) { SelectEnter(interactor, interactable); } [Obsolete("ClearInteractorSelection(XRBaseInteractor) has been deprecated. Use ClearInteractorSelection(IXRSelectInteractor, List) instead.")] public virtual void ClearInteractorSelection(XRBaseInteractor interactor) { } [Obsolete("CancelInteractorSelection(XRBaseInteractor) has been deprecated. Use CancelInteractorSelection(IXRSelectInteractor) instead.")] public virtual void CancelInteractorSelection(XRBaseInteractor interactor) { CancelInteractorSelection((IXRSelectInteractor)interactor); } [Obsolete("CancelInteractableSelection(XRBaseInteractable) has been deprecated. Use CancelInteractableSelection(IXRSelectInteractable) instead.")] public virtual void CancelInteractableSelection(XRBaseInteractable interactable) { CancelInteractableSelection((IXRSelectInteractable)interactable); } [Obsolete("ClearInteractorHover(XRBaseInteractor, List) has been deprecated. Use ClearInteractorHover(IXRHoverInteractor, List) instead.")] public virtual void ClearInteractorHover(XRBaseInteractor interactor, List validTargets) { } [Obsolete("CancelInteractorHover(XRBaseInteractor) has been deprecated. Use CancelInteractorHover(IXRHoverInteractor) instead.")] public virtual void CancelInteractorHover(XRBaseInteractor interactor) { CancelInteractorHover((IXRHoverInteractor)interactor); } [Obsolete("CancelInteractableHover(XRBaseInteractable) has been deprecated. Use CancelInteractableHover(IXRHoverInteractable) instead.")] public virtual void CancelInteractableHover(XRBaseInteractable interactable) { CancelInteractableHover((IXRHoverInteractable)interactable); } [Obsolete("SelectEnter(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use SelectEnter(IXRSelectInteractor, IXRSelectInteractable) instead.")] public virtual void SelectEnter(XRBaseInteractor interactor, XRBaseInteractable interactable) { SelectEnter((IXRSelectInteractor)interactor, (IXRSelectInteractable)interactable); } [Obsolete("SelectExit(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use SelectExit(IXRSelectInteractor, IXRSelectInteractable) instead.")] public virtual void SelectExit(XRBaseInteractor interactor, XRBaseInteractable interactable) { SelectExit((IXRSelectInteractor)interactor, (IXRSelectInteractable)interactable); } [Obsolete("SelectCancel(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use SelectCancel(IXRSelectInteractor, IXRSelectInteractable) instead.")] public virtual void SelectCancel(XRBaseInteractor interactor, XRBaseInteractable interactable) { SelectCancel((IXRSelectInteractor)interactor, (IXRSelectInteractable)interactable); } [Obsolete("HoverEnter(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use HoverEnter(IXRHoverInteractor, IXRHoverInteractable) instead.")] public virtual void HoverEnter(XRBaseInteractor interactor, XRBaseInteractable interactable) { HoverEnter((IXRHoverInteractor)interactor, (IXRHoverInteractable)interactable); } [Obsolete("HoverExit(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use HoverExit(IXRHoverInteractor, IXRHoverInteractable) instead.")] public virtual void HoverExit(XRBaseInteractor interactor, XRBaseInteractable interactable) { HoverExit((IXRHoverInteractor)interactor, (IXRHoverInteractable)interactable); } [Obsolete("HoverCancel(XRBaseInteractor, XRBaseInteractable) has been deprecated. Use HoverCancel(IXRHoverInteractor, IXRHoverInteractable) instead.")] public virtual void HoverCancel(XRBaseInteractor interactor, XRBaseInteractable interactable) { HoverCancel((IXRHoverInteractor)interactor, (IXRHoverInteractable)interactable); } [Obsolete("SelectExit(XRBaseInteractor, XRBaseInteractable, SelectExitEventArgs) has been deprecated. Use SelectExit(IXRSelectInteractor, IXRSelectInteractable, SelectExitEventArgs) instead.")] protected virtual void SelectEnter(XRBaseInteractor interactor, XRBaseInteractable interactable, SelectEnterEventArgs args) { SelectEnter((IXRSelectInteractor)interactor, (IXRSelectInteractable)interactable, args); } [Obsolete("SelectExit(XRBaseInteractor, XRBaseInteractable, SelectExitEventArgs) has been deprecated. Use SelectExit(IXRSelectInteractor, IXRSelectInteractable, SelectExitEventArgs) instead.")] protected virtual void SelectExit(XRBaseInteractor interactor, XRBaseInteractable interactable, SelectExitEventArgs args) { SelectExit((IXRSelectInteractor)interactor, (IXRSelectInteractable)interactable, args); } [Obsolete("HoverEnter(XRBaseInteractor, XRBaseInteractable, HoverEnterEventArgs) has been deprecated. Use HoverEnter(IXRHoverInteractor, IXRHoverInteractable, HoverEnterEventArgs) instead.")] protected virtual void HoverEnter(XRBaseInteractor interactor, XRBaseInteractable interactable, HoverEnterEventArgs args) { HoverEnter((IXRHoverInteractor)interactor, (IXRHoverInteractable)interactable, args); } [Obsolete("HoverExit(XRBaseInteractor, XRBaseInteractable, HoverExitEventArgs) has been deprecated. Use HoverExit(IXRHoverInteractor, IXRHoverInteractable, HoverExitEventArgs) instead.")] protected virtual void HoverExit(XRBaseInteractor interactor, XRBaseInteractable interactable, HoverExitEventArgs args) { HoverExit((IXRHoverInteractor)interactor, (IXRHoverInteractable)interactable, args); } [Obsolete("InteractorSelectValidTargets(XRBaseInteractor, List) has been deprecated. Use InteractorSelectValidTargets(IXRSelectInteractor, List) instead.")] protected virtual void InteractorSelectValidTargets(XRBaseInteractor interactor, List validTargets) { } [Obsolete("InteractorHoverValidTargets(XRBaseInteractor, List) has been deprecated. Use InteractorHoverValidTargets(IXRHoverInteractor, List) instead.")] protected virtual void InteractorHoverValidTargets(XRBaseInteractor interactor, List validTargets) { } } public static class XRInteractionUpdateOrder { public enum UpdatePhase { Fixed, Dynamic, Late, OnBeforeRender } public const int k_ControllerRecorder = -30000; public const int k_DeviceSimulator = -29991; public const int k_Controllers = -29990; public const int k_TransformStabilizer = -29985; public const int k_GazeAssistance = -29980; public const int k_LocomotionProviders = -210; public const int k_TwoHandedGrabMoveProviders = -209; public const int k_UIInputModule = -200; public const int k_InteractionManager = -105; public const int k_InteractionGroups = -100; public const int k_Interactors = -99; public const int k_InteractableSnapVolume = -99; public const int k_Interactables = -98; public const int k_LineVisual = 100; public const int k_BeforeRenderGazeAssistance = 95; public const int k_BeforeRenderOrder = 100; public const int k_BeforeRenderLineVisual = 101; } [AddComponentMenu("XR/Locomotion/Character Controller Driver", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.CharacterControllerDriver.html")] public class CharacterControllerDriver : MonoBehaviour { [SerializeField] [Tooltip("The Locomotion Provider object to listen to.")] private LocomotionProvider m_LocomotionProvider; [SerializeField] [Tooltip("The minimum height of the character's capsule that will be set by this behavior.")] private float m_MinHeight; [SerializeField] [Tooltip("The maximum height of the character's capsule that will be set by this behavior.")] private float m_MaxHeight = float.PositiveInfinity; private XROrigin m_XROrigin; private CharacterController m_CharacterController; public LocomotionProvider locomotionProvider { get { return m_LocomotionProvider; } set { Unsubscribe(m_LocomotionProvider); m_LocomotionProvider = value; Subscribe(m_LocomotionProvider); SetupCharacterController(); UpdateCharacterController(); } } public float minHeight { get { return m_MinHeight; } set { m_MinHeight = value; } } public float maxHeight { get { return m_MaxHeight; } set { m_MaxHeight = value; } } protected XROrigin xrOrigin => m_XROrigin; protected CharacterController characterController => m_CharacterController; [Obsolete("xrRig has been deprecated. Use xrOrigin instead.")] protected XRRig xrRig => xrOrigin as XRRig; protected void Awake() { if (!((Object)(object)m_LocomotionProvider == (Object)null)) { return; } m_LocomotionProvider = ((Component)this).GetComponent(); if ((Object)(object)m_LocomotionProvider == (Object)null) { m_LocomotionProvider = ComponentLocatorUtility.FindComponent(); if ((Object)(object)m_LocomotionProvider == (Object)null) { Debug.LogWarning((object)"Unable to drive properties of the Character Controller without the locomotion events of a Locomotion Provider. Set Locomotion Provider or ensure a Continuous Move Provider component is in your scene.", (Object)(object)this); } } } protected void OnEnable() { Subscribe(m_LocomotionProvider); } protected void OnDisable() { Unsubscribe(m_LocomotionProvider); } protected void Start() { SetupCharacterController(); UpdateCharacterController(); } protected virtual void UpdateCharacterController() { //IL_0040: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)m_XROrigin == (Object)null) && !((Object)(object)m_CharacterController == (Object)null)) { float num = Mathf.Clamp(m_XROrigin.CameraInOriginSpaceHeight, m_MinHeight, m_MaxHeight); Vector3 cameraInOriginSpacePos = m_XROrigin.CameraInOriginSpacePos; cameraInOriginSpacePos.y = num / 2f + m_CharacterController.skinWidth; m_CharacterController.height = num; m_CharacterController.center = cameraInOriginSpacePos; } } private void Subscribe(LocomotionProvider provider) { if ((Object)(object)provider != (Object)null) { provider.beginLocomotion += OnBeginLocomotion; provider.endLocomotion += OnEndLocomotion; } } private void Unsubscribe(LocomotionProvider provider) { if ((Object)(object)provider != (Object)null) { provider.beginLocomotion -= OnBeginLocomotion; provider.endLocomotion -= OnEndLocomotion; } } private void SetupCharacterController() { if (!((Object)(object)m_LocomotionProvider == (Object)null) && !((Object)(object)m_LocomotionProvider.system == (Object)null)) { m_XROrigin = m_LocomotionProvider.system.xrOrigin; m_CharacterController = (((Object)(object)m_XROrigin != (Object)null) ? m_XROrigin.Origin.GetComponent() : null); if ((Object)(object)m_CharacterController == (Object)null && (Object)(object)m_XROrigin != (Object)null) { Debug.LogError((object)($"Could not get CharacterController on {m_XROrigin.Origin}, unable to drive properties." + $" Ensure there is a CharacterController on the \"Rig\" GameObject of {m_XROrigin}."), (Object)(object)this); } } } private void OnBeginLocomotion(LocomotionSystem system) { UpdateCharacterController(); } private void OnEndLocomotion(LocomotionSystem system) { UpdateCharacterController(); } internal void OnDrawGizmosSelected() { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0027: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_CharacterController != (Object)null) { Vector3 center = m_CharacterController.center + ((Component)m_CharacterController).transform.position + Vector3.up * ((m_CharacterController.stepOffset - m_CharacterController.skinWidth) * 0.5f); float height = m_CharacterController.height + m_CharacterController.stepOffset + m_CharacterController.skinWidth; float radius = m_CharacterController.radius + m_CharacterController.skinWidth; GizmoHelpers.DrawCapsule(center, height, radius, Vector3.up, new Color(1f, 0.92f, 0.016f, 0.5f)); } } } [SelectionBase] [DisallowMultipleComponent] [RequireComponent(typeof(Rigidbody))] [AddComponentMenu("XR/Climb Interactable", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ClimbInteractable.html")] public class ClimbInteractable : XRBaseInteractable { private const float k_DefaultMaxInteractionDistance = 0.1f; [SerializeField] [Tooltip("The climb provider that performs locomotion while this interactable is selected. If no climb provider is configured, will attempt to find one.")] private ClimbProvider m_ClimbProvider; [SerializeField] [Tooltip("Transform that defines the coordinate space for climb locomotion. Will use this GameObject's Transform by default.")] private Transform m_ClimbTransform; [SerializeField] [Tooltip("Controls whether to apply a distance check when validating hover and select interaction.")] private bool m_FilterInteractionByDistance = true; [SerializeField] [Tooltip("The maximum distance that an interactor can be from this interactable to begin hover or select.")] private float m_MaxInteractionDistance = 0.1f; [SerializeField] [Tooltip("The teleport volume used to assist with movement to a specific destination after ending a climb (optional, may be None). Only used if there is a Climb Teleport Interactor in the scene.")] private TeleportationMultiAnchorVolume m_ClimbAssistanceTeleportVolume; [SerializeField] [Tooltip("Optional override of locomotion settings specified in the climb provider. Only applies as an override if set to Use Value or if the asset reference is set.")] private ClimbSettingsDatumProperty m_ClimbSettingsOverride; public ClimbProvider climbProvider { get { return m_ClimbProvider; } set { m_ClimbProvider = value; } } public Transform climbTransform { get { if ((Object)(object)m_ClimbTransform == (Object)null) { m_ClimbTransform = ((Component)this).transform; } return m_ClimbTransform; } set { m_ClimbTransform = value; } } public bool filterInteractionByDistance { get { return m_FilterInteractionByDistance; } set { m_FilterInteractionByDistance = value; } } public float maxInteractionDistance { get { return m_MaxInteractionDistance; } set { m_MaxInteractionDistance = value; } } public TeleportationMultiAnchorVolume climbAssistanceTeleportVolume { get { return m_ClimbAssistanceTeleportVolume; } set { m_ClimbAssistanceTeleportVolume = value; } } public ClimbSettingsDatumProperty climbSettingsOverride { get { return m_ClimbSettingsOverride; } set { m_ClimbSettingsOverride = value; } } protected virtual void OnValidate() { if ((Object)(object)m_ClimbTransform == (Object)null) { m_ClimbTransform = ((Component)this).transform; } } protected override void Reset() { base.selectMode = InteractableSelectMode.Multiple; m_ClimbTransform = ((Component)this).transform; } protected override void Awake() { base.Awake(); if ((Object)(object)m_ClimbProvider == (Object)null) { ComponentLocatorUtility.TryFindComponent(out m_ClimbProvider, limitTryFindPerFrame: true); } } public override bool IsHoverableBy(IXRHoverInteractor interactor) { if (base.IsHoverableBy(interactor)) { if (m_FilterInteractionByDistance) { return GetDistanceSqrToInteractor(interactor) <= m_MaxInteractionDistance * m_MaxInteractionDistance; } return true; } return false; } public override bool IsSelectableBy(IXRSelectInteractor interactor) { if (base.IsSelectableBy(interactor)) { if (!IsSelected(interactor) && m_FilterInteractionByDistance) { return GetDistanceSqrToInteractor(interactor) <= m_MaxInteractionDistance * m_MaxInteractionDistance; } return true; } return false; } protected override void OnSelectEntered(SelectEnterEventArgs args) { base.OnSelectEntered(args); if ((Object)(object)m_ClimbProvider != (Object)null || ComponentLocatorUtility.TryFindComponent(out m_ClimbProvider)) { m_ClimbProvider.StartClimbGrab(this, args.interactorObject); } } protected override void OnSelectExited(SelectExitEventArgs args) { base.OnSelectExited(args); if ((Object)(object)m_ClimbProvider != (Object)null) { m_ClimbProvider.FinishClimbGrab(args.interactorObject); } } } [AddComponentMenu("XR/Locomotion/Climb Provider", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ClimbProvider.html")] public class ClimbProvider : LocomotionProvider { private readonly List m_GrabbingInteractors = new List(); private readonly List m_GrabbedClimbables = new List(); private Vector3 m_InteractorAnchorWorldPosition; private Vector3 m_InteractorAnchorClimbSpacePosition; [SerializeField] [Tooltip("Climb locomotion settings. Can be overridden by the Climb Interactable used for locomotion.")] private ClimbSettingsDatumProperty m_ClimbSettings = new ClimbSettingsDatumProperty(new ClimbSettings()); public ClimbSettingsDatumProperty climbSettings { get { return m_ClimbSettings; } set { m_ClimbSettings = value; } } public ClimbInteractable climbAnchorInteractable { get { if (m_GrabbedClimbables.Count > 0) { return m_GrabbedClimbables[m_GrabbedClimbables.Count - 1]; } return null; } } public IXRSelectInteractor climbAnchorInteractor { get { if (m_GrabbingInteractors.Count > 0) { return m_GrabbingInteractors[m_GrabbingInteractors.Count - 1]; } return null; } } public event Action climbAnchorUpdated; protected override void Awake() { base.Awake(); if (m_ClimbSettings == null || ((DatumProperty)m_ClimbSettings).Value == null) { m_ClimbSettings = new ClimbSettingsDatumProperty(new ClimbSettings()); } } public void StartClimbGrab(ClimbInteractable climbInteractable, IXRSelectInteractor interactor) { XROrigin xrOrigin = base.system.xrOrigin; if (!((Object)(object)((xrOrigin != null) ? xrOrigin.Origin : null) == (Object)null)) { m_GrabbingInteractors.Add(interactor); m_GrabbedClimbables.Add(climbInteractable); UpdateClimbAnchor(climbInteractable, interactor); if (base.locomotionPhase != LocomotionPhase.Moving) { base.locomotionPhase = LocomotionPhase.Started; } } } public void FinishClimbGrab(IXRSelectInteractor interactor) { int num = m_GrabbingInteractors.IndexOf(interactor); if (num >= 0) { if (num > 0 && num == m_GrabbingInteractors.Count - 1) { int index = num - 1; UpdateClimbAnchor(m_GrabbedClimbables[index], m_GrabbingInteractors[index]); } m_GrabbingInteractors.RemoveAt(num); m_GrabbedClimbables.RemoveAt(num); } } private void UpdateClimbAnchor(ClimbInteractable climbInteractable, IXRInteractor interactor) { //IL_000e: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) //IL_0020: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) Transform climbTransform = climbInteractable.climbTransform; m_InteractorAnchorWorldPosition = interactor.transform.position; m_InteractorAnchorClimbSpacePosition = climbTransform.InverseTransformPoint(m_InteractorAnchorWorldPosition); this.climbAnchorUpdated?.Invoke(this); } protected virtual void Update() { if (base.locomotionPhase == LocomotionPhase.Done) { base.locomotionPhase = LocomotionPhase.Idle; } else if (m_GrabbingInteractors.Count > 0) { if (base.locomotionPhase != LocomotionPhase.Moving) { if (!BeginLocomotion()) { return; } base.locomotionPhase = LocomotionPhase.Moving; } else if (base.system.RequestExclusiveOperation(this) == RequestResult.Busy) { return; } int index = m_GrabbingInteractors.Count - 1; IXRSelectInteractor iXRSelectInteractor = m_GrabbingInteractors[index]; ClimbInteractable climbInteractable = m_GrabbedClimbables[index]; if (iXRSelectInteractor == null || (Object)(object)climbInteractable == (Object)null) { FinishLocomotion(); } else { StepClimbMovement(climbInteractable, iXRSelectInteractor); } } else if (base.locomotionPhase != LocomotionPhase.Idle) { FinishLocomotion(); } } private void StepClimbMovement(ClimbInteractable currentClimbInteractable, IXRSelectInteractor currentInteractor) { //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007b: Unknown result type (might be due to invalid IL or missing references) //IL_0080: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0087: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_005f: Unknown result type (might be due to invalid IL or missing references) //IL_0061: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_00c0: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00b6: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); if (!((Object)(object)val != (Object)null)) { return; } ClimbSettings activeClimbSettings = GetActiveClimbSettings(currentClimbInteractable); bool allowFreeXMovement = activeClimbSettings.allowFreeXMovement; bool allowFreeYMovement = activeClimbSettings.allowFreeYMovement; bool allowFreeZMovement = activeClimbSettings.allowFreeZMovement; Transform transform = val.transform; Vector3 position = currentInteractor.transform.position; Vector3 val2; if (allowFreeXMovement && allowFreeYMovement && allowFreeZMovement) { val2 = m_InteractorAnchorWorldPosition - position; } else { Transform climbTransform = currentClimbInteractable.climbTransform; Vector3 val3 = climbTransform.InverseTransformPoint(position); Vector3 val4 = m_InteractorAnchorClimbSpacePosition - val3; if (!allowFreeXMovement) { val4.x = 0f; } if (!allowFreeYMovement) { val4.y = 0f; } if (!allowFreeZMovement) { val4.z = 0f; } val2 = climbTransform.TransformVector(val4); } transform.position += val2; } private void FinishLocomotion() { EndLocomotion(); base.locomotionPhase = LocomotionPhase.Done; m_GrabbingInteractors.Clear(); m_GrabbedClimbables.Clear(); } private ClimbSettings GetActiveClimbSettings(ClimbInteractable climbInteractable) { if (((DatumProperty)climbInteractable.climbSettingsOverride).Value != null) { return DatumProperty.op_Implicit((DatumProperty)climbInteractable.climbSettingsOverride); } return DatumProperty.op_Implicit((DatumProperty)m_ClimbSettings); } } [Serializable] public class ClimbSettings { [SerializeField] [Tooltip("Controls whether to allow unconstrained movement along the climb interactable's x-axis.")] private bool m_AllowFreeXMovement = true; [SerializeField] [Tooltip("Controls whether to allow unconstrained movement along the climb interactable's y-axis.")] private bool m_AllowFreeYMovement = true; [SerializeField] [Tooltip("Controls whether to allow unconstrained movement along the climb interactable's z-axis.")] private bool m_AllowFreeZMovement = true; public bool allowFreeXMovement { get { return m_AllowFreeXMovement; } set { m_AllowFreeXMovement = value; } } public bool allowFreeYMovement { get { return m_AllowFreeYMovement; } set { m_AllowFreeYMovement = value; } } public bool allowFreeZMovement { get { return m_AllowFreeZMovement; } set { m_AllowFreeZMovement = value; } } } [CreateAssetMenu(fileName = "ClimbSettings", menuName = "XR/Locomotion/Climb Settings")] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ClimbSettingsDatum.html")] public class ClimbSettingsDatum : Datum { } [Serializable] public class ClimbSettingsDatumProperty : DatumProperty { public ClimbSettingsDatumProperty(ClimbSettings value) : base(value) { } public ClimbSettingsDatumProperty(ClimbSettingsDatum datum) : base(datum) { } } public abstract class ConstrainedMoveProvider : LocomotionProvider { public enum GravityApplicationMode { AttemptingMove, Immediately } [SerializeField] [Tooltip("Controls whether to enable unconstrained movement along the x-axis.")] private bool m_EnableFreeXMovement = true; [SerializeField] [Tooltip("Controls whether to enable unconstrained movement along the y-axis.")] private bool m_EnableFreeYMovement; [SerializeField] [Tooltip("Controls whether to enable unconstrained movement along the z-axis.")] private bool m_EnableFreeZMovement = true; [SerializeField] [Tooltip("Controls whether gravity applies to constrained axes when a Character Controller is used.")] private bool m_UseGravity = true; [SerializeField] [Tooltip("Controls when gravity begins to take effect.")] private GravityApplicationMode m_GravityApplicationMode; private CharacterController m_CharacterController; private bool m_AttemptedGetCharacterController; private bool m_IsMovingXROrigin; private Vector3 m_GravityDrivenVelocity; public bool enableFreeXMovement { get { return m_EnableFreeXMovement; } set { m_EnableFreeXMovement = value; } } public bool enableFreeYMovement { get { return m_EnableFreeYMovement; } set { m_EnableFreeYMovement = value; } } public bool enableFreeZMovement { get { return m_EnableFreeZMovement; } set { m_EnableFreeZMovement = value; } } public bool useGravity { get { return m_UseGravity; } set { m_UseGravity = value; } } public GravityApplicationMode gravityMode { get { return m_GravityApplicationMode; } set { m_GravityApplicationMode = value; } } protected void Update() { //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_0050: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) m_IsMovingXROrigin = false; XROrigin xrOrigin = base.system.xrOrigin; if ((Object)(object)((xrOrigin != null) ? xrOrigin.Origin : null) == (Object)null) { return; } bool attemptingMove; Vector3 translationInWorldSpace = ComputeDesiredMove(out attemptingMove); switch (m_GravityApplicationMode) { case GravityApplicationMode.Immediately: MoveRig(translationInWorldSpace); break; case GravityApplicationMode.AttemptingMove: if (attemptingMove || m_GravityDrivenVelocity != Vector3.zero) { MoveRig(translationInWorldSpace); } break; } switch (base.locomotionPhase) { case LocomotionPhase.Idle: case LocomotionPhase.Started: if (m_IsMovingXROrigin) { base.locomotionPhase = LocomotionPhase.Moving; } break; case LocomotionPhase.Moving: if (!m_IsMovingXROrigin) { base.locomotionPhase = LocomotionPhase.Done; } break; case LocomotionPhase.Done: base.locomotionPhase = (m_IsMovingXROrigin ? LocomotionPhase.Moving : LocomotionPhase.Idle); break; } } protected abstract Vector3 ComputeDesiredMove(out bool attemptingMove); protected virtual void MoveRig(Vector3 translationInWorldSpace) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0177: Unknown result type (might be due to invalid IL or missing references) //IL_0178: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_0111: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_0122: Unknown result type (might be due to invalid IL or missing references) //IL_0127: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_0145: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); if ((Object)(object)val == (Object)null) { return; } FindCharacterController(); Vector3 val2 = translationInWorldSpace; if (!m_EnableFreeXMovement) { val2.x = 0f; } if (!m_EnableFreeYMovement) { val2.y = 0f; } if (!m_EnableFreeZMovement) { val2.z = 0f; } if ((Object)(object)m_CharacterController != (Object)null && ((Collider)m_CharacterController).enabled) { if (m_CharacterController.isGrounded || !m_UseGravity) { m_GravityDrivenVelocity = Vector3.zero; } else { m_GravityDrivenVelocity += Physics.gravity * Time.deltaTime; if (m_EnableFreeXMovement) { m_GravityDrivenVelocity.x = 0f; } if (m_EnableFreeYMovement) { m_GravityDrivenVelocity.y = 0f; } if (m_EnableFreeZMovement) { m_GravityDrivenVelocity.z = 0f; } } val2 += m_GravityDrivenVelocity * Time.deltaTime; if (CanBeginLocomotion() && BeginLocomotion()) { m_IsMovingXROrigin = true; m_CharacterController.Move(val2); EndLocomotion(); } } else if (CanBeginLocomotion() && BeginLocomotion()) { m_IsMovingXROrigin = true; Transform transform = val.transform; transform.position += val2; EndLocomotion(); } } private void FindCharacterController() { XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); if (!((Object)(object)val == (Object)null) && (Object)(object)m_CharacterController == (Object)null && !m_AttemptedGetCharacterController) { if (!val.TryGetComponent(ref m_CharacterController) && (Object)(object)val != (Object)(object)((Component)base.system.xrOrigin).gameObject) { ((Component)base.system.xrOrigin).TryGetComponent(ref m_CharacterController); } m_AttemptedGetCharacterController = true; } } } [AddComponentMenu("XR/Locomotion/Continuous Move Provider (Action-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ActionBasedContinuousMoveProvider.html")] public class ActionBasedContinuousMoveProvider : ContinuousMoveProviderBase { [SerializeField] [Tooltip("The Input System Action that will be used to read Move data from the left hand controller. Must be a Value Vector2 Control.")] private InputActionProperty m_LeftHandMoveAction = new InputActionProperty(new InputAction("Left Hand Move", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [Tooltip("The Input System Action that will be used to read Move data from the right hand controller. Must be a Value Vector2 Control.")] private InputActionProperty m_RightHandMoveAction = new InputActionProperty(new InputAction("Right Hand Move", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); public InputActionProperty leftHandMoveAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_LeftHandMoveAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_LeftHandMoveAction, value); } } public InputActionProperty rightHandMoveAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RightHandMoveAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_RightHandMoveAction, value); } } protected void OnEnable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) m_LeftHandMoveAction.EnableDirectAction(); m_RightHandMoveAction.EnableDirectAction(); } protected void OnDisable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) m_LeftHandMoveAction.DisableDirectAction(); m_RightHandMoveAction.DisableDirectAction(); } protected override Vector2 ReadInput() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) InputAction action = ((InputActionProperty)(ref m_LeftHandMoveAction)).action; Vector2 val = ((action != null) ? action.ReadValue() : Vector2.zero); InputAction action2 = ((InputActionProperty)(ref m_RightHandMoveAction)).action; Vector2 val2 = ((action2 != null) ? action2.ReadValue() : Vector2.zero); return val + val2; } private void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { property.DisableDirectAction(); } property = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { property.EnableDirectAction(); } } } [AddComponentMenu("XR/Locomotion/Continuous Turn Provider (Action-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ActionBasedContinuousTurnProvider.html")] public class ActionBasedContinuousTurnProvider : ContinuousTurnProviderBase { [SerializeField] [Tooltip("The Input System Action that will be used to read Turn data from the left hand controller. Must be a Value Vector2 Control.")] private InputActionProperty m_LeftHandTurnAction = new InputActionProperty(new InputAction("Left Hand Turn", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [Tooltip("The Input System Action that will be used to read Turn data from the right hand controller. Must be a Value Vector2 Control.")] private InputActionProperty m_RightHandTurnAction = new InputActionProperty(new InputAction("Right Hand Turn", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); public InputActionProperty leftHandTurnAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_LeftHandTurnAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_LeftHandTurnAction, value); } } public InputActionProperty rightHandTurnAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RightHandTurnAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_RightHandTurnAction, value); } } protected void OnEnable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) m_LeftHandTurnAction.EnableDirectAction(); m_RightHandTurnAction.EnableDirectAction(); } protected void OnDisable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) m_LeftHandTurnAction.DisableDirectAction(); m_RightHandTurnAction.DisableDirectAction(); } protected override Vector2 ReadInput() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) InputAction action = ((InputActionProperty)(ref m_LeftHandTurnAction)).action; Vector2 val = ((action != null) ? action.ReadValue() : Vector2.zero); InputAction action2 = ((InputActionProperty)(ref m_RightHandTurnAction)).action; Vector2 val2 = ((action2 != null) ? action2.ReadValue() : Vector2.zero); return val + val2; } private void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { property.DisableDirectAction(); } property = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { property.EnableDirectAction(); } } } public abstract class ContinuousMoveProviderBase : LocomotionProvider { public enum GravityApplicationMode { AttemptingMove, Immediately } [SerializeField] [Tooltip("The speed, in units per second, to move forward.")] private float m_MoveSpeed = 1f; [SerializeField] [Tooltip("Controls whether to enable strafing (sideways movement).")] private bool m_EnableStrafe = true; [SerializeField] [Tooltip("Controls whether to enable flying (unconstrained movement). This overrides the use of gravity.")] private bool m_EnableFly; [SerializeField] [Tooltip("Controls whether gravity affects this provider when a Character Controller is used and flying is disabled.")] private bool m_UseGravity = true; [SerializeField] [Tooltip("Controls when gravity begins to take effect.")] private GravityApplicationMode m_GravityApplicationMode; [SerializeField] [Tooltip("The source Transform to define the forward direction.")] private Transform m_ForwardSource; private CharacterController m_CharacterController; private bool m_AttemptedGetCharacterController; private bool m_IsMovingXROrigin; private Vector3 m_VerticalVelocity; public float moveSpeed { get { return m_MoveSpeed; } set { m_MoveSpeed = value; } } public bool enableStrafe { get { return m_EnableStrafe; } set { m_EnableStrafe = value; } } public bool enableFly { get { return m_EnableFly; } set { m_EnableFly = value; } } public bool useGravity { get { return m_UseGravity; } set { m_UseGravity = value; } } public GravityApplicationMode gravityApplicationMode { get { return m_GravityApplicationMode; } set { m_GravityApplicationMode = value; } } public Transform forwardSource { get { return m_ForwardSource; } set { m_ForwardSource = value; } } protected void Update() { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_0030: Unknown result type (might be due to invalid IL or missing references) //IL_0035: Unknown result type (might be due to invalid IL or missing references) //IL_004d: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0060: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) m_IsMovingXROrigin = false; XROrigin xrOrigin = base.system.xrOrigin; if ((Object)(object)((xrOrigin != null) ? xrOrigin.Origin : null) == (Object)null) { return; } Vector2 val = ReadInput(); Vector3 translationInWorldSpace = ComputeDesiredMove(val); switch (m_GravityApplicationMode) { case GravityApplicationMode.Immediately: MoveRig(translationInWorldSpace); break; case GravityApplicationMode.AttemptingMove: if (val != Vector2.zero || m_VerticalVelocity != Vector3.zero) { MoveRig(translationInWorldSpace); } break; } switch (base.locomotionPhase) { case LocomotionPhase.Idle: case LocomotionPhase.Started: if (m_IsMovingXROrigin) { base.locomotionPhase = LocomotionPhase.Moving; } break; case LocomotionPhase.Moving: if (!m_IsMovingXROrigin) { base.locomotionPhase = LocomotionPhase.Done; } break; case LocomotionPhase.Done: base.locomotionPhase = (m_IsMovingXROrigin ? LocomotionPhase.Moving : LocomotionPhase.Idle); break; } } protected abstract Vector2 ReadInput(); protected virtual Vector3 ComputeDesiredMove(Vector2 input) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_003d: Unknown result type (might be due to invalid IL or missing references) //IL_0048: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_005d: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00c7: Unknown result type (might be due to invalid IL or missing references) //IL_00cc: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d3: Unknown result type (might be due to invalid IL or missing references) //IL_00d8: Unknown result type (might be due to invalid IL or missing references) //IL_00df: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0114: Unknown result type (might be due to invalid IL or missing references) //IL_0116: Unknown result type (might be due to invalid IL or missing references) //IL_011b: Unknown result type (might be due to invalid IL or missing references) //IL_011f: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) //IL_012c: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_0108: Unknown result type (might be due to invalid IL or missing references) //IL_010d: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) if (input == Vector2.zero) { return Vector3.zero; } XROrigin xrOrigin = base.system.xrOrigin; if ((Object)(object)xrOrigin == (Object)null) { return Vector3.zero; } Vector3 val = Vector3.ClampMagnitude(new Vector3(m_EnableStrafe ? input.x : 0f, 0f, input.y), 1f); Transform val2 = (((Object)(object)m_ForwardSource == (Object)null) ? ((Component)xrOrigin.Camera).transform : m_ForwardSource); Vector3 val3 = val2.forward; Transform transform = xrOrigin.Origin.transform; float num = m_MoveSpeed * Time.deltaTime * transform.localScale.x; if (m_EnableFly) { Vector3 right = val2.right; return (val.x * right + val.z * val3) * num; } Vector3 up = transform.up; if (Mathf.Approximately(Mathf.Abs(Vector3.Dot(val3, up)), 1f)) { val3 = -val2.up; } Vector3 val4 = Vector3.ProjectOnPlane(val3, up); Vector3 val5 = Quaternion.FromToRotation(transform.forward, val4) * val * num; return transform.TransformDirection(val5); } protected virtual void MoveRig(Vector3 translationInWorldSpace) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_00a1: Unknown result type (might be due to invalid IL or missing references) //IL_00a6: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_007c: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ca: Unknown result type (might be due to invalid IL or missing references) XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); if ((Object)(object)val == (Object)null) { return; } FindCharacterController(); Vector3 val2 = translationInWorldSpace; if ((Object)(object)m_CharacterController != (Object)null && ((Collider)m_CharacterController).enabled) { if (m_CharacterController.isGrounded || !m_UseGravity || m_EnableFly) { m_VerticalVelocity = Vector3.zero; } else { m_VerticalVelocity += Physics.gravity * Time.deltaTime; } val2 += m_VerticalVelocity * Time.deltaTime; if (CanBeginLocomotion() && BeginLocomotion()) { m_IsMovingXROrigin = true; m_CharacterController.Move(val2); EndLocomotion(); } } else if (CanBeginLocomotion() && BeginLocomotion()) { m_IsMovingXROrigin = true; Transform transform = val.transform; transform.position += val2; EndLocomotion(); } } private void FindCharacterController() { XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); if (!((Object)(object)val == (Object)null) && (Object)(object)m_CharacterController == (Object)null && !m_AttemptedGetCharacterController) { if (!val.TryGetComponent(ref m_CharacterController) && (Object)(object)val != (Object)(object)((Component)base.system.xrOrigin).gameObject) { ((Component)base.system.xrOrigin).TryGetComponent(ref m_CharacterController); } m_AttemptedGetCharacterController = true; } } } public abstract class ContinuousTurnProviderBase : LocomotionProvider { [SerializeField] [Tooltip("The number of degrees/second clockwise to rotate when turning clockwise.")] private float m_TurnSpeed = 60f; private bool m_IsTurningXROrigin; public float turnSpeed { get { return m_TurnSpeed; } set { m_TurnSpeed = value; } } protected void Update() { //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) m_IsTurningXROrigin = false; Vector2 input = ReadInput(); float turnAmount = GetTurnAmount(input); TurnRig(turnAmount); switch (base.locomotionPhase) { case LocomotionPhase.Idle: case LocomotionPhase.Started: if (m_IsTurningXROrigin) { base.locomotionPhase = LocomotionPhase.Moving; } break; case LocomotionPhase.Moving: if (!m_IsTurningXROrigin) { base.locomotionPhase = LocomotionPhase.Done; } break; case LocomotionPhase.Done: base.locomotionPhase = (m_IsTurningXROrigin ? LocomotionPhase.Moving : LocomotionPhase.Idle); break; } } protected abstract Vector2 ReadInput(); protected virtual float GetTurnAmount(Vector2 input) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_002b: Unknown result type (might be due to invalid IL or missing references) if (input == Vector2.zero) { return 0f; } Cardinal nearestCardinal = CardinalUtility.GetNearestCardinal(input); if ((uint)nearestCardinal > 1u && (uint)(nearestCardinal - 2) <= 1u) { return ((Vector2)(ref input)).magnitude * (Mathf.Sign(input.x) * m_TurnSpeed * Time.deltaTime); } return 0f; } protected void TurnRig(float turnAmount) { if (!Mathf.Approximately(turnAmount, 0f) && CanBeginLocomotion() && BeginLocomotion()) { XROrigin xrOrigin = base.system.xrOrigin; if ((Object)(object)xrOrigin != (Object)null) { m_IsTurningXROrigin = true; xrOrigin.RotateAroundCameraUsingOriginUp(turnAmount); } EndLocomotion(); } } } [AddComponentMenu("XR/Locomotion/Continuous Move Provider (Device-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.DeviceBasedContinuousMoveProvider.html")] public class DeviceBasedContinuousMoveProvider : ContinuousMoveProviderBase { public enum InputAxes { Primary2DAxis, Secondary2DAxis } [SerializeField] [Tooltip("The 2D Input Axis on the controller devices that will be used to trigger a move.")] private InputAxes m_InputBinding; [SerializeField] [Tooltip("A list of controllers that allow move. If an XRController is not enabled, or does not have input actions enabled, move will not work.")] private List m_Controllers = new List(); [SerializeField] [Tooltip("Value below which input values will be clamped. After clamping, values will be renormalized to [0, 1] between min and max.")] private float m_DeadzoneMin = 0.125f; [SerializeField] [Tooltip("Value above which input values will be clamped. After clamping, values will be renormalized to [0, 1] between min and max.")] private float m_DeadzoneMax = 0.925f; private static readonly InputFeatureUsage[] k_Vec2UsageList = new InputFeatureUsage[2] { CommonUsages.primary2DAxis, CommonUsages.secondary2DAxis }; public InputAxes inputBinding { get { return m_InputBinding; } set { m_InputBinding = value; } } public List controllers { get { return m_Controllers; } set { m_Controllers = value; } } public float deadzoneMin { get { return m_DeadzoneMin; } set { m_DeadzoneMin = value; } } public float deadzoneMax { get { return m_DeadzoneMax; } set { m_DeadzoneMax = value; } } protected override Vector2 ReadInput() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) if (m_Controllers.Count == 0) { return Vector2.zero; } Vector2 val = Vector2.zero; InputFeatureUsage val2 = k_Vec2UsageList[(int)m_InputBinding]; Vector2 value = default(Vector2); for (int i = 0; i < m_Controllers.Count; i++) { XRController xRController = m_Controllers[i] as XRController; if ((Object)(object)xRController != (Object)null && xRController.enableInputActions) { InputDevice inputDevice = xRController.inputDevice; if (((InputDevice)(ref inputDevice)).TryGetFeatureValue(val2, ref value)) { val += GetDeadzoneAdjustedValue(value); } } } return val; } protected Vector2 GetDeadzoneAdjustedValue(Vector2 value) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) float magnitude = ((Vector2)(ref value)).magnitude; float deadzoneAdjustedValue = GetDeadzoneAdjustedValue(magnitude); value = ((!Mathf.Approximately(deadzoneAdjustedValue, 0f)) ? (value * (deadzoneAdjustedValue / magnitude)) : Vector2.zero); return value; } protected float GetDeadzoneAdjustedValue(float value) { float num = m_DeadzoneMin; float num2 = m_DeadzoneMax; float num3 = Mathf.Abs(value); if (num3 < num) { return 0f; } if (num3 > num2) { return Mathf.Sign(value); } return Mathf.Sign(value) * ((num3 - num) / (num2 - num)); } } [AddComponentMenu("XR/Locomotion/Continuous Turn Provider (Device-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.DeviceBasedContinuousTurnProvider.html")] public class DeviceBasedContinuousTurnProvider : ContinuousTurnProviderBase { public enum InputAxes { Primary2DAxis, Secondary2DAxis } [SerializeField] [Tooltip("The 2D Input Axis on the controller devices that will be used to trigger a turn.")] private InputAxes m_InputBinding; [SerializeField] [Tooltip("A list of controllers that allow Turn. If an XRController is not enabled, or does not have input actions enabled, turn will not work.")] private List m_Controllers = new List(); [SerializeField] [Tooltip("Value below which input values will be clamped. After clamping, values will be renormalized to [0, 1] between min and max.")] private float m_DeadzoneMin = 0.125f; [SerializeField] [Tooltip("Value above which input values will be clamped. After clamping, values will be renormalized to [0, 1] between min and max.")] private float m_DeadzoneMax = 0.925f; private static readonly InputFeatureUsage[] k_Vec2UsageList = new InputFeatureUsage[2] { CommonUsages.primary2DAxis, CommonUsages.secondary2DAxis }; public InputAxes inputBinding { get { return m_InputBinding; } set { m_InputBinding = value; } } public List controllers { get { return m_Controllers; } set { m_Controllers = value; } } public float deadzoneMin { get { return m_DeadzoneMin; } set { m_DeadzoneMin = value; } } public float deadzoneMax { get { return m_DeadzoneMax; } set { m_DeadzoneMax = value; } } protected override Vector2 ReadInput() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0057: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_0067: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) if (m_Controllers.Count == 0) { return Vector2.zero; } Vector2 val = Vector2.zero; InputFeatureUsage val2 = k_Vec2UsageList[(int)m_InputBinding]; Vector2 value = default(Vector2); for (int i = 0; i < m_Controllers.Count; i++) { XRController xRController = m_Controllers[i] as XRController; if ((Object)(object)xRController != (Object)null && xRController.enableInputActions) { InputDevice inputDevice = xRController.inputDevice; if (((InputDevice)(ref inputDevice)).TryGetFeatureValue(val2, ref value)) { val += GetDeadzoneAdjustedValue(value); } } } return val; } protected Vector2 GetDeadzoneAdjustedValue(Vector2 value) { //IL_0026: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_002f: Unknown result type (might be due to invalid IL or missing references) //IL_001d: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) float magnitude = ((Vector2)(ref value)).magnitude; float deadzoneAdjustedValue = GetDeadzoneAdjustedValue(magnitude); value = ((!Mathf.Approximately(deadzoneAdjustedValue, 0f)) ? (value * (deadzoneAdjustedValue / magnitude)) : Vector2.zero); return value; } protected float GetDeadzoneAdjustedValue(float value) { float num = m_DeadzoneMin; float num2 = m_DeadzoneMax; float num3 = Mathf.Abs(value); if (num3 < num) { return 0f; } if (num3 > num2) { return Mathf.Sign(value); } return Mathf.Sign(value) * ((num3 - num) / (num2 - num)); } } [AddComponentMenu("XR/Locomotion/Grab Move Provider", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.GrabMoveProvider.html")] public class GrabMoveProvider : ConstrainedMoveProvider { [SerializeField] [Tooltip("The controller Transform that will drive grab movement with its local position. Will use this GameObject's Transform if not set.")] private Transform m_ControllerTransform; [SerializeField] [Tooltip("Controls whether to allow grab move locomotion while the controller is selecting an interactable.")] private bool m_EnableMoveWhileSelecting; [SerializeField] [Tooltip("The ratio of actual movement distance to controller movement distance.")] private float m_MoveFactor = 1f; [SerializeField] [Tooltip("The Input System Action that will be used to perform grab movement while held. Must be a Button Control.")] private InputActionProperty m_GrabMoveAction = new InputActionProperty(new InputAction("Grab Move", (InputActionType)1, (string)null, (string)null, (string)null, (string)null)); private bool m_IsMoving; private Vector3 m_PreviousControllerLocalPosition; private readonly List m_ControllerInteractors = new List(); public Transform controllerTransform { get { return m_ControllerTransform; } set { m_ControllerTransform = value; GatherControllerInteractors(); } } public bool enableMoveWhileSelecting { get { return m_EnableMoveWhileSelecting; } set { m_EnableMoveWhileSelecting = value; } } public float moveFactor { get { return m_MoveFactor; } set { m_MoveFactor = value; } } public InputActionProperty grabMoveAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_GrabMoveAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_GrabMoveAction, value); } } public bool canMove { get; set; } = true; protected override void Awake() { base.Awake(); if ((Object)(object)m_ControllerTransform == (Object)null) { m_ControllerTransform = ((Component)this).transform; } GatherControllerInteractors(); } protected void OnEnable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) m_GrabMoveAction.EnableDirectAction(); } protected void OnDisable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) m_GrabMoveAction.DisableDirectAction(); } protected override Vector3 ComputeDesiredMove(out bool attemptingMove) { //IL_0056: Unknown result type (might be due to invalid IL or missing references) //IL_005b: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) //IL_0094: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_0068: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) attemptingMove = false; XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); bool isMoving = m_IsMoving; m_IsMoving = canMove && IsGrabbing() && (Object)(object)val != (Object)null; if (!m_IsMoving) { return Vector3.zero; } Vector3 localPosition = controllerTransform.localPosition; if (!isMoving && m_IsMoving) { m_PreviousControllerLocalPosition = localPosition; return Vector3.zero; } attemptingMove = true; Vector3 result = val.transform.TransformVector(m_PreviousControllerLocalPosition - localPosition) * m_MoveFactor; m_PreviousControllerLocalPosition = localPosition; return result; } public bool IsGrabbing() { if (((InputActionProperty)(ref m_GrabMoveAction)).action.IsPressed()) { if (!m_EnableMoveWhileSelecting) { return !ControllerHasSelection(); } return true; } return false; } private void GatherControllerInteractors() { m_ControllerInteractors.Clear(); if ((Object)(object)m_ControllerTransform != (Object)null) { ((Component)((Component)m_ControllerTransform).transform).GetComponentsInChildren(m_ControllerInteractors); } } private bool ControllerHasSelection() { foreach (IXRSelectInteractor controllerInteractor in m_ControllerInteractors) { if (controllerInteractor.hasSelection) { return true; } } return false; } private void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { property.DisableDirectAction(); } property = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { property.EnableDirectAction(); } } } [DefaultExecutionOrder(-209)] [AddComponentMenu("XR/Locomotion/Two-Handed Grab Move Provider", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.TwoHandedGrabMoveProvider.html")] public class TwoHandedGrabMoveProvider : ConstrainedMoveProvider { [SerializeField] [Tooltip("The left hand grab move instance which will be used as one half of two-handed locomotion.")] private GrabMoveProvider m_LeftGrabMoveProvider; [SerializeField] [Tooltip("The right hand grab move instance which will be used as one half of two-handed locomotion.")] private GrabMoveProvider m_RightGrabMoveProvider; [SerializeField] [Tooltip("Controls whether to override the settings for individual handed providers with this provider's settings on initialization.")] private bool m_OverrideSharedSettingsOnInit = true; [SerializeField] [Tooltip("The ratio of actual movement distance to controller movement distance.")] private float m_MoveFactor = 1f; [SerializeField] [Tooltip("Controls whether translation requires both grab move inputs to be active.")] private bool m_RequireTwoHandsForTranslation; [SerializeField] [Tooltip("Controls whether to enable yaw rotation of the user.")] private bool m_EnableRotation = true; [SerializeField] [Tooltip("Controls whether to enable uniform scaling of the user.")] private bool m_EnableScaling; [SerializeField] [Tooltip("The minimum user scale allowed.")] private float m_MinimumScale = 0.2f; [SerializeField] [Tooltip("The maximum user scale allowed.")] private float m_MaximumScale = 100f; private bool m_IsMoving; private Vector3 m_PreviousMidpointBetweenControllers; private float m_InitialOriginYaw; private Vector3 m_InitialLeftToRightDirection; private Vector3 m_InitialLeftToRightOrthogonal; private float m_InitialOriginScale; private float m_InitialDistanceBetweenHands; public GrabMoveProvider leftGrabMoveProvider { get { return m_LeftGrabMoveProvider; } set { m_LeftGrabMoveProvider = value; } } public GrabMoveProvider rightGrabMoveProvider { get { return m_RightGrabMoveProvider; } set { m_RightGrabMoveProvider = value; } } public bool overrideSharedSettingsOnInit { get { return m_OverrideSharedSettingsOnInit; } set { m_OverrideSharedSettingsOnInit = value; } } public float moveFactor { get { return m_MoveFactor; } set { m_MoveFactor = value; } } public bool requireTwoHandsForTranslation { get { return m_RequireTwoHandsForTranslation; } set { m_RequireTwoHandsForTranslation = value; } } public bool enableRotation { get { return m_EnableRotation; } set { m_EnableRotation = value; } } public bool enableScaling { get { return m_EnableScaling; } set { m_EnableScaling = value; } } public float minimumScale { get { return m_MinimumScale; } set { m_MinimumScale = value; } } public float maximumScale { get { return m_MaximumScale; } set { m_MaximumScale = value; } } protected void OnEnable() { if ((Object)(object)m_LeftGrabMoveProvider == (Object)null || (Object)(object)m_RightGrabMoveProvider == (Object)null) { Debug.LogError((object)"Left or Right Grab Move Provider is not set or has been destroyed.", (Object)(object)this); ((Behaviour)this).enabled = false; return; } if (m_RequireTwoHandsForTranslation) { m_LeftGrabMoveProvider.canMove = false; m_RightGrabMoveProvider.canMove = false; } if (m_OverrideSharedSettingsOnInit) { m_LeftGrabMoveProvider.system = base.system; m_LeftGrabMoveProvider.enableFreeXMovement = base.enableFreeXMovement; m_LeftGrabMoveProvider.enableFreeYMovement = base.enableFreeYMovement; m_LeftGrabMoveProvider.enableFreeZMovement = base.enableFreeZMovement; m_LeftGrabMoveProvider.useGravity = base.useGravity; m_LeftGrabMoveProvider.gravityMode = base.gravityMode; m_LeftGrabMoveProvider.moveFactor = m_MoveFactor; m_RightGrabMoveProvider.system = base.system; m_RightGrabMoveProvider.enableFreeXMovement = base.enableFreeXMovement; m_RightGrabMoveProvider.enableFreeYMovement = base.enableFreeYMovement; m_RightGrabMoveProvider.enableFreeZMovement = base.enableFreeZMovement; m_RightGrabMoveProvider.useGravity = base.useGravity; m_RightGrabMoveProvider.gravityMode = base.gravityMode; m_RightGrabMoveProvider.moveFactor = m_MoveFactor; } base.beginLocomotion += OnBeginLocomotion; } protected void OnDisable() { if ((Object)(object)m_LeftGrabMoveProvider != (Object)null) { m_LeftGrabMoveProvider.canMove = true; } if ((Object)(object)m_RightGrabMoveProvider != (Object)null) { m_RightGrabMoveProvider.canMove = true; } base.beginLocomotion -= OnBeginLocomotion; } protected override Vector3 ComputeDesiredMove(out bool attemptingMove) { //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a9: Unknown result type (might be due to invalid IL or missing references) //IL_00b5: Unknown result type (might be due to invalid IL or missing references) //IL_00ba: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) //IL_00ce: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0164: Unknown result type (might be due to invalid IL or missing references) //IL_0166: Unknown result type (might be due to invalid IL or missing references) //IL_016b: Unknown result type (might be due to invalid IL or missing references) //IL_0176: Unknown result type (might be due to invalid IL or missing references) //IL_017c: Unknown result type (might be due to invalid IL or missing references) //IL_017e: Unknown result type (might be due to invalid IL or missing references) //IL_0074: Unknown result type (might be due to invalid IL or missing references) //IL_00e0: Unknown result type (might be due to invalid IL or missing references) //IL_00f0: Unknown result type (might be due to invalid IL or missing references) //IL_00f2: Unknown result type (might be due to invalid IL or missing references) //IL_00f3: Unknown result type (might be due to invalid IL or missing references) //IL_00f8: Unknown result type (might be due to invalid IL or missing references) //IL_0113: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0128: Unknown result type (might be due to invalid IL or missing references) //IL_012f: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0140: Unknown result type (might be due to invalid IL or missing references) //IL_014d: Unknown result type (might be due to invalid IL or missing references) //IL_014f: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) attemptingMove = false; bool isMoving = m_IsMoving; XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); m_IsMoving = m_LeftGrabMoveProvider.IsGrabbing() && m_RightGrabMoveProvider.IsGrabbing() && (Object)(object)val != (Object)null; if (!m_IsMoving) { if (!m_RequireTwoHandsForTranslation) { m_LeftGrabMoveProvider.canMove = true; m_RightGrabMoveProvider.canMove = true; } return Vector3.zero; } m_LeftGrabMoveProvider.canMove = false; m_RightGrabMoveProvider.canMove = false; Transform transform = val.transform; Vector3 localPosition = m_LeftGrabMoveProvider.controllerTransform.localPosition; Vector3 localPosition2 = m_RightGrabMoveProvider.controllerTransform.localPosition; Vector3 val2 = (localPosition + localPosition2) * 0.5f; if (!isMoving && m_IsMoving) { m_InitialOriginYaw = transform.eulerAngles.y; m_InitialLeftToRightDirection = localPosition2 - localPosition; m_InitialLeftToRightDirection.y = 0f; m_InitialLeftToRightOrthogonal = Quaternion.AngleAxis(90f, Vector3.down) * m_InitialLeftToRightDirection; m_InitialOriginScale = transform.localScale.x; m_InitialDistanceBetweenHands = Vector3.Distance(localPosition, localPosition2); m_PreviousMidpointBetweenControllers = val2; return Vector3.zero; } attemptingMove = true; Vector3 result = transform.TransformVector(m_PreviousMidpointBetweenControllers - val2) * m_MoveFactor; m_PreviousMidpointBetweenControllers = val2; return result; } private void OnBeginLocomotion(LocomotionSystem otherSystem) { //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004a: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) //IL_005a: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006e: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0088: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00c2: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) XROrigin xrOrigin = base.system.xrOrigin; GameObject val = ((xrOrigin != null) ? xrOrigin.Origin : null); if (!((Object)(object)val == (Object)null)) { Transform transform = val.transform; Vector3 localPosition = m_LeftGrabMoveProvider.controllerTransform.localPosition; Vector3 localPosition2 = m_RightGrabMoveProvider.controllerTransform.localPosition; if (m_EnableRotation) { Vector3 val2 = localPosition2 - localPosition; val2.y = 0f; float num = Mathf.Sign(Vector3.Dot(m_InitialLeftToRightOrthogonal, val2)); float num2 = m_InitialOriginYaw + Vector3.Angle(m_InitialLeftToRightDirection, val2) * num; transform.rotation = Quaternion.AngleAxis(num2, Vector3.up); } if (m_EnableScaling) { float num3 = Vector3.Distance(localPosition, localPosition2); float num4 = ((num3 != 0f) ? (m_InitialOriginScale * (m_InitialDistanceBetweenHands / num3)) : transform.localScale.x); num4 = Mathf.Clamp(num4, m_MinimumScale, m_MaximumScale); transform.localScale = Vector3.one * num4; } } } } public enum LocomotionPhase { Idle, Started, Moving, Done } [DefaultExecutionOrder(-210)] public abstract class LocomotionProvider : MonoBehaviour { [SerializeField] [Tooltip("The Locomotion System that this locomotion provider communicates with for exclusive access to an XR Origin. If one is not provided, the behavior will attempt to locate one during its Awake call.")] private LocomotionSystem m_System; public LocomotionSystem system { get { return m_System; } set { m_System = value; } } public LocomotionPhase locomotionPhase { get; protected set; } public event Action beginLocomotion; public event Action endLocomotion; [Obsolete("startLocomotion has been deprecated. Use beginLocomotion instead. (UnityUpgradable) -> beginLocomotion", true)] public event Action startLocomotion; protected virtual void Awake() { if ((Object)(object)m_System == (Object)null) { m_System = ((Component)this).GetComponentInParent(); if ((Object)(object)m_System == (Object)null) { ComponentLocatorUtility.TryFindComponent(out m_System); } } } protected bool CanBeginLocomotion() { if ((Object)(object)m_System == (Object)null) { return false; } return !m_System.busy; } protected bool BeginLocomotion() { if ((Object)(object)m_System == (Object)null) { return false; } bool num = m_System.RequestExclusiveOperation(this) == RequestResult.Success; if (num) { Action action = this.beginLocomotion; if (action == null) { return num; } action(m_System); } return num; } protected bool EndLocomotion() { if ((Object)(object)m_System == (Object)null) { return false; } bool num = m_System.FinishExclusiveOperation(this) == RequestResult.Success; if (num) { Action action = this.endLocomotion; if (action == null) { return num; } action(m_System); } return num; } } public enum RequestResult { Success, Busy, Error } [AddComponentMenu("XR/Locomotion/Locomotion System", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.LocomotionSystem.html")] public class LocomotionSystem : MonoBehaviour { private LocomotionProvider m_CurrentExclusiveProvider; private float m_TimeMadeExclusive; [SerializeField] [Tooltip("The timeout (in seconds) for exclusive access to the XR Origin.")] private float m_Timeout = 10f; [SerializeField] [FormerlySerializedAs("m_XRRig")] [Tooltip("The XR Origin object to provide access control to.")] private XROrigin m_XROrigin; public float timeout { get { return m_Timeout; } set { m_Timeout = value; } } public XROrigin xrOrigin { get { return m_XROrigin; } set { m_XROrigin = value; } } public bool busy => (Object)(object)m_CurrentExclusiveProvider != (Object)null; [Obsolete("xrRig is marked for deprecation and will be removed in a future version. Please use xrOrigin instead.")] public XRRig xrRig { get { return m_XROrigin as XRRig; } set { m_XROrigin = (XROrigin)(object)value; } } [Obsolete("Busy has been deprecated. Use busy instead. (UnityUpgradable) -> busy")] public bool Busy => busy; protected void Awake() { if ((Object)(object)m_XROrigin == (Object)null) { m_XROrigin = ((Component)this).GetComponentInParent(); if ((Object)(object)m_XROrigin == (Object)null) { ComponentLocatorUtility.TryFindComponent(out m_XROrigin); } } } protected void Update() { if ((Object)(object)m_CurrentExclusiveProvider != (Object)null && Time.time > m_TimeMadeExclusive + m_Timeout) { ResetExclusivity(); } } public RequestResult RequestExclusiveOperation(LocomotionProvider provider) { if ((Object)(object)provider == (Object)null) { return RequestResult.Error; } if ((Object)(object)m_CurrentExclusiveProvider == (Object)null) { m_CurrentExclusiveProvider = provider; m_TimeMadeExclusive = Time.time; return RequestResult.Success; } if (!((Object)(object)m_CurrentExclusiveProvider != (Object)(object)provider)) { return RequestResult.Error; } return RequestResult.Busy; } private void ResetExclusivity() { m_CurrentExclusiveProvider = null; m_TimeMadeExclusive = 0f; } public RequestResult FinishExclusiveOperation(LocomotionProvider provider) { if ((Object)(object)provider == (Object)null || (Object)(object)m_CurrentExclusiveProvider == (Object)null) { return RequestResult.Error; } if ((Object)(object)m_CurrentExclusiveProvider == (Object)(object)provider) { ResetExclusivity(); return RequestResult.Success; } return RequestResult.Error; } } [AddComponentMenu("XR/Locomotion/Snap Turn Provider (Action-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.ActionBasedSnapTurnProvider.html")] public class ActionBasedSnapTurnProvider : SnapTurnProviderBase { [SerializeField] [Tooltip("The Input System Action that will be used to read Snap Turn data from the left hand controller. Must be a Value Vector2 Control.")] private InputActionProperty m_LeftHandSnapTurnAction = new InputActionProperty(new InputAction("Left Hand Snap Turn", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); [SerializeField] [Tooltip("The Input System Action that will be used to read Snap Turn data from the right hand controller. Must be a Value Vector2 Control.")] private InputActionProperty m_RightHandSnapTurnAction = new InputActionProperty(new InputAction("Right Hand Snap Turn", (InputActionType)0, (string)null, (string)null, (string)null, "Vector2")); public InputActionProperty leftHandSnapTurnAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_LeftHandSnapTurnAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_LeftHandSnapTurnAction, value); } } public InputActionProperty rightHandSnapTurnAction { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_RightHandSnapTurnAction; } set { //IL_0007: Unknown result type (might be due to invalid IL or missing references) SetInputActionProperty(ref m_RightHandSnapTurnAction, value); } } protected void OnEnable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) m_LeftHandSnapTurnAction.EnableDirectAction(); m_RightHandSnapTurnAction.EnableDirectAction(); } protected void OnDisable() { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_000c: Unknown result type (might be due to invalid IL or missing references) m_LeftHandSnapTurnAction.DisableDirectAction(); m_RightHandSnapTurnAction.DisableDirectAction(); } protected override Vector2 ReadInput() { //IL_0016: Unknown result type (might be due to invalid IL or missing references) //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) //IL_0036: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0038: Unknown result type (might be due to invalid IL or missing references) InputAction action = ((InputActionProperty)(ref m_LeftHandSnapTurnAction)).action; Vector2 val = ((action != null) ? action.ReadValue() : Vector2.zero); InputAction action2 = ((InputActionProperty)(ref m_RightHandSnapTurnAction)).action; Vector2 val2 = ((action2 != null) ? action2.ReadValue() : Vector2.zero); return val + val2; } private void SetInputActionProperty(ref InputActionProperty property, InputActionProperty value) { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0014: Unknown result type (might be due to invalid IL or missing references) //IL_0008: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) if (Application.isPlaying) { property.DisableDirectAction(); } property = value; if (Application.isPlaying && ((Behaviour)this).isActiveAndEnabled) { property.EnableDirectAction(); } } } [AddComponentMenu("XR/Locomotion/Snap Turn Provider (Device-based)", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.DeviceBasedSnapTurnProvider.html")] public class DeviceBasedSnapTurnProvider : SnapTurnProviderBase { public enum InputAxes { Primary2DAxis, Secondary2DAxis } [SerializeField] [Tooltip("The 2D Input Axis on the controller devices that will be used to trigger a snap turn.")] private InputAxes m_TurnUsage; [SerializeField] [Tooltip("A list of controllers that allow Snap Turn. If an XRController is not enabled, or does not have input actions enabled, snap turn will not work.")] private List m_Controllers = new List(); [SerializeField] [Tooltip("The deadzone that the controller movement will have to be above to trigger a snap turn.")] private float m_DeadZone = 0.75f; private static readonly InputFeatureUsage[] k_Vec2UsageList = new InputFeatureUsage[2] { CommonUsages.primary2DAxis, CommonUsages.secondary2DAxis }; public InputAxes turnUsage { get { return m_TurnUsage; } set { m_TurnUsage = value; } } public List controllers { get { return m_Controllers; } set { m_Controllers = value; } } public float deadZone { get { return m_DeadZone; } set { m_DeadZone = value; } } protected override Vector2 ReadInput() { //IL_0013: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_000d: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0069: Unknown result type (might be due to invalid IL or missing references) //IL_006d: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_0082: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0089: Unknown result type (might be due to invalid IL or missing references) if (m_Controllers.Count == 0) { return Vector2.zero; } Vector2 val = Vector2.zero; InputFeatureUsage val2 = k_Vec2UsageList[(int)m_TurnUsage]; float num = m_DeadZone * m_DeadZone; Vector2 val3 = default(Vector2); for (int i = 0; i < m_Controllers.Count; i++) { XRController xRController = m_Controllers[i] as XRController; if ((Object)(object)xRController != (Object)null && xRController.enableInputActions) { InputDevice inputDevice = xRController.inputDevice; if (((InputDevice)(ref inputDevice)).TryGetFeatureValue(val2, ref val3) && ((Vector2)(ref val3)).sqrMagnitude > num) { val += val3; } } } return val; } } public abstract class SnapTurnProviderBase : LocomotionProvider { [SerializeField] [Tooltip("The number of degrees clockwise to rotate when snap turning clockwise.")] private float m_TurnAmount = 45f; [SerializeField] [Tooltip("The amount of time that the system will wait before starting another snap turn.")] private float m_DebounceTime = 0.5f; [SerializeField] [Tooltip("Controls whether to enable left & right snap turns.")] private bool m_EnableTurnLeftRight = true; [SerializeField] [Tooltip("Controls whether to enable 180° snap turns.")] private bool m_EnableTurnAround = true; [SerializeField] [Tooltip("The time (in seconds) to delay the first turn after receiving initial input for the turn.")] private float m_DelayTime; private float m_CurrentTurnAmount; private float m_TimeStarted; private float m_DelayStartTime; public float turnAmount { get { return m_TurnAmount; } set { m_TurnAmount = value; } } public float debounceTime { get { return m_DebounceTime; } set { m_DebounceTime = value; } } public bool enableTurnLeftRight { get { return m_EnableTurnLeftRight; } set { m_EnableTurnLeftRight = value; } } public bool enableTurnAround { get { return m_EnableTurnAround; } set { m_EnableTurnAround = value; } } public float delayTime { get { return m_DelayTime; } set { m_DelayTime = value; } } protected override void Awake() { base.Awake(); if ((Object)(object)base.system != (Object)null && m_DelayTime > 0f && m_DelayTime > base.system.timeout) { Debug.LogWarning((object)$"Delay Time ({m_DelayTime}) is longer than the Locomotion System's Timeout ({base.system.timeout}).", (Object)(object)this); } } protected void Update() { //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0043: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) if (m_TimeStarted > 0f && m_TimeStarted + m_DebounceTime < Time.time) { m_TimeStarted = 0f; return; } if (base.locomotionPhase == LocomotionPhase.Done) { base.locomotionPhase = LocomotionPhase.Idle; } Vector2 input = ReadInput(); float num = GetTurnAmount(input); if (Mathf.Abs(num) > 0f || base.locomotionPhase == LocomotionPhase.Started) { StartTurn(num); } else if (Mathf.Approximately(m_CurrentTurnAmount, 0f) && base.locomotionPhase == LocomotionPhase.Moving) { base.locomotionPhase = LocomotionPhase.Done; } if (base.locomotionPhase == LocomotionPhase.Moving && Math.Abs(m_CurrentTurnAmount) > 0f && BeginLocomotion()) { XROrigin xrOrigin = base.system.xrOrigin; if ((Object)(object)xrOrigin != (Object)null) { xrOrigin.RotateAroundCameraUsingOriginUp(m_CurrentTurnAmount); } else { base.locomotionPhase = LocomotionPhase.Done; } m_CurrentTurnAmount = 0f; EndLocomotion(); if (Mathf.Approximately(num, 0f)) { base.locomotionPhase = LocomotionPhase.Done; } } } protected abstract Vector2 ReadInput(); protected virtual float GetTurnAmount(Vector2 input) { //IL_0000: Unknown result type (might be due to invalid IL or missing references) //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0013: Unknown result type (might be due to invalid IL or missing references) if (input == Vector2.zero) { return 0f; } switch (CardinalUtility.GetNearestCardinal(input)) { case Cardinal.South: if (m_EnableTurnAround) { return 180f; } break; case Cardinal.East: if (m_EnableTurnLeftRight) { return m_TurnAmount; } break; case Cardinal.West: if (m_EnableTurnLeftRight) { return 0f - m_TurnAmount; } break; } return 0f; } protected void StartTurn(float amount) { if (!(m_TimeStarted > 0f) && CanBeginLocomotion()) { if (base.locomotionPhase == LocomotionPhase.Idle) { base.locomotionPhase = LocomotionPhase.Started; m_DelayStartTime = Time.time; } if (Math.Abs(amount) > 0f) { m_CurrentTurnAmount = amount; } if (!(m_DelayTime > 0f) || !(Time.time - m_DelayStartTime < m_DelayTime)) { base.locomotionPhase = LocomotionPhase.Moving; m_TimeStarted = Time.time; } } } internal void FakeStartTurn(bool isLeft) { StartTurn(isLeft ? (0f - m_TurnAmount) : m_TurnAmount); } internal void FakeStartTurnAround() { StartTurn(180f); } } public enum MatchOrientation { WorldSpaceUp, TargetUp, TargetUpAndForward, None } public struct TeleportRequest { public Vector3 destinationPosition; public Quaternion destinationRotation; public float requestTime; public MatchOrientation matchOrientation; } public abstract class BaseTeleportationInteractable : XRBaseInteractable, IXRReticleDirectionProvider { public enum TeleportTrigger { OnSelectExited = 0, OnSelectEntered = 1, OnActivated = 2, OnDeactivated = 3, [Obsolete("OnSelectExit has been deprecated. Use OnSelectExited instead. (UnityUpgradable) -> OnSelectExited")] OnSelectExit = 0, [Obsolete("OnSelectEnter has been deprecated. Use OnSelectEntered instead. (UnityUpgradable) -> OnSelectEntered")] OnSelectEnter = 1, [Obsolete("OnActivate has been deprecated. Use OnActivated instead. (UnityUpgradable) -> OnActivated")] OnActivate = 2, [Obsolete("OnDeactivate has been deprecated. Use OnDeactivated instead. (UnityUpgradable) -> OnDeactivated")] OnDeactivate = 3 } private const float k_DefaultNormalToleranceDegrees = 30f; [SerializeField] [Tooltip("The teleportation provider that this teleportation interactable will communicate teleport requests to. If no teleportation provider is configured, will attempt to find a teleportation provider.")] private TeleportationProvider m_TeleportationProvider; [SerializeField] [Tooltip("How to orient the rig after teleportation.\nSet to:\n\nWorld Space Up to stay oriented according to the world space up vector.\n\nSet to Target Up to orient according to the target BaseTeleportationInteractable Transform's up vector.\n\nSet to Target Up And Forward to orient according to the target BaseTeleportationInteractable Transform's rotation.\n\nSet to None to maintain the same orientation before and after teleporting.")] private MatchOrientation m_MatchOrientation; [SerializeField] [Tooltip("Whether or not to rotate the rig to match the forward direction of the attach transform of the selecting interactor.")] private bool m_MatchDirectionalInput; [SerializeField] [Tooltip("Specify when the teleportation will be triggered. Options map to when the trigger is pressed or when it is released.")] private TeleportTrigger m_TeleportTrigger; [SerializeField] [Tooltip("When enabled, this teleportation interactable will only be selectable by a ray interactor if its current hit normal is aligned with this object's up vector.")] private bool m_FilterSelectionByHitNormal; [SerializeField] [Tooltip("Sets the tolerance in degrees from this object's up vector for a hit normal to be considered aligned with the up vector.")] private float m_UpNormalToleranceDegrees = 30f; [SerializeField] private TeleportingEvent m_Teleporting = new TeleportingEvent(); private readonly LinkedPool m_TeleportingEventArgs = new LinkedPool(() => new TeleportingEventArgs(), null, null, null, collectionCheck: false); private readonly Dictionary m_TeleportForwardPerInteractor = new Dictionary(); public TeleportationProvider teleportationProvider { get { return m_TeleportationProvider; } set { m_TeleportationProvider = value; } } public MatchOrientation matchOrientation { get { return m_MatchOrientation; } set { m_MatchOrientation = value; } } public bool matchDirectionalInput { get { return m_MatchDirectionalInput; } set { m_MatchDirectionalInput = value; } } public TeleportTrigger teleportTrigger { get { return m_TeleportTrigger; } set { m_TeleportTrigger = value; } } public bool filterSelectionByHitNormal { get { return m_FilterSelectionByHitNormal; } set { m_FilterSelectionByHitNormal = value; } } public float upNormalToleranceDegrees { get { return m_UpNormalToleranceDegrees; } set { m_UpNormalToleranceDegrees = value; } } public TeleportingEvent teleporting { get { return m_Teleporting; } set { m_Teleporting = value; } } protected override void Awake() { base.Awake(); if ((Object)(object)m_TeleportationProvider == (Object)null) { ComponentLocatorUtility.TryFindComponent(out m_TeleportationProvider, limitTryFindPerFrame: true); } } protected override void Reset() { base.selectMode = InteractableSelectMode.Multiple; } protected virtual bool GenerateTeleportRequest(IXRInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest) { return false; } protected bool SendTeleportRequest(IXRInteractor interactor) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_004e: Unknown result type (might be due to invalid IL or missing references) //IL_0055: Unknown result type (might be due to invalid IL or missing references) RaycastHit raycastHit = default(RaycastHit); if (interactor is XRRayInteractor xRRayInteractor && (Object)(object)xRRayInteractor != (Object)null && (!xRRayInteractor.TryGetCurrent3DRaycastHit(out raycastHit) || !base.interactionManager.TryGetInteractableForCollider(((RaycastHit)(ref raycastHit)).collider, out var interactable) || interactable != this || (m_FilterSelectionByHitNormal && Vector3.Angle(((Component)this).transform.up, ((RaycastHit)(ref raycastHit)).normal) > m_UpNormalToleranceDegrees))) { return false; } if ((Object)(object)m_TeleportationProvider == (Object)null && !ComponentLocatorUtility.TryFindComponent(out m_TeleportationProvider)) { Debug.LogWarning((object)"Teleportation Provider was null and one could not be found in the scene: Teleport request failed.", (Object)(object)this); return false; } TeleportRequest teleportRequest = new TeleportRequest { matchOrientation = m_MatchOrientation, requestTime = Time.time }; bool flag = ((!(interactor is XRBaseInteractor interactor2)) ? GenerateTeleportRequest(interactor, raycastHit, ref teleportRequest) : GenerateTeleportRequest(interactor2, raycastHit, ref teleportRequest)); if (flag) { UpdateTeleportRequestRotation(interactor, ref teleportRequest); flag = m_TeleportationProvider.QueueTeleportRequest(teleportRequest); if (flag && m_Teleporting != null) { TeleportingEventArgs v; using (m_TeleportingEventArgs.Get(out v)) { v.interactorObject = interactor; v.interactableObject = this; v.teleportRequest = teleportRequest; ((UnityEvent)m_Teleporting).Invoke(v); } } } return flag; } private void UpdateTeleportRequestRotation(IXRInteractor interactor, ref TeleportRequest teleportRequest) { //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) //IL_0037: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0056: Unknown result type (might be due to invalid IL or missing references) if (m_MatchDirectionalInput && interactor != null && m_TeleportForwardPerInteractor.TryGetValue(interactor, out var value)) { switch (teleportRequest.matchOrientation) { case MatchOrientation.WorldSpaceUp: teleportRequest.destinationRotation = Quaternion.LookRotation(value, Vector3.up); teleportRequest.matchOrientation = MatchOrientation.TargetUpAndForward; break; case MatchOrientation.TargetUp: teleportRequest.destinationRotation = Quaternion.LookRotation(value, ((Component)this).transform.up); teleportRequest.matchOrientation = MatchOrientation.TargetUpAndForward; break; } } } public override void ProcessInteractable(XRInteractionUpdateOrder.UpdatePhase updatePhase) { base.ProcessInteractable(updatePhase); if (updatePhase != XRInteractionUpdateOrder.UpdatePhase.Dynamic || !m_MatchDirectionalInput) { return; } int i = 0; for (int count = base.interactorsHovering.Count; i < count; i++) { IXRHoverInteractor interactor = base.interactorsHovering[i]; CalculateTeleportForward(interactor); } int j = 0; for (int count2 = base.interactorsSelecting.Count; j < count2; j++) { IXRSelectInteractor interactor2 = base.interactorsSelecting[j]; if (!IsHovered(interactor2)) { CalculateTeleportForward(interactor2); } } void CalculateTeleportForward(IXRInteractor iXRInteractor) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_0024: Unknown result type (might be due to invalid IL or missing references) //IL_0029: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0031: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) //IL_0054: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) Transform attachTransform = iXRInteractor.GetAttachTransform(this); Vector3 val; switch (matchOrientation) { case MatchOrientation.WorldSpaceUp: { Dictionary teleportForwardPerInteractor2 = m_TeleportForwardPerInteractor; val = Vector3.ProjectOnPlane(attachTransform.forward, Vector3.up); teleportForwardPerInteractor2[iXRInteractor] = ((Vector3)(ref val)).normalized; break; } case MatchOrientation.TargetUp: { Dictionary teleportForwardPerInteractor = m_TeleportForwardPerInteractor; val = Vector3.ProjectOnPlane(attachTransform.forward, ((Component)this).transform.up); teleportForwardPerInteractor[iXRInteractor] = ((Vector3)(ref val)).normalized; break; } } } } protected override void OnSelectEntered(SelectEnterEventArgs args) { if (m_TeleportTrigger == TeleportTrigger.OnSelectEntered) { SendTeleportRequest(args.interactorObject); } base.OnSelectEntered(args); } protected override void OnSelectExited(SelectExitEventArgs args) { if (m_TeleportTrigger == TeleportTrigger.OnSelectExited && !args.isCanceled) { SendTeleportRequest(args.interactorObject); } base.OnSelectExited(args); } protected override void OnActivated(ActivateEventArgs args) { if (m_TeleportTrigger == TeleportTrigger.OnActivated) { SendTeleportRequest(args.interactorObject); } base.OnActivated(args); } protected override void OnDeactivated(DeactivateEventArgs args) { if (m_TeleportTrigger == TeleportTrigger.OnDeactivated) { SendTeleportRequest(args.interactorObject); } base.OnDeactivated(args); } public override bool IsSelectableBy(IXRSelectInteractor interactor) { //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) bool flag = base.IsSelectableBy(interactor); if (flag && m_FilterSelectionByHitNormal && interactor is XRRayInteractor xRRayInteractor && (Object)(object)xRRayInteractor != (Object)null && xRRayInteractor.TryGetCurrent3DRaycastHit(out var raycastHit) && base.interactionManager.TryGetInteractableForCollider(((RaycastHit)(ref raycastHit)).collider, out var interactable) && interactable == this) { flag &= Vector3.Angle(((Component)this).transform.up, ((RaycastHit)(ref raycastHit)).normal) <= m_UpNormalToleranceDegrees; } return flag; } public void GetReticleDirection(IXRInteractor interactor, Vector3 hitNormal, out Vector3 reticleUp, out Vector3? optionalReticleForward) { //IL_0009: Unknown result type (might be due to invalid IL or missing references) //IL_000a: Unknown result type (might be due to invalid IL or missing references) //IL_003f: Unknown result type (might be due to invalid IL or missing references) //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_00a2: Unknown result type (might be due to invalid IL or missing references) //IL_00a7: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010a: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_013c: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0153: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_0066: Unknown result type (might be due to invalid IL or missing references) //IL_00c9: Unknown result type (might be due to invalid IL or missing references) optionalReticleForward = null; reticleUp = hitNormal; XROrigin xrOrigin = teleportationProvider.system.xrOrigin; Vector3 value; switch (matchOrientation) { case MatchOrientation.WorldSpaceUp: reticleUp = Vector3.up; if (m_MatchDirectionalInput && interactor != null && m_TeleportForwardPerInteractor.TryGetValue(interactor, out value)) { optionalReticleForward = value; } else if ((Object)(object)xrOrigin != (Object)null) { optionalReticleForward = ((Component)xrOrigin.Camera).transform.forward; } break; case MatchOrientation.TargetUp: reticleUp = ((Component)this).transform.up; if (m_MatchDirectionalInput && interactor != null && m_TeleportForwardPerInteractor.TryGetValue(interactor, out value)) { optionalReticleForward = value; } else if ((Object)(object)xrOrigin != (Object)null) { optionalReticleForward = ((Component)xrOrigin.Camera).transform.forward; } break; case MatchOrientation.TargetUpAndForward: reticleUp = ((Component)this).transform.up; optionalReticleForward = ((Component)this).transform.forward; break; case MatchOrientation.None: if ((Object)(object)xrOrigin != (Object)null) { reticleUp = xrOrigin.Origin.transform.up; optionalReticleForward = ((Component)xrOrigin.Camera).transform.forward; } break; } } [Obsolete("GenerateTeleportRequest(XRBaseInteractor, RaycastHit, ref TeleportRequest) has been deprecated. Use GenerateTeleportRequest(IXRInteractor, RaycastHit, ref TeleportRequest) instead.")] protected virtual bool GenerateTeleportRequest(XRBaseInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest) { //IL_0002: Unknown result type (might be due to invalid IL or missing references) return GenerateTeleportRequest((IXRInteractor)interactor, raycastHit, ref teleportRequest); } } [AddComponentMenu("XR/Teleportation Anchor", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.TeleportationAnchor.html")] public class TeleportationAnchor : BaseTeleportationInteractable { [SerializeField] [Tooltip("The Transform that represents the teleportation destination.")] private Transform m_TeleportAnchorTransform; public Transform teleportAnchorTransform { get { return m_TeleportAnchorTransform; } set { m_TeleportAnchorTransform = value; } } protected void OnValidate() { if ((Object)(object)m_TeleportAnchorTransform == (Object)null) { m_TeleportAnchorTransform = ((Component)this).transform; } } protected override void Reset() { m_TeleportAnchorTransform = ((Component)this).transform; } protected void OnDrawGizmos() { //IL_000f: Unknown result type (might be due to invalid IL or missing references) //IL_001f: Unknown result type (might be due to invalid IL or missing references) //IL_002a: Unknown result type (might be due to invalid IL or missing references) if (!((Object)(object)m_TeleportAnchorTransform == (Object)null)) { Gizmos.color = Color.blue; GizmoHelpers.DrawWireCubeOriented(m_TeleportAnchorTransform.position, m_TeleportAnchorTransform.rotation, 1f); GizmoHelpers.DrawAxisArrows(m_TeleportAnchorTransform, 1f); } } public override Transform GetAttachTransform(IXRInteractor interactor) { return m_TeleportAnchorTransform; } public void RequestTeleport() { SendTeleportRequest(null); } protected override bool GenerateTeleportRequest(IXRInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest) { //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_001c: Unknown result type (might be due to invalid IL or missing references) //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)m_TeleportAnchorTransform == (Object)null) { return false; } teleportRequest.destinationPosition = m_TeleportAnchorTransform.position; teleportRequest.destinationRotation = m_TeleportAnchorTransform.rotation; return true; } [ContextMenu("Teleport to anchor", false)] private void RequestTeleportFromEditor() { RequestTeleport(); } [ContextMenu("Teleport to anchor", true)] private bool RequestTeleportFromEditorValidate() { return Application.isPlaying; } } [AddComponentMenu("XR/Teleportation Area", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.TeleportationArea.html")] public class TeleportationArea : BaseTeleportationInteractable { protected override bool GenerateTeleportRequest(IXRInteractor interactor, RaycastHit raycastHit, ref TeleportRequest teleportRequest) { //IL_0028: Unknown result type (might be due to invalid IL or missing references) //IL_002d: Unknown result type (might be due to invalid IL or missing references) //IL_0039: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_001b: Unknown result type (might be due to invalid IL or missing references) if ((Object)(object)((RaycastHit)(ref raycastHit)).collider == (Object)null) { return false; } if (IsSphereCastRay(interactor, out var _) && IsSphereCastOverlap(raycastHit)) { return false; } teleportRequest.destinationPosition = ((RaycastHit)(ref raycastHit)).point; teleportRequest.destinationRotation = ((Component)this).transform.rotation; return true; } public override bool IsSelectableBy(IXRSelectInteractor interactor) { //IL_001f: Unknown result type (might be due to invalid IL or missing references) bool flag = base.IsSelectableBy(interactor); if (flag && IsSphereCastRay(interactor, out var rayInteractor) && rayInteractor.TryGetCurrent3DRaycastHit(out var raycastHit) && IsSphereCastOverlap(raycastHit)) { return false; } return flag; } private static bool IsSphereCastRay(IXRInteractor interactor, out XRRayInteractor rayInteractor) { rayInteractor = interactor as XRRayInteractor; if ((Object)(object)rayInteractor != (Object)null) { return rayInteractor.hitDetectionType == XRRayInteractor.HitDetectionType.SphereCast; } return false; } private static bool IsSphereCastOverlap(RaycastHit raycastHit) { //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0017: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0025: Unknown result type (might be due to invalid IL or missing references) //IL_0032: Unknown result type (might be due to invalid IL or missing references) if (((RaycastHit)(ref raycastHit)).distance != 0f) { return false; } Vector3 point = ((RaycastHit)(ref raycastHit)).point; if (point.x == 0f && point.y == 0f) { return point.z == 0f; } return false; } } [AddComponentMenu("XR/Locomotion/Teleportation Provider", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.TeleportationProvider.html")] public class TeleportationProvider : LocomotionProvider { [SerializeField] [Tooltip("The time (in seconds) to delay the teleportation once it is activated.")] private float m_DelayTime; private bool m_HasExclusiveLocomotion; private float m_TimeStarted = -1f; protected TeleportRequest currentRequest { get; set; } protected bool validRequest { get; set; } public float delayTime { get { return m_DelayTime; } set { m_DelayTime = value; } } public virtual bool QueueTeleportRequest(TeleportRequest teleportRequest) { currentRequest = teleportRequest; validRequest = true; return true; } protected override void Awake() { base.Awake(); if ((Object)(object)base.system != (Object)null && m_DelayTime > 0f && m_DelayTime > base.system.timeout) { Debug.LogWarning((object)$"Delay Time ({m_DelayTime}) is longer than the Locomotion System's Timeout ({base.system.timeout}).", (Object)(object)this); } } protected virtual void Update() { //IL_00a0: Unknown result type (might be due to invalid IL or missing references) //IL_00b4: Unknown result type (might be due to invalid IL or missing references) //IL_00b9: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00d2: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00e7: Unknown result type (might be due to invalid IL or missing references) //IL_00ec: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_0107: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0123: Unknown result type (might be due to invalid IL or missing references) //IL_0124: Unknown result type (might be due to invalid IL or missing references) //IL_0129: Unknown result type (might be due to invalid IL or missing references) //IL_012b: Unknown result type (might be due to invalid IL or missing references) if (!validRequest) { base.locomotionPhase = LocomotionPhase.Idle; return; } if (!m_HasExclusiveLocomotion) { if (!BeginLocomotion()) { return; } m_HasExclusiveLocomotion = true; base.locomotionPhase = LocomotionPhase.Started; m_TimeStarted = Time.time; } if (m_DelayTime > 0f && Time.time - m_TimeStarted < m_DelayTime) { return; } base.locomotionPhase = LocomotionPhase.Moving; XROrigin xrOrigin = base.system.xrOrigin; if ((Object)(object)xrOrigin != (Object)null) { switch (currentRequest.matchOrientation) { case MatchOrientation.WorldSpaceUp: xrOrigin.MatchOriginUp(Vector3.up); break; case MatchOrientation.TargetUp: xrOrigin.MatchOriginUp(currentRequest.destinationRotation * Vector3.up); break; case MatchOrientation.TargetUpAndForward: xrOrigin.MatchOriginUpCameraForward(currentRequest.destinationRotation * Vector3.up, currentRequest.destinationRotation * Vector3.forward); break; } Vector3 val = xrOrigin.Origin.transform.up * xrOrigin.CameraInOriginSpaceHeight; Vector3 val2 = currentRequest.destinationPosition + val; xrOrigin.MoveCameraToWorldLocation(val2); } EndLocomotion(); m_HasExclusiveLocomotion = false; validRequest = false; base.locomotionPhase = LocomotionPhase.Done; } } [Serializable] public sealed class VignetteParameters { internal static class Defaults { public const float apertureSizeMax = 1f; public const float featheringEffectMax = 1f; public const float apertureVerticalPositionMax = 0.2f; public const float apertureVerticalPositionMin = -0.2f; public const float apertureSizeDefault = 0.7f; public const float featheringEffectDefault = 0.2f; public const float easeInTimeDefault = 0.3f; public const float easeOutTimeDefault = 0.3f; public const bool easeInTimeLockDefault = false; public const float easeOutDelayTimeDefault = 0f; public static readonly Color vignetteColorDefault = Color.black; public static readonly Color vignetteColorBlendDefault = Color.black; public const float apertureVerticalPositionDefault = 0f; public static readonly VignetteParameters defaultEffect = new VignetteParameters { apertureSize = 0.7f, featheringEffect = 0.2f, easeInTime = 0.3f, easeOutTime = 0.3f, easeInTimeLock = false, easeOutDelayTime = 0f, vignetteColor = vignetteColorDefault, vignetteColorBlend = vignetteColorBlendDefault, apertureVerticalPosition = 0f }; public static readonly VignetteParameters noEffect = new VignetteParameters { apertureSize = 1f, featheringEffect = 0f, easeInTime = 0f, easeOutTime = 0f, easeInTimeLock = false, easeOutDelayTime = 0f, vignetteColor = vignetteColorDefault, vignetteColorBlend = vignetteColorBlendDefault, apertureVerticalPosition = 0f }; } [SerializeField] [Range(0f, 1f)] private float m_ApertureSize = 0.7f; [SerializeField] [Range(0f, 1f)] private float m_FeatheringEffect = 0.2f; [SerializeField] private float m_EaseInTime = 0.3f; [SerializeField] private float m_EaseOutTime = 0.3f; [SerializeField] private bool m_EaseInTimeLock; [SerializeField] private float m_EaseOutDelayTime; [SerializeField] private Color m_VignetteColor = Defaults.vignetteColorDefault; [SerializeField] private Color m_VignetteColorBlend = Defaults.vignetteColorBlendDefault; [SerializeField] [Range(-0.2f, 0.2f)] private float m_ApertureVerticalPosition; public float apertureSize { get { return m_ApertureSize; } set { m_ApertureSize = value; } } public float featheringEffect { get { return m_FeatheringEffect; } set { m_FeatheringEffect = value; } } public float easeInTime { get { return m_EaseInTime; } set { m_EaseInTime = value; } } public float easeOutTime { get { return m_EaseOutTime; } set { m_EaseOutTime = value; } } public bool easeInTimeLock { get { return m_EaseInTimeLock; } set { m_EaseInTimeLock = value; } } public float easeOutDelayTime { get { return m_EaseOutDelayTime; } set { m_EaseOutDelayTime = value; } } public Color vignetteColor { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_VignetteColor; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_VignetteColor = value; } } public Color vignetteColorBlend { get { //IL_0001: Unknown result type (might be due to invalid IL or missing references) return m_VignetteColorBlend; } set { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0002: Unknown result type (might be due to invalid IL or missing references) m_VignetteColorBlend = value; } } public float apertureVerticalPosition { get { return m_ApertureVerticalPosition; } set { m_ApertureVerticalPosition = value; } } public void CopyFrom(VignetteParameters parameters) { //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) if (parameters == null) { throw new ArgumentNullException("parameters"); } apertureSize = parameters.apertureSize; featheringEffect = parameters.featheringEffect; easeInTime = parameters.easeInTime; easeOutTime = parameters.easeOutTime; easeInTimeLock = parameters.easeInTimeLock; easeOutDelayTime = parameters.easeOutDelayTime; vignetteColor = parameters.vignetteColor; vignetteColorBlend = parameters.vignetteColorBlend; apertureVerticalPosition = parameters.apertureVerticalPosition; } } public enum EaseState { NotEasing, EasingIn, EasingInHoldBeforeEasingOut, EasingOutDelay, EasingOut } public interface ITunnelingVignetteProvider { VignetteParameters vignetteParameters { get; } } [Serializable] public class LocomotionVignetteProvider : ITunnelingVignetteProvider { [SerializeField] private LocomotionProvider m_LocomotionProvider; [SerializeField] private bool m_Enabled; [SerializeField] private bool m_OverrideDefaultParameters; [SerializeField] private VignetteParameters m_OverrideParameters = new VignetteParameters(); public LocomotionProvider locomotionProvider { get { return m_LocomotionProvider; } set { m_LocomotionProvider = value; } } public bool enabled { get { return m_Enabled; } set { m_Enabled = value; } } public bool overrideDefaultParameters { get { return m_OverrideDefaultParameters; } set { m_OverrideDefaultParameters = value; } } public VignetteParameters overrideParameters { get { return m_OverrideParameters; } set { m_OverrideParameters = value; } } public VignetteParameters vignetteParameters { get { if (!m_OverrideDefaultParameters) { return null; } return m_OverrideParameters; } } } [AddComponentMenu("XR/Locomotion/Tunneling Vignette Controller", 11)] [HelpURL("https://docs.unity3d.com/Packages/com.unity.xr.interaction.toolkit@2.6/api/UnityEngine.XR.Interaction.Toolkit.TunnelingVignetteController.html")] public class TunnelingVignetteController : MonoBehaviour { private static class ShaderPropertyLookup { public static readonly int apertureSize = Shader.PropertyToID("_ApertureSize"); public static readonly int featheringEffect = Shader.PropertyToID("_FeatheringEffect"); public static readonly int vignetteColor = Shader.PropertyToID("_VignetteColor"); public static readonly int vignetteColorBlend = Shader.PropertyToID("_VignetteColorBlend"); } private class ProviderRecord { public ITunnelingVignetteProvider provider { get; } public EaseState easeState { get; set; } public float dynamicApertureSize { get; set; } = 1f; public bool easeInLockEnded { get; set; } public float dynamicEaseOutDelayTime { get; set; } public ProviderRecord(ITunnelingVignetteProvider provider) { this.provider = provider; } } private const string k_DefaultShader = "VR/TunnelingVignette"; [SerializeField] private VignetteParameters m_DefaultParameters = new VignetteParameters(); [SerializeField] private VignetteParameters m_CurrentParameters = new VignetteParameters(); [SerializeField] private List m_LocomotionVignetteProviders = new List(); private readonly List m_ProviderRecords = new List(); private MeshRenderer m_MeshRender; private MeshFilter m_MeshFilter; private Material m_SharedMaterial; private MaterialPropertyBlock m_VignettePropertyBlock; public VignetteParameters defaultParameters { get { return m_DefaultParameters; } set { m_DefaultParameters = value; } } public VignetteParameters currentParameters => m_CurrentParameters; public List locomotionVignetteProviders { get { return m_LocomotionVignetteProviders; } set { m_LocomotionVignetteProviders = value; } } public void BeginTunnelingVignette(ITunnelingVignetteProvider provider) { foreach (ProviderRecord providerRecord in m_ProviderRecords) { if (providerRecord.provider == provider) { providerRecord.easeState = EaseState.EasingIn; return; } } m_ProviderRecords.Add(new ProviderRecord(provider) { easeState = EaseState.EasingIn }); } public void EndTunnelingVignette(ITunnelingVignetteProvider provider) { VignetteParameters vignetteParameters = provider.vignetteParameters ?? m_DefaultParameters; foreach (ProviderRecord providerRecord in m_ProviderRecords) { if (providerRecord.provider == provider) { providerRecord.easeState = ((vignetteParameters.easeInTimeLock && !providerRecord.easeInLockEnded) ? EaseState.EasingInHoldBeforeEasingOut : ((vignetteParameters.easeOutDelayTime > 0f && providerRecord.dynamicEaseOutDelayTime < vignetteParameters.easeOutDelayTime) ? EaseState.EasingOutDelay : EaseState.EasingOut)); return; } } EaseState easeState = (vignetteParameters.easeInTimeLock ? EaseState.EasingInHoldBeforeEasingOut : ((vignetteParameters.easeOutDelayTime > 0f) ? EaseState.EasingOutDelay : EaseState.EasingOut)); m_ProviderRecords.Add(new ProviderRecord(provider) { easeState = easeState }); } [Conditional("UNITY_EDITOR")] internal void PreviewInEditor(VignetteParameters previewParameters) { if (!Application.isPlaying && ((Component)this).gameObject.activeInHierarchy) { UpdateTunnelingVignette(previewParameters); } } protected virtual void Awake() { m_CurrentParameters.CopyFrom(VignetteParameters.Defaults.noEffect); UpdateTunnelingVignette(VignetteParameters.Defaults.noEffect); } [Conditional("UNITY_EDITOR")] protected virtual void Reset() { m_DefaultParameters.CopyFrom(VignetteParameters.Defaults.defaultEffect); m_CurrentParameters.CopyFrom(VignetteParameters.Defaults.noEffect); UpdateTunnelingVignette(m_DefaultParameters); } protected virtual void Update() { if (m_LocomotionVignetteProviders.Count > 0) { foreach (LocomotionVignetteProvider locomotionVignetteProvider in m_LocomotionVignetteProviders) { LocomotionProvider locomotionProvider = locomotionVignetteProvider.locomotionProvider; if (locomotionVignetteProvider.enabled && !((Object)(object)locomotionProvider == (Object)null)) { switch (locomotionProvider.locomotionPhase) { case LocomotionPhase.Started: case LocomotionPhase.Moving: BeginTunnelingVignette(locomotionVignetteProvider); break; case LocomotionPhase.Done: EndTunnelingVignette(locomotionVignetteProvider); break; } } } } if (m_ProviderRecords.Count == 0) { return; } foreach (ProviderRecord providerRecord2 in m_ProviderRecords) { VignetteParameters vignetteParameters = providerRecord2.provider.vignetteParameters ?? m_DefaultParameters; float dynamicApertureSize = providerRecord2.dynamicApertureSize; switch (providerRecord2.easeState) { case EaseState.NotEasing: providerRecord2.dynamicApertureSize = 1f; providerRecord2.dynamicEaseOutDelayTime = 0f; providerRecord2.easeInLockEnded = false; continue; case EaseState.EasingIn: { float num3 = Mathf.Max(vignetteParameters.easeInTime, 0f); float apertureSize2 = vignetteParameters.apertureSize; providerRecord2.easeInLockEnded = false; if (num3 > 0f && dynamicApertureSize > apertureSize2) { float num4 = dynamicApertureSize + (apertureSize2 - 1f) / num3 * Time.unscaledDeltaTime; providerRecord2.dynamicApertureSize = ((num4 < apertureSize2) ? apertureSize2 : num4); } else { providerRecord2.dynamicApertureSize = apertureSize2; } continue; } case EaseState.EasingInHoldBeforeEasingOut: if (!providerRecord2.easeInLockEnded) { float num = Mathf.Max(vignetteParameters.easeInTime, 0f); float apertureSize = vignetteParameters.apertureSize; if (num > 0f && dynamicApertureSize > apertureSize) { float num2 = dynamicApertureSize + (apertureSize - 1f) / num * Time.unscaledDeltaTime; providerRecord2.dynamicApertureSize = ((num2 < apertureSize) ? apertureSize : num2); continue; } providerRecord2.easeInLockEnded = true; if (!(vignetteParameters.easeOutDelayTime > 0f) || !(providerRecord2.dynamicEaseOutDelayTime < vignetteParameters.easeOutDelayTime)) { providerRecord2.easeState = EaseState.EasingOut; break; } providerRecord2.easeState = EaseState.EasingOutDelay; } else { if (!(vignetteParameters.easeOutDelayTime > 0f)) { providerRecord2.easeState = EaseState.EasingOutDelay; break; } providerRecord2.easeState = EaseState.EasingOutDelay; } goto case EaseState.EasingOutDelay; case EaseState.EasingOutDelay: { float dynamicEaseOutDelayTime = providerRecord2.dynamicEaseOutDelayTime; float num5 = Mathf.Max(vignetteParameters.easeOutDelayTime, 0f); if (num5 > 0f && dynamicEaseOutDelayTime < num5) { dynamicEaseOutDelayTime += Time.unscaledDeltaTime; providerRecord2.dynamicEaseOutDelayTime = ((dynamicEaseOutDelayTime > num5) ? num5 : dynamicEaseOutDelayTime); } if (!(providerRecord2.dynamicEaseOutDelayTime >= num5)) { continue; } providerRecord2.easeState = EaseState.EasingOut; break; } case EaseState.EasingOut: break; default: continue; } float num6 = Mathf.Max(vignetteParameters.easeOutTime, 0f); float apertureSize3 = vignetteParameters.apertureSize; if (num6 > 0f && dynamicApertureSize < 1f) { float num7 = dynamicApertureSize + (1f - apertureSize3) / num6 * Time.unscaledDeltaTime; providerRecord2.dynamicApertureSize = ((num7 > 1f) ? 1f : num7); } else { providerRecord2.dynamicApertureSize = 1f; } if (providerRecord2.dynamicApertureSize >= 1f) { providerRecord2.easeState = EaseState.NotEasing; } } float num8 = 1f; ProviderRecord providerRecord = null; foreach (ProviderRecord providerRecord3 in m_ProviderRecords) { float dynamicApertureSize2 = providerRecord3.dynamicApertureSize; if (dynamicApertureSize2 < num8) { providerRecord = providerRecord3; num8 = dynamicApertureSize2; } } if (providerRecord != null) { m_CurrentParameters.CopyFrom(providerRecord.provider.vignetteParameters ?? m_DefaultParameters); } m_CurrentParameters.apertureSize = num8; UpdateTunnelingVignette(m_CurrentParameters); } private void UpdateTunnelingVignette(VignetteParameters parameters) { //IL_0095: Unknown result type (might be due to invalid IL or missing references) //IL_009a: Unknown result type (might be due to invalid IL or missing references) //IL_009b: Unknown result type (might be due to invalid IL or missing references) //IL_005c: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_00bc: Unknown result type (might be due to invalid IL or missing references) if (parameters == null) { parameters = m_DefaultParameters; } if (TrySetUpMaterial()) { ((Renderer)m_MeshRender).GetPropertyBlock(m_VignettePropertyBlock); m_VignettePropertyBlock.SetFloat(ShaderPropertyLookup.apertureSize, parameters.apertureSize); m_VignettePropertyBlock.SetFloat(ShaderPropertyLookup.featheringEffect, parameters.featheringEffect); m_VignettePropertyBlock.SetColor(ShaderPropertyLookup.vignetteColor, parameters.vignetteColor); m_VignettePropertyBlock.SetColor(ShaderPropertyLookup.vignetteColorBlend, parameters.vignetteColorBlend); ((Renderer)m_MeshRender).SetPropertyBlock(m_VignettePropertyBlock); } Transform transform = ((Component)this).transform; Vector3 localPosition = transform.localPosition; if (!Mathf.Approximately(localPosition.y, parameters.apertureVerticalPosition)) { localPosition.y = parameters.apertureVerticalPosition; transform.localPosition = localPosition; } } private bool TrySetUpMaterial() { //IL_0042: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Expected O, but got Unknown //IL_00e6: Unknown result type (might be due to invalid IL or missing references) //IL_00eb: Unknown result type (might be due to invalid IL or missing references) //IL_00fb: Expected O, but got Unknown if ((Object)(object)m_MeshRender == (Object)null) { m_MeshRender = ((Component)this).GetComponent(); } if ((Object)(object)m_MeshRender == (Object)null) { m_MeshRender = ((Component)this).gameObject.AddComponent(); } if (m_VignettePropertyBlock == null) { m_VignettePropertyBlock = new MaterialPropertyBlock(); } if ((Object)(object)m_MeshFilter == (Object)null) { m_MeshFilter = ((Component)this).GetComponent(); } if ((Object)(object)m_MeshFilter == (Object)null) { m_MeshFilter = ((Component)this).gameObject.AddComponent(); } if ((Object)(object)m_MeshFilter.sharedMesh == (Object)null) { Debug.LogWarning((object)"The default mesh for the TunnelingVignetteController is not set. Make sure to import it from the Tunneling Vignette Sample of XR Interaction Toolkit.", (Object)(object)this); return false; } if ((Object)(object)((Renderer)m_MeshRender).sharedMaterial == (Object)null) { Shader val = Shader.Find("VR/TunnelingVignette"); if ((Object)(object)val == (Object)null) { Debug.LogWarning((object)"The default material for the TunnelingVignetteController is not set, and the default Shader: VR/TunnelingVignette cannot be found. Make sure they are imported from the Tunneling Vignette Sample of XR Interaction Toolkit.", (Object)(object)this); return false; } Debug.LogWarning((object)"The default material for the TunnelingVignetteController is not set. Make sure it is imported from the Tunneling Vignette Sample of XR Interaction Toolkit. + Try creating a material using the default Shader: VR/TunnelingVignette", (Object)(object)this); m_SharedMaterial = new Material(val) { name = "DefaultTunnelingVignette" }; ((Renderer)m_MeshRender).sharedMaterial = m_SharedMaterial; } else { m_SharedMaterial = ((Renderer)m_MeshRender).sharedMaterial; } return true; } } public static class GizmoHelpers { private static readonly Color s_XAxisColor = new Color(73f / 85f, 0.24313726f, 0.11372549f, 0.93f); private static readonly Color s_YAxisColor = new Color(0.6039216f, 81f / 85f, 24f / 85f, 0.93f); private static readonly Color s_ZAxisColor = new Color(0.22745098f, 0.47843137f, 0.972549f, 0.93f); private static readonly Dictionary s_AxisMapping = new Dictionary { { Vector3.up, (Vector3.forward, Vector3.right) }, { Vector3.forward, (Vector3.right, Vector3.up) }, { Vector3.right, (Vector3.up, Vector3.forward) } }; public static void DrawWirePlaneOriented(Vector3 position, Quaternion rotation, float size) { //IL_0044: Unknown result type (might be due to invalid IL or missing references) //IL_0045: Unknown result type (might be due to invalid IL or missing references) //IL_0046: Unknown result type (might be due to invalid IL or missing references) //IL_004b: Unknown result type (might be due to invalid IL or missing references) //IL_004c: Unknown result type (might be due to invalid IL or missing references) //IL_0051: Unknown result type (might be due to invalid IL or missing references) //IL_0052: Unknown result type (might be due to invalid IL or missing references) //IL_0053: Unknown result type (might be due to invalid IL or missing references) //IL_0058: Unknown result type (might be due to invalid IL or missing references) //IL_0059: Unknown result type (might be due to invalid IL or missing references) //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0064: Unknown result type (might be due to invalid IL or missing references) //IL_0065: Unknown result type (might be due to invalid IL or missing references) //IL_006a: Unknown result type (might be due to invalid IL or missing references) //IL_006b: Unknown result type (might be due to invalid IL or missing references) //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0073: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_0079: Unknown result type (might be due to invalid IL or missing references) //IL_0083: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0086: Unknown result type (might be due to invalid IL or missing references) //IL_008b: Unknown result type (might be due to invalid IL or missing references) //IL_008c: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0092: Unknown result type (might be due to invalid IL or missing references) //IL_0093: Unknown result type (might be due to invalid IL or missing references) //IL_0098: Unknown result type (might be due to invalid IL or missing references) //IL_0099: Unknown result type (might be due to invalid IL or missing references) //IL_00a3: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00aa: Unknown result type (might be due to invalid IL or missing references) //IL_00ab: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b1: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) float num = size / 2f; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(num, 0f, 0f - num); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num, 0f, num); Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(0f - num, 0f, 0f - num); Vector3 val4 = default(Vector3); ((Vector3)(ref val4))..ctor(0f - num, 0f, num); Gizmos.DrawLine(rotation * val + position, rotation * val2 + position); Gizmos.DrawLine(rotation * val2 + position, rotation * val4 + position); Gizmos.DrawLine(rotation * val4 + position, rotation * val3 + position); Gizmos.DrawLine(rotation * val3 + position, rotation * val + position); } public static void DrawWireCubeOriented(Vector3 position, Quaternion rotation, float size) { //IL_0070: Unknown result type (might be due to invalid IL or missing references) //IL_0071: Unknown result type (might be due to invalid IL or missing references) //IL_0072: Unknown result type (might be due to invalid IL or missing references) //IL_0077: Unknown result type (might be due to invalid IL or missing references) //IL_0078: Unknown result type (might be due to invalid IL or missing references) //IL_007d: Unknown result type (might be due to invalid IL or missing references) //IL_007e: Unknown result type (might be due to invalid IL or missing references) //IL_007f: Unknown result type (might be due to invalid IL or missing references) //IL_0084: Unknown result type (might be due to invalid IL or missing references) //IL_0085: Unknown result type (might be due to invalid IL or missing references) //IL_008f: Unknown result type (might be due to invalid IL or missing references) //IL_0090: Unknown result type (might be due to invalid IL or missing references) //IL_0091: Unknown result type (might be due to invalid IL or missing references) //IL_0096: Unknown result type (might be due to invalid IL or missing references) //IL_0097: Unknown result type (might be due to invalid IL or missing references) //IL_009c: Unknown result type (might be due to invalid IL or missing references) //IL_009d: Unknown result type (might be due to invalid IL or missing references) //IL_009f: Unknown result type (might be due to invalid IL or missing references) //IL_00a4: Unknown result type (might be due to invalid IL or missing references) //IL_00a5: Unknown result type (might be due to invalid IL or missing references) //IL_00af: Unknown result type (might be due to invalid IL or missing references) //IL_00b0: Unknown result type (might be due to invalid IL or missing references) //IL_00b2: Unknown result type (might be due to invalid IL or missing references) //IL_00b7: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00bd: Unknown result type (might be due to invalid IL or missing references) //IL_00be: Unknown result type (might be due to invalid IL or missing references) //IL_00bf: Unknown result type (might be due to invalid IL or missing references) //IL_00c4: Unknown result type (might be due to invalid IL or missing references) //IL_00c5: Unknown result type (might be due to invalid IL or missing references) //IL_00cf: Unknown result type (might be due to invalid IL or missing references) //IL_00d0: Unknown result type (might be due to invalid IL or missing references) //IL_00d1: Unknown result type (might be due to invalid IL or missing references) //IL_00d6: Unknown result type (might be due to invalid IL or missing references) //IL_00d7: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_00dd: Unknown result type (might be due to invalid IL or missing references) //IL_00de: Unknown result type (might be due to invalid IL or missing references) //IL_00e3: Unknown result type (might be due to invalid IL or missing references) //IL_00e4: Unknown result type (might be due to invalid IL or missing references) //IL_00ee: Unknown result type (might be due to invalid IL or missing references) //IL_00ef: Unknown result type (might be due to invalid IL or missing references) //IL_00f1: Unknown result type (might be due to invalid IL or missing references) //IL_00f6: Unknown result type (might be due to invalid IL or missing references) //IL_00f7: Unknown result type (might be due to invalid IL or missing references) //IL_00fc: Unknown result type (might be due to invalid IL or missing references) //IL_00fd: Unknown result type (might be due to invalid IL or missing references) //IL_00ff: Unknown result type (might be due to invalid IL or missing references) //IL_0104: Unknown result type (might be due to invalid IL or missing references) //IL_0105: Unknown result type (might be due to invalid IL or missing references) //IL_010f: Unknown result type (might be due to invalid IL or missing references) //IL_0110: Unknown result type (might be due to invalid IL or missing references) //IL_0112: Unknown result type (might be due to invalid IL or missing references) //IL_0117: Unknown result type (might be due to invalid IL or missing references) //IL_0118: Unknown result type (might be due to invalid IL or missing references) //IL_011d: Unknown result type (might be due to invalid IL or missing references) //IL_011e: Unknown result type (might be due to invalid IL or missing references) //IL_0120: Unknown result type (might be due to invalid IL or missing references) //IL_0125: Unknown result type (might be due to invalid IL or missing references) //IL_0126: Unknown result type (might be due to invalid IL or missing references) //IL_0130: Unknown result type (might be due to invalid IL or missing references) //IL_0131: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_0138: Unknown result type (might be due to invalid IL or missing references) //IL_0139: Unknown result type (might be due to invalid IL or missing references) //IL_013e: Unknown result type (might be due to invalid IL or missing references) //IL_013f: Unknown result type (might be due to invalid IL or missing references) //IL_0141: Unknown result type (might be due to invalid IL or missing references) //IL_0146: Unknown result type (might be due to invalid IL or missing references) //IL_0147: Unknown result type (might be due to invalid IL or missing references) //IL_0151: Unknown result type (might be due to invalid IL or missing references) //IL_0152: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_0159: Unknown result type (might be due to invalid IL or missing references) //IL_015a: Unknown result type (might be due to invalid IL or missing references) //IL_015f: Unknown result type (might be due to invalid IL or missing references) //IL_0160: Unknown result type (might be due to invalid IL or missing references) //IL_0162: Unknown result type (might be due to invalid IL or missing references) //IL_0167: Unknown result type (might be due to invalid IL or missing references) //IL_0168: Unknown result type (might be due to invalid IL or missing references) //IL_0172: Unknown result type (might be due to invalid IL or missing references) //IL_0173: Unknown result type (might be due to invalid IL or missing references) //IL_0175: Unknown result type (might be due to invalid IL or missing references) //IL_017a: Unknown result type (might be due to invalid IL or missing references) //IL_017b: Unknown result type (might be due to invalid IL or missing references) //IL_0180: Unknown result type (might be due to invalid IL or missing references) //IL_0181: Unknown result type (might be due to invalid IL or missing references) //IL_0182: Unknown result type (might be due to invalid IL or missing references) //IL_0187: Unknown result type (might be due to invalid IL or missing references) //IL_0188: Unknown result type (might be due to invalid IL or missing references) //IL_0192: Unknown result type (might be due to invalid IL or missing references) //IL_0193: Unknown result type (might be due to invalid IL or missing references) //IL_0195: Unknown result type (might be due to invalid IL or missing references) //IL_019a: Unknown result type (might be due to invalid IL or missing references) //IL_019b: Unknown result type (might be due to invalid IL or missing references) //IL_01a0: Unknown result type (might be due to invalid IL or missing references) //IL_01a1: Unknown result type (might be due to invalid IL or missing references) //IL_01a2: Unknown result type (might be due to invalid IL or missing references) //IL_01a7: Unknown result type (might be due to invalid IL or missing references) //IL_01a8: Unknown result type (might be due to invalid IL or missing references) //IL_01b2: Unknown result type (might be due to invalid IL or missing references) //IL_01b3: Unknown result type (might be due to invalid IL or missing references) //IL_01b5: Unknown result type (might be due to invalid IL or missing references) //IL_01ba: Unknown result type (might be due to invalid IL or missing references) //IL_01bb: Unknown result type (might be due to invalid IL or missing references) //IL_01c0: Unknown result type (might be due to invalid IL or missing references) //IL_01c1: Unknown result type (might be due to invalid IL or missing references) //IL_01c3: Unknown result type (might be due to invalid IL or missing references) //IL_01c8: Unknown result type (might be due to invalid IL or missing references) //IL_01c9: Unknown result type (might be due to invalid IL or missing references) //IL_01d3: Unknown result type (might be due to invalid IL or missing references) //IL_01d4: Unknown result type (might be due to invalid IL or missing references) //IL_01d6: Unknown result type (might be due to invalid IL or missing references) //IL_01db: Unknown result type (might be due to invalid IL or missing references) //IL_01dc: Unknown result type (might be due to invalid IL or missing references) //IL_01e1: Unknown result type (might be due to invalid IL or missing references) //IL_01e2: Unknown result type (might be due to invalid IL or missing references) //IL_01e3: Unknown result type (might be due to invalid IL or missing references) //IL_01e8: Unknown result type (might be due to invalid IL or missing references) //IL_01e9: Unknown result type (might be due to invalid IL or missing references) float num = size / 2f; Vector3 val = default(Vector3); ((Vector3)(ref val))..ctor(num, 0f, 0f - num); Vector3 val2 = default(Vector3); ((Vector3)(ref val2))..ctor(num, 0f, num); Vector3 val3 = default(Vector3); ((Vector3)(ref val3))..ctor(0f - num, 0f, 0f - num); Vector3 val4 = default(Vector3); ((Vector3)(ref val4))..ctor(0f - num, 0f, num); Vector3 val5 = default(Vector3); ((Vector3)(ref val5))..ctor(num, size, 0f - num); Vector3 val6 = default(Vector3); ((Vector3)(ref val6))..ctor(num, size, num); Vector3 val7 = default(Vector3); ((Vector3)(ref val7))..ctor(0f - num, size, 0f - num); Vector3 val8 = default(Vector3); ((Vector3)(ref val8))..ctor(0f - num, size, num); Gizmos.DrawLine(rotation * val + position, rotation * val2 + position); Gizmos.DrawLine(rotation * val2 + position, rotation * val4 + position); Gizmos.DrawLine(rotation * val4 + position, rotation * val3 + position); Gizmos.DrawLine(rotation * val3 + position, rotation * val + position); Gizmos.DrawLine(rotation * val5 + position, rotation * val6 + position); Gizmos.DrawLine(rotation * val6 + position, rotation * val8 + position); Gizmos.DrawLine(rotation * val8 + position, rotation * val7 + position); Gizmos.DrawLine(rotation * val7 + position, rotation * val5 + position); Gizmos.DrawLine(rotation * val5 + position, rotation * val + position); Gizmos.DrawLine(rotation * val6 + position, rotation * val2 + position); Gizmos.DrawLine(rotation * val8 + position, rotation * val4 + position); Gizmos.DrawLine(rotation * val7 + position, rotation * val3 + position); } public static void DrawAxisArrows(Transform transform, float size) { //IL_0001: Unknown result type (might be due to invalid IL or missing references) //IL_0006: Unknown result type (might be due to invalid IL or missing references) //IL_0010: Unknown result type (might be due to invalid IL or missing references) //IL_0012: Unknown result type (might be due to invalid IL or missing references) //IL_0018: Unknown result type (might be due to invalid IL or missing references) //IL_0022: Unknown result type (might be due to invalid IL or missing references) //IL_002c: Unknown result type (might be due to invalid IL or missing references) //IL_002e: Unknown result type (might be due to invalid IL or missing references) //IL_0034: Unknown result type (might be due to invalid IL or missing references) //IL_003e: Unknown result type (might be due to invalid IL or missing references) //IL_0049: Unknown result type (might be due to invalid IL or missing references) //IL_004f: Unknown result type (might be due to invalid IL or missing references) Vector3 position = transform.position; Gizmos.color = s_ZAxisColor; Gizmos.DrawRay(position, transform.forward * size); Gizmos.color = s_YAxisColor; Gizmos.DrawRay(position, transform.up * size); Gizmos.color = s_XAxisColor; Gizmos.DrawRay(position, transform.right * size); } internal static void DrawCapsule(Vector3 center, float height, float radius, Vector3 axis, Color color) { } } [MovedFrom("")] public static class InputHelpers { public enum Button { None = 0, MenuButton = 1, Trigger = 2, Grip = 3, TriggerButton = 4, GripButton = 5, PrimaryButton = 6, PrimaryTouch = 7, SecondaryButton = 8, SecondaryTouch = 9, Primary2DAxisTouch = 10, Primary2DAxisClick = 11, Secondary2DAxisTouch = 12, Secondary2DAxisClick = 13, PrimaryAxis2DUp = 14, PrimaryAxis2DDown = 15, PrimaryAxis2DLeft = 16, PrimaryAxis2DRight = 17, SecondaryAxis2DUp = 18, SecondaryAxis2DDown = 19, SecondaryAxis2DLeft = 20, SecondaryAxis2DRight = 21, [Obsolete("TriggerPressed has been deprecated. Use TriggerButton instead. (UnityUpgradable) -> TriggerButton")] TriggerPressed = 4, [Obsolete("GripPressed has been deprecated. Use GripButton instead. (UnityUpgradable) -> GripButton")] GripPressed = 5 } public enum Axis2D { None, PrimaryAxis2D, SecondaryAxis2D } private enum ButtonReadType { None, Binary, Axis1D, Axis2DUp, Axis2DDown, Axis2DLeft, Axis2DRight } private struct ButtonInfo { public string name; public ButtonReadType type; public ButtonInfo(string name, ButtonReadType type) { this.name = name; this.type = type; } } private static readonly ButtonInfo[] s_ButtonData = new ButtonInfo[22] { new ButtonInfo("", ButtonReadType.None), new ButtonInfo("MenuButton", ButtonReadType.Binary), new ButtonInfo("Trigger", ButtonReadType.Axis1D), new ButtonInfo("Grip", ButtonReadType.Axis1D), new ButtonInfo("TriggerButton", ButtonReadType.Binary), new ButtonInfo("GripButton", ButtonReadType.Binary), new ButtonInfo("PrimaryButton", ButtonReadType.Binary), new ButtonInfo("PrimaryTouch", ButtonReadType.Binary), new ButtonInfo("SecondaryButton", ButtonReadType.Binary), new ButtonInfo("SecondaryTouch", ButtonReadType.Binary), new ButtonInfo("Primary2DAxisTouch", ButtonReadType.Binary), new ButtonInfo("Primary2DAxisClick", ButtonReadType.Binary), new ButtonInfo("Secondary2DAxisTouch", ButtonReadType.Binary), new ButtonInfo("Secondary2DAxisClick", ButtonReadType.Binary), new ButtonInfo("Primary2DAxis", ButtonReadType.Axis2DUp), new ButtonInfo("Primary2DAxis", ButtonReadType.Axis2DDown), new ButtonInfo("Primary2DAxis", ButtonReadType.Axis2DLeft), new ButtonInfo("Primary2DAxis", ButtonReadType.Axis2DRight), new ButtonInfo("Secondary2DAxis", ButtonReadType.Axis2DUp), new ButtonInfo("Secondary2DAxis", ButtonReadType.Axis2DDown), new ButtonInfo("Secondary2DAxis", ButtonReadType.Axis2DLeft), new ButtonInfo("Secondary2DAxis", ButtonReadType.Axis2DRight) }; private static readonly string[] s_Axis2DNames = new string[3] { "", "Primary2DAxis", "Secondary2DAxis" }; private const float k_DefaultPressThreshold = 0.1f; public static bool IsPressed(this InputDevice device, Button button, out bool isPressed, float pressThreshold = -1f) { //IL_0063: Unknown result type (might be due to invalid IL or missing references) //IL_0081: Unknown result type (might be due to invalid IL or missing references) //IL_00b8: Unknown result type (might be due to invalid IL or missing references) //IL_00f5: Unknown result type (might be due to invalid IL or missing references) //IL_0133: Unknown result type (might be due to invalid IL or missing references) //IL_016e: Unknown result type (might be due to invalid IL or missing references) //IL_00dc: Unknown result type (might be due to invalid IL or missing references) //IL_0119: Unknown result type (might be due to invalid IL or missing references) //IL_0154: Unknown result type (might be due to invalid IL or missing references) //IL_018f: Unknown result type (might be due to invalid IL or missing references) if ((int)button >= s_ButtonData.Length) { throw new ArgumentException("[InputHelpers.IsPressed] The value of