Decompiled source of XSplitScreen v3.1.4

XSplitScreen.dll

Decompiled 6 months ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Permissions;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using DoDad.XLibrary;
using DoDad.XLibrary.Components;
using DoDad.XLibrary.Interfaces;
using DoDad.XLibrary.Language;
using DoDad.XLibrary.Toolbox;
using DoDad.XSplitScreen.Assignments;
using DoDad.XSplitScreen.Components;
using DoDad.XSplitScreen.Hooks;
using IL.RoR2.UI;
using Microsoft.CodeAnalysis;
using Mono.Cecil.Cil;
using MonoMod.Cil;
using MonoMod.RuntimeDetour;
using MonoMod.RuntimeDetour.HookGen;
using Newtonsoft.Json;
using On.RoR2;
using On.RoR2.UI;
using On.RoR2.UI.MainMenu;
using R2API;
using R2API.Utils;
using Rewired;
using Rewired.Integration.UnityUI;
using Rewired.UI;
using RoR2;
using RoR2.UI;
using RoR2.UI.MainMenu;
using TMPro;
using ThreeEyedGames;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.Networking;
using UnityEngine.SceneManagement;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.Default | DebuggableAttribute.DebuggingModes.DisableOptimizations | DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints | DebuggableAttribute.DebuggingModes.EnableEditAndContinue)]
[assembly: TargetFramework(".NETStandard,Version=v2.0", FrameworkDisplayName = ".NET Standard 2.0")]
[assembly: AssemblyCompany("XSplitScreen")]
[assembly: AssemblyConfiguration("Debug")]
[assembly: AssemblyFileVersion("0.0.1.0")]
[assembly: AssemblyInformationalVersion("0.0.1+aac3b3a96679d6dd513dbcb4f872a460ca115b61")]
[assembly: AssemblyProduct("XSplitScreen")]
[assembly: AssemblyTitle("XSplitScreen")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("0.0.1.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Microsoft.CodeAnalysis.Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace DoDad.Properties
{
	[GeneratedCode("System.Resources.Tools.StronglyTypedResourceBuilder", "16.0.0.0")]
	[DebuggerNonUserCode]
	[CompilerGenerated]
	internal class Resources
	{
		private static ResourceManager resourceMan;

		private static CultureInfo resourceCulture;

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static ResourceManager ResourceManager
		{
			get
			{
				if (resourceMan == null)
				{
					ResourceManager resourceManager = new ResourceManager("XSplitScreen.Properties.Resources", typeof(Resources).Assembly);
					resourceMan = resourceManager;
				}
				return resourceMan;
			}
		}

		[EditorBrowsable(EditorBrowsableState.Advanced)]
		internal static CultureInfo Culture
		{
			get
			{
				return resourceCulture;
			}
			set
			{
				resourceCulture = value;
			}
		}

		internal Resources()
		{
		}
	}
}
namespace DoDad.XSplitScreen
{
	internal enum HookType
	{
		Singleplayer,
		Splitscreen,
		General
	}
	internal static class HookManager
	{
		[CompilerGenerated]
		private static class <>O
		{
			public static hook_AddUser <0>__LocalUserManager_AddUser;

			public static hook_Update <1>__SurvivorIconController_Update;

			public static hook_AddNodeToRoot <2>__ViewablesCatalog_AddNodeToRoot;

			public static hook_Awake <3>__MPButton_Awake;

			public static hook_Awake <4>__MPToggle_Awake;

			public static hook_Awake <5>__MPDropdown_Awake;

			public static hook_OnExit <6>__SubmenuMainMenuScreen_OnExit;

			public static hook_Start <7>__SettingsPanelController_Start;

			public static hook_Refresh <8>__InputSourceFilter_Refresh;

			public static hook_ValidateCurrentSelectedGameobject <9>__MPEventSystem_ValidateCurrentSelectedGameobject;

			public static hook_GetMousePointerEventData <10>__MPInputModule_GetMousePointerEventData;

			public static hook_OnEnable <11>__CursorOpener_OnEnable;

			public static hook_UpdateAvailability <12>__SurvivorIconController_UpdateAvailability;

			public static hook_PickIcon <13>__CharacterSelectBarController_PickIcon;

			public static hook_ShouldDisplaySurvivor <14>__CharacterSelectBarController_ShouldDisplaySurvivor;

			public static hook_Update <15>__CharacterSelectController_Update;

			public static hook_Update <16>__MPInput_Update;

			public static hook_UpdateDisplayData <17>__LoadoutPanelController_UpdateDisplayData;

			public static hook_Update <18>__MPButton_Update;

			public static hook_Start <19>__CameraRigController_Start;

			public static hook_OnEnable <20>__HUD_OnEnable;

			public static hook_CCTogglePause <21>__PauseManager_CCTogglePause;

			public static hook_Create <22>__SimpleDialogBox_Create;

			public static hook_OnUICameraPreCull <23>__LocalCameraEffect_OnUICameraPreCull;

			public static hook_SetLayoutHorizontal <24>__CombatHealthBarViewer_SetLayoutHorizontal;

			public static hook_UpdateUserName <25>__NetworkUser_UpdateUserName;

			public static hook_GetMultiplayerColor <26>__ColorCatalog_GetMultiplayerColor;

			public static hook_SetBody <27>__Nameplate_SetBody;

			public static hook_GetCurrentUserProfile <28>__BaseSettingsControl_GetCurrentUserProfile;

			public static hook_StartListening <29>__InputBindingControl_StartListening;

			public static hook_CenterCursor <30>__MPInput_CenterCursor;

			public static hook_Awake <31>__VoteInfoPanelController_Awake;

			public static hook_ClientSetReady <32>__CharacterSelectController_ClientSetReady;

			public static hook_ClientSetUnready <33>__CharacterSelectController_ClientSetUnready;

			public static hook_RecenterCursors <34>__MPEventSystem_RecenterCursors;

			public static hook_LateUpdate <35>__ProfileNameLabel_LateUpdate;

			public static hook_Awake <36>__ScoreboardController_Awake;

			public static hook_SetRandomVotes <37>__RuleCategoryController_SetRandomVotes;

			public static hook_SetTooltipProvider <38>__TooltipController_SetTooltipProvider;

			public static hook_Refresh <39>__InputBindingDisplayController_Refresh;

			public static hook_OnEnable <40>__InputBindingDisplayController_OnEnable;

			public static hook_Awake <41>__CustomScrollbar_Awake;

			public static hook_SetScale <42>__HUDScaleController_SetScale;

			public static hook_TakeDamage <43>__HealthComponent_TakeDamage;

			public static Action<Run> <44>__OnRunStartGlobal;

			public static Action<Run> <45>__OnRunDestroyGlobal;
		}

		[Serializable]
		[CompilerGenerated]
		private sealed class <>c
		{
			public static readonly <>c <>9 = new <>c();

			public static Func<Instruction, bool> <>9__58_2;

			public static Func<Instruction, bool> <>9__58_3;

			public static Func<Instruction, bool> <>9__58_4;

			public static Func<Instruction, bool> <>9__58_5;

			public static Manipulator <>9__58_0;

			public static Func<Instruction, bool> <>9__58_6;

			public static Func<Instruction, bool> <>9__58_7;

			public static Func<Instruction, bool> <>9__58_8;

			public static Func<Instruction, bool> <>9__58_9;

			public static Manipulator <>9__58_1;

			public static Action <>9__61_0;

			public static Action <>9__61_1;

			internal void <MPEventSystem_Update_IL>b__58_0(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//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_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_011a: 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_0122: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				val.GotoNext(new Func<Instruction, bool>[4]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<Console>(x, "get_instance"),
					(Instruction x) => ILPatternMatchingExt.MatchLdnull(x),
					(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "pause"),
					(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0)
				});
				val.Index += 1;
				val.Next.Operand = Input.lastEventSystem;
				OpCode opCode = val.Next.OpCode;
				Log.LogOutput($"OpCode.Op1: {((OpCode)(ref opCode)).Op1}");
				opCode = val.Next.OpCode;
				Log.LogOutput($"OpCode.Op2: {((OpCode)(ref opCode)).Op2}");
				opCode = val.Next.OpCode;
				Log.LogOutput($"OpCode.FlowControl: {((OpCode)(ref opCode)).FlowControl}");
				Log.LogOutput($"Operand: {val.Next.Operand}");
			}

			internal bool <MPEventSystem_Update_IL>b__58_2(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<Console>(x, "get_instance");
			}

			internal bool <MPEventSystem_Update_IL>b__58_3(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdnull(x);
			}

			internal bool <MPEventSystem_Update_IL>b__58_4(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdstr(x, "pause");
			}

			internal bool <MPEventSystem_Update_IL>b__58_5(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdcI4(x, 0);
			}

			internal void <MPEventSystem_Update_IL>b__58_1(ILContext il)
			{
				//IL_0002: Unknown result type (might be due to invalid IL or missing references)
				//IL_0008: Expected O, but got Unknown
				//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_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_011a: 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_0122: Unknown result type (might be due to invalid IL or missing references)
				ILCursor val = new ILCursor(il);
				val.GotoNext(new Func<Instruction, bool>[4]
				{
					(Instruction x) => ILPatternMatchingExt.MatchCall<Console>(x, "get_instance"),
					(Instruction x) => ILPatternMatchingExt.MatchLdnull(x),
					(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "pause"),
					(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0)
				});
				val.Index += 1;
				val.Next.Operand = Input.lastEventSystem;
				OpCode opCode = val.Next.OpCode;
				Log.LogOutput($"OpCode.Op1: {((OpCode)(ref opCode)).Op1}");
				opCode = val.Next.OpCode;
				Log.LogOutput($"OpCode.Op2: {((OpCode)(ref opCode)).Op2}");
				opCode = val.Next.OpCode;
				Log.LogOutput($"OpCode.FlowControl: {((OpCode)(ref opCode)).FlowControl}");
				Log.LogOutput($"Operand: {val.Next.Operand}");
			}

			internal bool <MPEventSystem_Update_IL>b__58_6(Instruction x)
			{
				return ILPatternMatchingExt.MatchCall<Console>(x, "get_instance");
			}

			internal bool <MPEventSystem_Update_IL>b__58_7(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdnull(x);
			}

			internal bool <MPEventSystem_Update_IL>b__58_8(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdstr(x, "pause");
			}

			internal bool <MPEventSystem_Update_IL>b__58_9(Instruction x)
			{
				return ILPatternMatchingExt.MatchLdcI4(x, 0);
			}

			internal void <SetGeneralRunDelegates>b__61_0()
			{
				foreach (MPEventSystem instances in MPEventSystem.instancesList)
				{
					((Component)instances.cursorIndicatorController).GetComponent<Canvas>().targetDisplay = 0;
				}
			}

			internal void <SetGeneralRunDelegates>b__61_1()
			{
				foreach (LocalUser localUsers in LocalUserManager.localUsersList)
				{
					localUsers.currentNetworkUser.UpdateUserName();
				}
			}
		}

		public static List<Action> onRunStartExecute { get; private set; } = new List<Action>();


		public static List<Action> onRunDestroyExecute { get; private set; } = new List<Action>();


		public static List<Hook> hooks { get; private set; } = new List<Hook>();


		public static void InitializeCustomHookList()
		{
			hooks.Clear();
		}

		public static void UpdateHooks(HookType hookType, bool enable)
		{
			//IL_02c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d1: Expected O, but got Unknown
			//IL_025f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0264: Unknown result type (might be due to invalid IL or missing references)
			//IL_026a: Expected O, but got Unknown
			//IL_0766: Unknown result type (might be due to invalid IL or missing references)
			//IL_076b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0771: Expected O, but got Unknown
			//IL_033a: Unknown result type (might be due to invalid IL or missing references)
			//IL_033f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0345: Expected O, but got Unknown
			//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_014f: Expected O, but got Unknown
			//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: Expected O, but got Unknown
			//IL_02e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f2: Expected O, but got Unknown
			//IL_0280: Unknown result type (might be due to invalid IL or missing references)
			//IL_0285: Unknown result type (might be due to invalid IL or missing references)
			//IL_028b: Expected O, but got Unknown
			//IL_0787: Unknown result type (might be due to invalid IL or missing references)
			//IL_078c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0792: Expected O, but got Unknown
			//IL_035b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0360: Unknown result type (might be due to invalid IL or missing references)
			//IL_0366: Expected O, but got Unknown
			//IL_0165: Unknown result type (might be due to invalid IL or missing references)
			//IL_016a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Expected O, but got Unknown
			//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_0061: Expected O, but got Unknown
			//IL_0308: Unknown result type (might be due to invalid IL or missing references)
			//IL_030d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0313: Expected O, but got Unknown
			//IL_02a1: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a6: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Expected O, but got Unknown
			//IL_07a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_07b3: Expected O, but got Unknown
			//IL_037c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0381: Unknown result type (might be due to invalid IL or missing references)
			//IL_0387: Expected O, but got Unknown
			//IL_0186: 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_0191: Expected O, but got Unknown
			//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_0082: Expected O, but got Unknown
			//IL_07c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_07d4: Expected O, but got Unknown
			//IL_039d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a8: Expected O, but got Unknown
			//IL_01a7: 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_01b2: Expected O, but got Unknown
			//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_00a3: Expected O, but got Unknown
			//IL_07ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_07ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_07f5: Expected O, but got Unknown
			//IL_03be: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c9: Expected O, but got Unknown
			//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_01d3: Expected O, but got Unknown
			//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_00c4: Expected O, but got Unknown
			//IL_080b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0810: Unknown result type (might be due to invalid IL or missing references)
			//IL_0816: Expected O, but got Unknown
			//IL_03df: Unknown result type (might be due to invalid IL or missing references)
			//IL_03e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Expected O, but got Unknown
			//IL_01e9: 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_01f4: Expected O, but got Unknown
			//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_00e5: Expected O, but got Unknown
			//IL_082c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0831: Unknown result type (might be due to invalid IL or missing references)
			//IL_0837: Expected O, but got Unknown
			//IL_0400: Unknown result type (might be due to invalid IL or missing references)
			//IL_0405: Unknown result type (might be due to invalid IL or missing references)
			//IL_040b: Expected O, but got Unknown
			//IL_020a: 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_0215: Expected O, but got Unknown
			//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: Expected O, but got Unknown
			//IL_084d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0852: Unknown result type (might be due to invalid IL or missing references)
			//IL_0858: Expected O, but got Unknown
			//IL_0421: Unknown result type (might be due to invalid IL or missing references)
			//IL_0426: Unknown result type (might be due to invalid IL or missing references)
			//IL_042c: Expected O, but got Unknown
			//IL_022b: 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_0236: Expected O, but got Unknown
			//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_0127: Expected O, but got Unknown
			//IL_086e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0873: Unknown result type (might be due to invalid IL or missing references)
			//IL_0879: Expected O, but got Unknown
			//IL_0442: Unknown result type (might be due to invalid IL or missing references)
			//IL_0447: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Expected O, but got Unknown
			//IL_088f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0894: Unknown result type (might be due to invalid IL or missing references)
			//IL_089a: Expected O, but got Unknown
			//IL_0463: Unknown result type (might be due to invalid IL or missing references)
			//IL_0468: Unknown result type (might be due to invalid IL or missing references)
			//IL_046e: Expected O, but got Unknown
			//IL_08b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_08b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_08bb: Expected O, but got Unknown
			//IL_0484: Unknown result type (might be due to invalid IL or missing references)
			//IL_0489: Unknown result type (might be due to invalid IL or missing references)
			//IL_048f: Expected O, but got Unknown
			//IL_08d1: Unknown result type (might be due to invalid IL or missing references)
			//IL_08d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_08dc: Expected O, but got Unknown
			//IL_04a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_04aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_04b0: Expected O, but got Unknown
			//IL_08f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_08f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_08fd: Expected O, but got Unknown
			//IL_04c6: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_04d1: Expected O, but got Unknown
			//IL_0913: Unknown result type (might be due to invalid IL or missing references)
			//IL_0918: Unknown result type (might be due to invalid IL or missing references)
			//IL_091e: Expected O, but got Unknown
			//IL_04e7: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f2: Expected O, but got Unknown
			//IL_0934: Unknown result type (might be due to invalid IL or missing references)
			//IL_0939: Unknown result type (might be due to invalid IL or missing references)
			//IL_093f: Expected O, but got Unknown
			//IL_0508: Unknown result type (might be due to invalid IL or missing references)
			//IL_050d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0513: Expected O, but got Unknown
			//IL_0955: Unknown result type (might be due to invalid IL or missing references)
			//IL_095a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0960: Expected O, but got Unknown
			//IL_0529: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0534: Expected O, but got Unknown
			//IL_0976: Unknown result type (might be due to invalid IL or missing references)
			//IL_097b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0981: Expected O, but got Unknown
			//IL_054a: Unknown result type (might be due to invalid IL or missing references)
			//IL_054f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0555: Expected O, but got Unknown
			//IL_0997: Unknown result type (might be due to invalid IL or missing references)
			//IL_099c: Unknown result type (might be due to invalid IL or missing references)
			//IL_09a2: Expected O, but got Unknown
			//IL_056b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0570: Unknown result type (might be due to invalid IL or missing references)
			//IL_0576: Expected O, but got Unknown
			//IL_09b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_09bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_09c3: Expected O, but got Unknown
			//IL_058c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0591: Unknown result type (might be due to invalid IL or missing references)
			//IL_0597: Expected O, but got Unknown
			//IL_09d9: Unknown result type (might be due to invalid IL or missing references)
			//IL_09de: Unknown result type (might be due to invalid IL or missing references)
			//IL_09e4: Expected O, but got Unknown
			//IL_05ad: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b8: Expected O, but got Unknown
			//IL_09fa: Unknown result type (might be due to invalid IL or missing references)
			//IL_09ff: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a05: Expected O, but got Unknown
			//IL_05ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d9: Expected O, but got Unknown
			//IL_0a1b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a20: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a26: Expected O, but got Unknown
			//IL_05ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_05f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05fa: Expected O, but got Unknown
			//IL_0a3c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a41: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a47: Expected O, but got Unknown
			//IL_0610: Unknown result type (might be due to invalid IL or missing references)
			//IL_0615: Unknown result type (might be due to invalid IL or missing references)
			//IL_061b: Expected O, but got Unknown
			//IL_0a5d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a62: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a68: Expected O, but got Unknown
			//IL_0631: Unknown result type (might be due to invalid IL or missing references)
			//IL_0636: Unknown result type (might be due to invalid IL or missing references)
			//IL_063c: Expected O, but got Unknown
			//IL_0a7e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a83: Unknown result type (might be due to invalid IL or missing references)
			//IL_0a89: Expected O, but got Unknown
			//IL_0652: Unknown result type (might be due to invalid IL or missing references)
			//IL_0657: Unknown result type (might be due to invalid IL or missing references)
			//IL_065d: Expected O, but got Unknown
			//IL_0a9f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aa4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aaa: Expected O, but got Unknown
			//IL_0673: Unknown result type (might be due to invalid IL or missing references)
			//IL_0678: Unknown result type (might be due to invalid IL or missing references)
			//IL_067e: Expected O, but got Unknown
			//IL_0ac0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ac5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0acb: Expected O, but got Unknown
			//IL_0694: Unknown result type (might be due to invalid IL or missing references)
			//IL_0699: Unknown result type (might be due to invalid IL or missing references)
			//IL_069f: Expected O, but got Unknown
			//IL_0ae1: Unknown result type (might be due to invalid IL or missing references)
			//IL_0ae6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0aec: Expected O, but got Unknown
			//IL_06b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ba: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c0: Expected O, but got Unknown
			//IL_0b02: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b07: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b0d: Expected O, but got Unknown
			//IL_06d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_06db: Unknown result type (might be due to invalid IL or missing references)
			//IL_06e1: Expected O, but got Unknown
			//IL_0b23: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b28: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b2e: Expected O, but got Unknown
			//IL_06f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_06fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0702: Expected O, but got Unknown
			//IL_0b44: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b49: Unknown result type (might be due to invalid IL or missing references)
			//IL_0b4f: Expected O, but got Unknown
			//IL_0718: Unknown result type (might be due to invalid IL or missing references)
			//IL_071d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0723: Expected O, but got Unknown
			//IL_0739: Unknown result type (might be due to invalid IL or missing references)
			//IL_073e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0744: Expected O, but got Unknown
			switch (hookType)
			{
			case HookType.General:
				if (enable)
				{
					object obj70 = <>O.<0>__LocalUserManager_AddUser;
					if (obj70 == null)
					{
						hook_AddUser val70 = LocalUserManager_AddUser;
						<>O.<0>__LocalUserManager_AddUser = val70;
						obj70 = (object)val70;
					}
					LocalUserManager.AddUser += (hook_AddUser)obj70;
					object obj71 = <>O.<1>__SurvivorIconController_Update;
					if (obj71 == null)
					{
						hook_Update val71 = SurvivorIconController_Update;
						<>O.<1>__SurvivorIconController_Update = val71;
						obj71 = (object)val71;
					}
					SurvivorIconController.Update += (hook_Update)obj71;
					object obj72 = <>O.<2>__ViewablesCatalog_AddNodeToRoot;
					if (obj72 == null)
					{
						hook_AddNodeToRoot val72 = ViewablesCatalog_AddNodeToRoot;
						<>O.<2>__ViewablesCatalog_AddNodeToRoot = val72;
						obj72 = (object)val72;
					}
					ViewablesCatalog.AddNodeToRoot += (hook_AddNodeToRoot)obj72;
					object obj73 = <>O.<3>__MPButton_Awake;
					if (obj73 == null)
					{
						hook_Awake val73 = MPButton_Awake;
						<>O.<3>__MPButton_Awake = val73;
						obj73 = (object)val73;
					}
					MPButton.Awake += (hook_Awake)obj73;
					object obj74 = <>O.<4>__MPToggle_Awake;
					if (obj74 == null)
					{
						hook_Awake val74 = MPToggle_Awake;
						<>O.<4>__MPToggle_Awake = val74;
						obj74 = (object)val74;
					}
					MPToggle.Awake += (hook_Awake)obj74;
					object obj75 = <>O.<5>__MPDropdown_Awake;
					if (obj75 == null)
					{
						hook_Awake val75 = MPDropdown_Awake;
						<>O.<5>__MPDropdown_Awake = val75;
						obj75 = (object)val75;
					}
					MPDropdown.Awake += (hook_Awake)obj75;
					object obj76 = <>O.<6>__SubmenuMainMenuScreen_OnExit;
					if (obj76 == null)
					{
						hook_OnExit val76 = SubmenuMainMenuScreen_OnExit;
						<>O.<6>__SubmenuMainMenuScreen_OnExit = val76;
						obj76 = (object)val76;
					}
					SubmenuMainMenuScreen.OnExit += (hook_OnExit)obj76;
					object obj77 = <>O.<7>__SettingsPanelController_Start;
					if (obj77 == null)
					{
						hook_Start val77 = SettingsPanelController_Start;
						<>O.<7>__SettingsPanelController_Start = val77;
						obj77 = (object)val77;
					}
					SettingsPanelController.Start += (hook_Start)obj77;
				}
				else
				{
					object obj78 = <>O.<0>__LocalUserManager_AddUser;
					if (obj78 == null)
					{
						hook_AddUser val78 = LocalUserManager_AddUser;
						<>O.<0>__LocalUserManager_AddUser = val78;
						obj78 = (object)val78;
					}
					LocalUserManager.AddUser -= (hook_AddUser)obj78;
					object obj79 = <>O.<1>__SurvivorIconController_Update;
					if (obj79 == null)
					{
						hook_Update val79 = SurvivorIconController_Update;
						<>O.<1>__SurvivorIconController_Update = val79;
						obj79 = (object)val79;
					}
					SurvivorIconController.Update -= (hook_Update)obj79;
					object obj80 = <>O.<2>__ViewablesCatalog_AddNodeToRoot;
					if (obj80 == null)
					{
						hook_AddNodeToRoot val80 = ViewablesCatalog_AddNodeToRoot;
						<>O.<2>__ViewablesCatalog_AddNodeToRoot = val80;
						obj80 = (object)val80;
					}
					ViewablesCatalog.AddNodeToRoot -= (hook_AddNodeToRoot)obj80;
					object obj81 = <>O.<3>__MPButton_Awake;
					if (obj81 == null)
					{
						hook_Awake val81 = MPButton_Awake;
						<>O.<3>__MPButton_Awake = val81;
						obj81 = (object)val81;
					}
					MPButton.Awake -= (hook_Awake)obj81;
					object obj82 = <>O.<4>__MPToggle_Awake;
					if (obj82 == null)
					{
						hook_Awake val82 = MPToggle_Awake;
						<>O.<4>__MPToggle_Awake = val82;
						obj82 = (object)val82;
					}
					MPToggle.Awake -= (hook_Awake)obj82;
					object obj83 = <>O.<5>__MPDropdown_Awake;
					if (obj83 == null)
					{
						hook_Awake val83 = MPDropdown_Awake;
						<>O.<5>__MPDropdown_Awake = val83;
						obj83 = (object)val83;
					}
					MPDropdown.Awake -= (hook_Awake)obj83;
					object obj84 = <>O.<6>__SubmenuMainMenuScreen_OnExit;
					if (obj84 == null)
					{
						hook_OnExit val84 = SubmenuMainMenuScreen_OnExit;
						<>O.<6>__SubmenuMainMenuScreen_OnExit = val84;
						obj84 = (object)val84;
					}
					SubmenuMainMenuScreen.OnExit -= (hook_OnExit)obj84;
					object obj85 = <>O.<7>__SettingsPanelController_Start;
					if (obj85 == null)
					{
						hook_Start val85 = SettingsPanelController_Start;
						<>O.<7>__SettingsPanelController_Start = val85;
						obj85 = (object)val85;
					}
					SettingsPanelController.Start -= (hook_Start)obj85;
				}
				SetRunListeners(enable);
				break;
			case HookType.Singleplayer:
				if (enable)
				{
					object obj64 = <>O.<8>__InputSourceFilter_Refresh;
					if (obj64 == null)
					{
						hook_Refresh val64 = InputSourceFilter_Refresh;
						<>O.<8>__InputSourceFilter_Refresh = val64;
						obj64 = (object)val64;
					}
					InputSourceFilter.Refresh += (hook_Refresh)obj64;
					object obj65 = <>O.<9>__MPEventSystem_ValidateCurrentSelectedGameobject;
					if (obj65 == null)
					{
						hook_ValidateCurrentSelectedGameobject val65 = MPEventSystem_ValidateCurrentSelectedGameobject;
						<>O.<9>__MPEventSystem_ValidateCurrentSelectedGameobject = val65;
						obj65 = (object)val65;
					}
					MPEventSystem.ValidateCurrentSelectedGameobject += (hook_ValidateCurrentSelectedGameobject)obj65;
					object obj66 = <>O.<10>__MPInputModule_GetMousePointerEventData;
					if (obj66 == null)
					{
						hook_GetMousePointerEventData val66 = MPInputModule_GetMousePointerEventData;
						<>O.<10>__MPInputModule_GetMousePointerEventData = val66;
						obj66 = (object)val66;
					}
					MPInputModule.GetMousePointerEventData += (hook_GetMousePointerEventData)obj66;
				}
				else
				{
					object obj67 = <>O.<8>__InputSourceFilter_Refresh;
					if (obj67 == null)
					{
						hook_Refresh val67 = InputSourceFilter_Refresh;
						<>O.<8>__InputSourceFilter_Refresh = val67;
						obj67 = (object)val67;
					}
					InputSourceFilter.Refresh -= (hook_Refresh)obj67;
					object obj68 = <>O.<9>__MPEventSystem_ValidateCurrentSelectedGameobject;
					if (obj68 == null)
					{
						hook_ValidateCurrentSelectedGameobject val68 = MPEventSystem_ValidateCurrentSelectedGameobject;
						<>O.<9>__MPEventSystem_ValidateCurrentSelectedGameobject = val68;
						obj68 = (object)val68;
					}
					MPEventSystem.ValidateCurrentSelectedGameobject -= (hook_ValidateCurrentSelectedGameobject)obj68;
					object obj69 = <>O.<10>__MPInputModule_GetMousePointerEventData;
					if (obj69 == null)
					{
						hook_GetMousePointerEventData val69 = MPInputModule_GetMousePointerEventData;
						<>O.<10>__MPInputModule_GetMousePointerEventData = val69;
						obj69 = (object)val69;
					}
					MPInputModule.GetMousePointerEventData -= (hook_GetMousePointerEventData)obj69;
				}
				break;
			case HookType.Splitscreen:
				if (enable)
				{
					object obj = <>O.<11>__CursorOpener_OnEnable;
					if (obj == null)
					{
						hook_OnEnable val = CursorOpener_OnEnable;
						<>O.<11>__CursorOpener_OnEnable = val;
						obj = (object)val;
					}
					CursorOpener.OnEnable += (hook_OnEnable)obj;
					object obj2 = <>O.<12>__SurvivorIconController_UpdateAvailability;
					if (obj2 == null)
					{
						hook_UpdateAvailability val2 = SurvivorIconController_UpdateAvailability;
						<>O.<12>__SurvivorIconController_UpdateAvailability = val2;
						obj2 = (object)val2;
					}
					SurvivorIconController.UpdateAvailability += (hook_UpdateAvailability)obj2;
					object obj3 = <>O.<13>__CharacterSelectBarController_PickIcon;
					if (obj3 == null)
					{
						hook_PickIcon val3 = CharacterSelectBarController_PickIcon;
						<>O.<13>__CharacterSelectBarController_PickIcon = val3;
						obj3 = (object)val3;
					}
					CharacterSelectBarController.PickIcon += (hook_PickIcon)obj3;
					object obj4 = <>O.<14>__CharacterSelectBarController_ShouldDisplaySurvivor;
					if (obj4 == null)
					{
						hook_ShouldDisplaySurvivor val4 = CharacterSelectBarController_ShouldDisplaySurvivor;
						<>O.<14>__CharacterSelectBarController_ShouldDisplaySurvivor = val4;
						obj4 = (object)val4;
					}
					CharacterSelectBarController.ShouldDisplaySurvivor += (hook_ShouldDisplaySurvivor)obj4;
					object obj5 = <>O.<15>__CharacterSelectController_Update;
					if (obj5 == null)
					{
						hook_Update val5 = CharacterSelectController_Update;
						<>O.<15>__CharacterSelectController_Update = val5;
						obj5 = (object)val5;
					}
					CharacterSelectController.Update += (hook_Update)obj5;
					object obj6 = <>O.<16>__MPInput_Update;
					if (obj6 == null)
					{
						hook_Update val6 = MPInput_Update;
						<>O.<16>__MPInput_Update = val6;
						obj6 = (object)val6;
					}
					MPInput.Update += (hook_Update)obj6;
					object obj7 = <>O.<17>__LoadoutPanelController_UpdateDisplayData;
					if (obj7 == null)
					{
						hook_UpdateDisplayData val7 = LoadoutPanelController_UpdateDisplayData;
						<>O.<17>__LoadoutPanelController_UpdateDisplayData = val7;
						obj7 = (object)val7;
					}
					LoadoutPanelController.UpdateDisplayData += (hook_UpdateDisplayData)obj7;
					object obj8 = <>O.<18>__MPButton_Update;
					if (obj8 == null)
					{
						hook_Update val8 = MPButton_Update;
						<>O.<18>__MPButton_Update = val8;
						obj8 = (object)val8;
					}
					MPButton.Update += (hook_Update)obj8;
					object obj9 = <>O.<19>__CameraRigController_Start;
					if (obj9 == null)
					{
						hook_Start val9 = CameraRigController_Start;
						<>O.<19>__CameraRigController_Start = val9;
						obj9 = (object)val9;
					}
					CameraRigController.Start += (hook_Start)obj9;
					object obj10 = <>O.<20>__HUD_OnEnable;
					if (obj10 == null)
					{
						hook_OnEnable val10 = HUD_OnEnable;
						<>O.<20>__HUD_OnEnable = val10;
						obj10 = (object)val10;
					}
					HUD.OnEnable += (hook_OnEnable)obj10;
					object obj11 = <>O.<21>__PauseManager_CCTogglePause;
					if (obj11 == null)
					{
						hook_CCTogglePause val11 = PauseManager_CCTogglePause;
						<>O.<21>__PauseManager_CCTogglePause = val11;
						obj11 = (object)val11;
					}
					PauseManager.CCTogglePause += (hook_CCTogglePause)obj11;
					object obj12 = <>O.<22>__SimpleDialogBox_Create;
					if (obj12 == null)
					{
						hook_Create val12 = SimpleDialogBox_Create;
						<>O.<22>__SimpleDialogBox_Create = val12;
						obj12 = (object)val12;
					}
					SimpleDialogBox.Create += (hook_Create)obj12;
					object obj13 = <>O.<23>__LocalCameraEffect_OnUICameraPreCull;
					if (obj13 == null)
					{
						hook_OnUICameraPreCull val13 = LocalCameraEffect_OnUICameraPreCull;
						<>O.<23>__LocalCameraEffect_OnUICameraPreCull = val13;
						obj13 = (object)val13;
					}
					LocalCameraEffect.OnUICameraPreCull += (hook_OnUICameraPreCull)obj13;
					object obj14 = <>O.<24>__CombatHealthBarViewer_SetLayoutHorizontal;
					if (obj14 == null)
					{
						hook_SetLayoutHorizontal val14 = CombatHealthBarViewer_SetLayoutHorizontal;
						<>O.<24>__CombatHealthBarViewer_SetLayoutHorizontal = val14;
						obj14 = (object)val14;
					}
					CombatHealthBarViewer.SetLayoutHorizontal += (hook_SetLayoutHorizontal)obj14;
					object obj15 = <>O.<25>__NetworkUser_UpdateUserName;
					if (obj15 == null)
					{
						hook_UpdateUserName val15 = NetworkUser_UpdateUserName;
						<>O.<25>__NetworkUser_UpdateUserName = val15;
						obj15 = (object)val15;
					}
					NetworkUser.UpdateUserName += (hook_UpdateUserName)obj15;
					object obj16 = <>O.<26>__ColorCatalog_GetMultiplayerColor;
					if (obj16 == null)
					{
						hook_GetMultiplayerColor val16 = ColorCatalog_GetMultiplayerColor;
						<>O.<26>__ColorCatalog_GetMultiplayerColor = val16;
						obj16 = (object)val16;
					}
					ColorCatalog.GetMultiplayerColor += (hook_GetMultiplayerColor)obj16;
					object obj17 = <>O.<27>__Nameplate_SetBody;
					if (obj17 == null)
					{
						hook_SetBody val17 = Nameplate_SetBody;
						<>O.<27>__Nameplate_SetBody = val17;
						obj17 = (object)val17;
					}
					Nameplate.SetBody += (hook_SetBody)obj17;
					object obj18 = <>O.<28>__BaseSettingsControl_GetCurrentUserProfile;
					if (obj18 == null)
					{
						hook_GetCurrentUserProfile val18 = BaseSettingsControl_GetCurrentUserProfile;
						<>O.<28>__BaseSettingsControl_GetCurrentUserProfile = val18;
						obj18 = (object)val18;
					}
					BaseSettingsControl.GetCurrentUserProfile += (hook_GetCurrentUserProfile)obj18;
					object obj19 = <>O.<29>__InputBindingControl_StartListening;
					if (obj19 == null)
					{
						hook_StartListening val19 = InputBindingControl_StartListening;
						<>O.<29>__InputBindingControl_StartListening = val19;
						obj19 = (object)val19;
					}
					InputBindingControl.StartListening += (hook_StartListening)obj19;
					object obj20 = <>O.<30>__MPInput_CenterCursor;
					if (obj20 == null)
					{
						hook_CenterCursor val20 = MPInput_CenterCursor;
						<>O.<30>__MPInput_CenterCursor = val20;
						obj20 = (object)val20;
					}
					MPInput.CenterCursor += (hook_CenterCursor)obj20;
					object obj21 = <>O.<31>__VoteInfoPanelController_Awake;
					if (obj21 == null)
					{
						hook_Awake val21 = VoteInfoPanelController_Awake;
						<>O.<31>__VoteInfoPanelController_Awake = val21;
						obj21 = (object)val21;
					}
					VoteInfoPanelController.Awake += (hook_Awake)obj21;
					object obj22 = <>O.<32>__CharacterSelectController_ClientSetReady;
					if (obj22 == null)
					{
						hook_ClientSetReady val22 = CharacterSelectController_ClientSetReady;
						<>O.<32>__CharacterSelectController_ClientSetReady = val22;
						obj22 = (object)val22;
					}
					CharacterSelectController.ClientSetReady += (hook_ClientSetReady)obj22;
					object obj23 = <>O.<33>__CharacterSelectController_ClientSetUnready;
					if (obj23 == null)
					{
						hook_ClientSetUnready val23 = CharacterSelectController_ClientSetUnready;
						<>O.<33>__CharacterSelectController_ClientSetUnready = val23;
						obj23 = (object)val23;
					}
					CharacterSelectController.ClientSetUnready += (hook_ClientSetUnready)obj23;
					object obj24 = <>O.<34>__MPEventSystem_RecenterCursors;
					if (obj24 == null)
					{
						hook_RecenterCursors val24 = MPEventSystem_RecenterCursors;
						<>O.<34>__MPEventSystem_RecenterCursors = val24;
						obj24 = (object)val24;
					}
					MPEventSystem.RecenterCursors += (hook_RecenterCursors)obj24;
					object obj25 = <>O.<35>__ProfileNameLabel_LateUpdate;
					if (obj25 == null)
					{
						hook_LateUpdate val25 = ProfileNameLabel_LateUpdate;
						<>O.<35>__ProfileNameLabel_LateUpdate = val25;
						obj25 = (object)val25;
					}
					ProfileNameLabel.LateUpdate += (hook_LateUpdate)obj25;
					object obj26 = <>O.<36>__ScoreboardController_Awake;
					if (obj26 == null)
					{
						hook_Awake val26 = ScoreboardController_Awake;
						<>O.<36>__ScoreboardController_Awake = val26;
						obj26 = (object)val26;
					}
					ScoreboardController.Awake += (hook_Awake)obj26;
					object obj27 = <>O.<37>__RuleCategoryController_SetRandomVotes;
					if (obj27 == null)
					{
						hook_SetRandomVotes val27 = RuleCategoryController_SetRandomVotes;
						<>O.<37>__RuleCategoryController_SetRandomVotes = val27;
						obj27 = (object)val27;
					}
					RuleCategoryController.SetRandomVotes += (hook_SetRandomVotes)obj27;
					object obj28 = <>O.<38>__TooltipController_SetTooltipProvider;
					if (obj28 == null)
					{
						hook_SetTooltipProvider val28 = TooltipController_SetTooltipProvider;
						<>O.<38>__TooltipController_SetTooltipProvider = val28;
						obj28 = (object)val28;
					}
					TooltipController.SetTooltipProvider += (hook_SetTooltipProvider)obj28;
					object obj29 = <>O.<39>__InputBindingDisplayController_Refresh;
					if (obj29 == null)
					{
						hook_Refresh val29 = InputBindingDisplayController_Refresh;
						<>O.<39>__InputBindingDisplayController_Refresh = val29;
						obj29 = (object)val29;
					}
					InputBindingDisplayController.Refresh += (hook_Refresh)obj29;
					object obj30 = <>O.<40>__InputBindingDisplayController_OnEnable;
					if (obj30 == null)
					{
						hook_OnEnable val30 = InputBindingDisplayController_OnEnable;
						<>O.<40>__InputBindingDisplayController_OnEnable = val30;
						obj30 = (object)val30;
					}
					InputBindingDisplayController.OnEnable += (hook_OnEnable)obj30;
					object obj31 = <>O.<41>__CustomScrollbar_Awake;
					if (obj31 == null)
					{
						hook_Awake val31 = CustomScrollbar_Awake;
						<>O.<41>__CustomScrollbar_Awake = val31;
						obj31 = (object)val31;
					}
					CustomScrollbar.Awake += (hook_Awake)obj31;
					object obj32 = <>O.<42>__HUDScaleController_SetScale;
					if (obj32 == null)
					{
						hook_SetScale val32 = HUDScaleController_SetScale;
						<>O.<42>__HUDScaleController_SetScale = val32;
						obj32 = (object)val32;
					}
					HUDScaleController.SetScale += (hook_SetScale)obj32;
					bool flag = false;
				}
				else
				{
					object obj33 = <>O.<11>__CursorOpener_OnEnable;
					if (obj33 == null)
					{
						hook_OnEnable val33 = CursorOpener_OnEnable;
						<>O.<11>__CursorOpener_OnEnable = val33;
						obj33 = (object)val33;
					}
					CursorOpener.OnEnable -= (hook_OnEnable)obj33;
					object obj34 = <>O.<12>__SurvivorIconController_UpdateAvailability;
					if (obj34 == null)
					{
						hook_UpdateAvailability val34 = SurvivorIconController_UpdateAvailability;
						<>O.<12>__SurvivorIconController_UpdateAvailability = val34;
						obj34 = (object)val34;
					}
					SurvivorIconController.UpdateAvailability -= (hook_UpdateAvailability)obj34;
					object obj35 = <>O.<13>__CharacterSelectBarController_PickIcon;
					if (obj35 == null)
					{
						hook_PickIcon val35 = CharacterSelectBarController_PickIcon;
						<>O.<13>__CharacterSelectBarController_PickIcon = val35;
						obj35 = (object)val35;
					}
					CharacterSelectBarController.PickIcon -= (hook_PickIcon)obj35;
					object obj36 = <>O.<14>__CharacterSelectBarController_ShouldDisplaySurvivor;
					if (obj36 == null)
					{
						hook_ShouldDisplaySurvivor val36 = CharacterSelectBarController_ShouldDisplaySurvivor;
						<>O.<14>__CharacterSelectBarController_ShouldDisplaySurvivor = val36;
						obj36 = (object)val36;
					}
					CharacterSelectBarController.ShouldDisplaySurvivor -= (hook_ShouldDisplaySurvivor)obj36;
					object obj37 = <>O.<15>__CharacterSelectController_Update;
					if (obj37 == null)
					{
						hook_Update val37 = CharacterSelectController_Update;
						<>O.<15>__CharacterSelectController_Update = val37;
						obj37 = (object)val37;
					}
					CharacterSelectController.Update -= (hook_Update)obj37;
					object obj38 = <>O.<16>__MPInput_Update;
					if (obj38 == null)
					{
						hook_Update val38 = MPInput_Update;
						<>O.<16>__MPInput_Update = val38;
						obj38 = (object)val38;
					}
					MPInput.Update -= (hook_Update)obj38;
					object obj39 = <>O.<17>__LoadoutPanelController_UpdateDisplayData;
					if (obj39 == null)
					{
						hook_UpdateDisplayData val39 = LoadoutPanelController_UpdateDisplayData;
						<>O.<17>__LoadoutPanelController_UpdateDisplayData = val39;
						obj39 = (object)val39;
					}
					LoadoutPanelController.UpdateDisplayData -= (hook_UpdateDisplayData)obj39;
					object obj40 = <>O.<18>__MPButton_Update;
					if (obj40 == null)
					{
						hook_Update val40 = MPButton_Update;
						<>O.<18>__MPButton_Update = val40;
						obj40 = (object)val40;
					}
					MPButton.Update -= (hook_Update)obj40;
					object obj41 = <>O.<19>__CameraRigController_Start;
					if (obj41 == null)
					{
						hook_Start val41 = CameraRigController_Start;
						<>O.<19>__CameraRigController_Start = val41;
						obj41 = (object)val41;
					}
					CameraRigController.Start -= (hook_Start)obj41;
					object obj42 = <>O.<20>__HUD_OnEnable;
					if (obj42 == null)
					{
						hook_OnEnable val42 = HUD_OnEnable;
						<>O.<20>__HUD_OnEnable = val42;
						obj42 = (object)val42;
					}
					HUD.OnEnable -= (hook_OnEnable)obj42;
					object obj43 = <>O.<21>__PauseManager_CCTogglePause;
					if (obj43 == null)
					{
						hook_CCTogglePause val43 = PauseManager_CCTogglePause;
						<>O.<21>__PauseManager_CCTogglePause = val43;
						obj43 = (object)val43;
					}
					PauseManager.CCTogglePause -= (hook_CCTogglePause)obj43;
					object obj44 = <>O.<22>__SimpleDialogBox_Create;
					if (obj44 == null)
					{
						hook_Create val44 = SimpleDialogBox_Create;
						<>O.<22>__SimpleDialogBox_Create = val44;
						obj44 = (object)val44;
					}
					SimpleDialogBox.Create -= (hook_Create)obj44;
					object obj45 = <>O.<23>__LocalCameraEffect_OnUICameraPreCull;
					if (obj45 == null)
					{
						hook_OnUICameraPreCull val45 = LocalCameraEffect_OnUICameraPreCull;
						<>O.<23>__LocalCameraEffect_OnUICameraPreCull = val45;
						obj45 = (object)val45;
					}
					LocalCameraEffect.OnUICameraPreCull -= (hook_OnUICameraPreCull)obj45;
					object obj46 = <>O.<24>__CombatHealthBarViewer_SetLayoutHorizontal;
					if (obj46 == null)
					{
						hook_SetLayoutHorizontal val46 = CombatHealthBarViewer_SetLayoutHorizontal;
						<>O.<24>__CombatHealthBarViewer_SetLayoutHorizontal = val46;
						obj46 = (object)val46;
					}
					CombatHealthBarViewer.SetLayoutHorizontal -= (hook_SetLayoutHorizontal)obj46;
					object obj47 = <>O.<25>__NetworkUser_UpdateUserName;
					if (obj47 == null)
					{
						hook_UpdateUserName val47 = NetworkUser_UpdateUserName;
						<>O.<25>__NetworkUser_UpdateUserName = val47;
						obj47 = (object)val47;
					}
					NetworkUser.UpdateUserName -= (hook_UpdateUserName)obj47;
					object obj48 = <>O.<26>__ColorCatalog_GetMultiplayerColor;
					if (obj48 == null)
					{
						hook_GetMultiplayerColor val48 = ColorCatalog_GetMultiplayerColor;
						<>O.<26>__ColorCatalog_GetMultiplayerColor = val48;
						obj48 = (object)val48;
					}
					ColorCatalog.GetMultiplayerColor -= (hook_GetMultiplayerColor)obj48;
					object obj49 = <>O.<27>__Nameplate_SetBody;
					if (obj49 == null)
					{
						hook_SetBody val49 = Nameplate_SetBody;
						<>O.<27>__Nameplate_SetBody = val49;
						obj49 = (object)val49;
					}
					Nameplate.SetBody -= (hook_SetBody)obj49;
					object obj50 = <>O.<28>__BaseSettingsControl_GetCurrentUserProfile;
					if (obj50 == null)
					{
						hook_GetCurrentUserProfile val50 = BaseSettingsControl_GetCurrentUserProfile;
						<>O.<28>__BaseSettingsControl_GetCurrentUserProfile = val50;
						obj50 = (object)val50;
					}
					BaseSettingsControl.GetCurrentUserProfile -= (hook_GetCurrentUserProfile)obj50;
					object obj51 = <>O.<29>__InputBindingControl_StartListening;
					if (obj51 == null)
					{
						hook_StartListening val51 = InputBindingControl_StartListening;
						<>O.<29>__InputBindingControl_StartListening = val51;
						obj51 = (object)val51;
					}
					InputBindingControl.StartListening -= (hook_StartListening)obj51;
					object obj52 = <>O.<30>__MPInput_CenterCursor;
					if (obj52 == null)
					{
						hook_CenterCursor val52 = MPInput_CenterCursor;
						<>O.<30>__MPInput_CenterCursor = val52;
						obj52 = (object)val52;
					}
					MPInput.CenterCursor -= (hook_CenterCursor)obj52;
					object obj53 = <>O.<31>__VoteInfoPanelController_Awake;
					if (obj53 == null)
					{
						hook_Awake val53 = VoteInfoPanelController_Awake;
						<>O.<31>__VoteInfoPanelController_Awake = val53;
						obj53 = (object)val53;
					}
					VoteInfoPanelController.Awake -= (hook_Awake)obj53;
					object obj54 = <>O.<32>__CharacterSelectController_ClientSetReady;
					if (obj54 == null)
					{
						hook_ClientSetReady val54 = CharacterSelectController_ClientSetReady;
						<>O.<32>__CharacterSelectController_ClientSetReady = val54;
						obj54 = (object)val54;
					}
					CharacterSelectController.ClientSetReady -= (hook_ClientSetReady)obj54;
					object obj55 = <>O.<33>__CharacterSelectController_ClientSetUnready;
					if (obj55 == null)
					{
						hook_ClientSetUnready val55 = CharacterSelectController_ClientSetUnready;
						<>O.<33>__CharacterSelectController_ClientSetUnready = val55;
						obj55 = (object)val55;
					}
					CharacterSelectController.ClientSetUnready -= (hook_ClientSetUnready)obj55;
					object obj56 = <>O.<34>__MPEventSystem_RecenterCursors;
					if (obj56 == null)
					{
						hook_RecenterCursors val56 = MPEventSystem_RecenterCursors;
						<>O.<34>__MPEventSystem_RecenterCursors = val56;
						obj56 = (object)val56;
					}
					MPEventSystem.RecenterCursors -= (hook_RecenterCursors)obj56;
					object obj57 = <>O.<35>__ProfileNameLabel_LateUpdate;
					if (obj57 == null)
					{
						hook_LateUpdate val57 = ProfileNameLabel_LateUpdate;
						<>O.<35>__ProfileNameLabel_LateUpdate = val57;
						obj57 = (object)val57;
					}
					ProfileNameLabel.LateUpdate -= (hook_LateUpdate)obj57;
					object obj58 = <>O.<36>__ScoreboardController_Awake;
					if (obj58 == null)
					{
						hook_Awake val58 = ScoreboardController_Awake;
						<>O.<36>__ScoreboardController_Awake = val58;
						obj58 = (object)val58;
					}
					ScoreboardController.Awake -= (hook_Awake)obj58;
					object obj59 = <>O.<37>__RuleCategoryController_SetRandomVotes;
					if (obj59 == null)
					{
						hook_SetRandomVotes val59 = RuleCategoryController_SetRandomVotes;
						<>O.<37>__RuleCategoryController_SetRandomVotes = val59;
						obj59 = (object)val59;
					}
					RuleCategoryController.SetRandomVotes -= (hook_SetRandomVotes)obj59;
					object obj60 = <>O.<39>__InputBindingDisplayController_Refresh;
					if (obj60 == null)
					{
						hook_Refresh val60 = InputBindingDisplayController_Refresh;
						<>O.<39>__InputBindingDisplayController_Refresh = val60;
						obj60 = (object)val60;
					}
					InputBindingDisplayController.Refresh -= (hook_Refresh)obj60;
					object obj61 = <>O.<40>__InputBindingDisplayController_OnEnable;
					if (obj61 == null)
					{
						hook_OnEnable val61 = InputBindingDisplayController_OnEnable;
						<>O.<40>__InputBindingDisplayController_OnEnable = val61;
						obj61 = (object)val61;
					}
					InputBindingDisplayController.OnEnable -= (hook_OnEnable)obj61;
					object obj62 = <>O.<41>__CustomScrollbar_Awake;
					if (obj62 == null)
					{
						hook_Awake val62 = CustomScrollbar_Awake;
						<>O.<41>__CustomScrollbar_Awake = val62;
						obj62 = (object)val62;
					}
					CustomScrollbar.Awake -= (hook_Awake)obj62;
					object obj63 = <>O.<42>__HUDScaleController_SetScale;
					if (obj63 == null)
					{
						hook_SetScale val63 = HUDScaleController_SetScale;
						<>O.<42>__HUDScaleController_SetScale = val63;
						obj63 = (object)val63;
					}
					HUDScaleController.SetScale -= (hook_SetScale)obj63;
					bool flag2 = false;
				}
				SetGeneralRunDelegates(enable);
				SetGeneralHooks(enable);
				break;
			}
		}

		private static void CustomScrollbar_Awake(orig_Awake orig, CustomScrollbar self)
		{
			orig.Invoke(self);
			if ((Object)(object)((Component)self).gameObject.GetComponent<MultiInputHelper>() == (Object)null)
			{
				((Component)self).gameObject.AddComponent<MultiInputHelper>().mpScrollbar = (MPScrollbar)(object)self;
			}
		}

		private static void SettingsPanelController_Start(orig_Start orig, SettingsPanelController self)
		{
			orig.Invoke(self);
			Slider[] componentsInChildren = ((Component)self).GetComponentsInChildren<Slider>();
			foreach (Slider val in componentsInChildren)
			{
				if ((Object)(object)((Component)val).gameObject.GetComponent<MultiInputHelper>() == (Object)null)
				{
					((Component)val).gameObject.AddComponent<MultiInputHelper>().slider = val;
				}
			}
		}

		private static void SubmenuMainMenuScreen_OnExit(orig_OnExit orig, SubmenuMainMenuScreen self, MainMenuController mainMenuController)
		{
			orig.Invoke(self, mainMenuController);
			Plugin.RecreateAssignmentScreen();
		}

		private static void MPButton_Awake(orig_Awake orig, MPButton self)
		{
			orig.Invoke(self);
			if ((Object)(object)((Component)self).gameObject.GetComponent<MultiInputHelper>() == (Object)null)
			{
				((Component)self).gameObject.AddComponent<MultiInputHelper>().mpButton = self;
			}
		}

		private static void MPToggle_Awake(orig_Awake orig, MPToggle self)
		{
			orig.Invoke(self);
			if ((Object)(object)((Component)self).gameObject.GetComponent<MultiInputHelper>() == (Object)null)
			{
				((Component)self).gameObject.AddComponent<MultiInputHelper>().toggle = (Toggle)(object)self;
			}
		}

		private static void MPDropdown_Awake(orig_Awake orig, MPDropdown self)
		{
			orig.Invoke(self);
			if ((Object)(object)((Component)self).gameObject.GetComponent<MultiInputHelper>() == (Object)null)
			{
				((Component)self).gameObject.AddComponent<MultiInputHelper>().mpDropdown = self;
			}
		}

		private static void ViewablesCatalog_AddNodeToRoot(orig_AddNodeToRoot orig, Node node)
		{
			node.SetParent(ViewablesCatalog.rootNode);
			foreach (Node item in node.Descendants())
			{
				if (!ViewablesCatalog.fullNameToNodeMap.ContainsKey(item.fullName))
				{
					ViewablesCatalog.fullNameToNodeMap.Add(item.fullName, item);
				}
			}
		}

		private static void LocalUserManager_AddUser(orig_AddUser orig, Player inputPlayer, UserProfile userProfile)
		{
			if (!LocalUserManager.UserExists(inputPlayer))
			{
				int firstAvailableId = LocalUserManager.GetFirstAvailableId();
				LocalSplitscreenUser localSplitscreenUser = new LocalSplitscreenUser();
				((LocalUser)localSplitscreenUser).inputPlayer = inputPlayer;
				((LocalUser)localSplitscreenUser).id = firstAvailableId;
				((LocalUser)localSplitscreenUser).userProfile = userProfile;
				LocalSplitscreenUser localSplitscreenUser2 = localSplitscreenUser;
				LocalUserManager.localUsersList.Add((LocalUser)(object)localSplitscreenUser2);
				userProfile.OnLogin();
				MPEventSystem.FindByPlayer(inputPlayer).localUser = (LocalUser)(object)localSplitscreenUser2;
				((Action<LocalUser>)typeof(LocalUserManager).GetField("onUserSignIn", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null))?.Invoke((LocalUser)(object)localSplitscreenUser2);
				((Action)typeof(LocalUserManager).GetField("onLocalUsersUpdated", BindingFlags.Static | BindingFlags.NonPublic).GetValue(null))?.Invoke();
			}
		}

		private static void SurvivorIconController_Update(orig_Update orig, SurvivorIconController self)
		{
			if (!((Object)(object)EventSystem.current == (Object)null))
			{
				EventSystem current = EventSystem.current;
				MPEventSystem val = (MPEventSystem)(object)((current is MPEventSystem) ? current : null);
				if (!((Object)(object)val == (Object)null))
				{
					orig.Invoke(self);
				}
			}
		}

		private static object MPInputModule_GetMousePointerEventData(orig_GetMousePointerEventData orig, MPInputModule self, int playerId, int mouseIndex)
		{
			//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_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Invalid comparison between Unknown and I4
			//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_0095: 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_00e8: 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_00f0: 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_00cf: 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_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_0245: 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_025a: Expected O, but got Unknown
			//IL_016c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0171: Unknown result type (might be due to invalid IL or missing references)
			//IL_0420: Unknown result type (might be due to invalid IL or missing references)
			//IL_0425: Unknown result type (might be due to invalid IL or missing references)
			//IL_0428: Unknown result type (might be due to invalid IL or missing references)
			//IL_04dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_04f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0228: Unknown result type (might be due to invalid IL or missing references)
			//IL_0541: Unknown result type (might be due to invalid IL or missing references)
			//IL_02ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_02b2: Invalid comparison between Unknown and I4
			//IL_0338: 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)
			IMouseInputSource mouseInputSource = ((RewiredPointerInputModule)self).GetMouseInputSource(playerId, mouseIndex);
			if (mouseInputSource == null)
			{
				return null;
			}
			MPEventSystem val = (MPEventSystem)((BaseInputModule)self).eventSystem;
			Player val2 = (((int)val != 0) ? val.player : null);
			Controller lastActiveController = val2.controllers.GetLastActiveController();
			if (val2 == null || lastActiveController == null || (int)lastActiveController.type == 1)
			{
				return orig.Invoke(self, playerId, mouseIndex);
			}
			PlayerPointerEventData val3 = default(PlayerPointerEventData);
			bool pointerData = ((RewiredPointerInputModule)self).GetPointerData(playerId, mouseIndex, -1, ref val3, true, (PointerEventType)0);
			((AbstractEventData)val3).Reset();
			Vector2 mousePosition = ((BaseInputModule)self).input.mousePosition;
			if (pointerData)
			{
				((PointerEventData)val3).position = mousePosition;
			}
			if (mouseInputSource.locked || !mouseInputSource.enabled)
			{
				((PointerEventData)val3).position = new Vector2(-1f, -1f);
				((PointerEventData)val3).delta = Vector2.zero;
			}
			else
			{
				((PointerEventData)val3).position = mousePosition;
				((PointerEventData)val3).delta = mousePosition - ((PointerEventData)val3).position;
			}
			((PointerEventData)val3).scrollDelta = mouseInputSource.wheelDelta;
			((PointerEventData)val3).button = (InputButton)0;
			Vector2 position = ((PointerEventData)val3).position;
			EventSystem eventSystem = ((BaseInputModule)self).eventSystem;
			LocalSplitscreenUser localSplitscreenUser = ((MPEventSystem)((eventSystem is MPEventSystem) ? eventSystem : null)).localUser as LocalSplitscreenUser;
			if (Object.op_Implicit((Object)(object)Run.instance) && localSplitscreenUser != null && (Object)(object)((LocalUser)localSplitscreenUser).eventSystem.cursorIndicatorController?.currentChildIndicator != (Object)null)
			{
				Vector2 position2 = ((PointerEventData)val3).position;
				if (localSplitscreenUser.assignment.display != 0 && Display.displays[localSplitscreenUser.assignment.display].active)
				{
					for (int i = 0; i < localSplitscreenUser.assignment.display; i++)
					{
						if (Display.displays[i].active)
						{
							position2.x += Display.displays[i].systemWidth;
						}
					}
					position2.y += Display.displays[0].systemHeight - Display.displays[localSplitscreenUser.assignment.display].systemHeight;
				}
				((PointerEventData)val3).position = position2;
			}
			((BaseInputModule)self).eventSystem.RaycastAll((PointerEventData)(object)val3, ((BaseInputModule)self).m_RaycastResultCache);
			((PointerEventData)val3).position = position;
			MPEventSystem val4 = (MPEventSystem)((BaseInputModule)self).eventSystem;
			if (val4.isCursorVisible)
			{
				if (val2.GetAnyButton())
				{
					Input.UpdateEventSystem(val4);
				}
				if (val2.id > 0 && val2.controllers.joystickCount > 0 && val2.controllers.hasKeyboard)
				{
					if ((int)lastActiveController.type == 2)
					{
						if (!((BaseInputModule)self).eventSystem.sendNavigationEvents)
						{
							((BaseInputModule)self).eventSystem.sendNavigationEvents = true;
						}
					}
					else if (((BaseInputModule)self).eventSystem.sendNavigationEvents)
					{
						((BaseInputModule)self).eventSystem.sendNavigationEvents = false;
					}
				}
				if (self.useCursor && val2.controllers.joystickCount > 0)
				{
					MultiInputHelper multiInputHelper = null;
					foreach (RaycastResult item in ((BaseInputModule)self).m_RaycastResultCache)
					{
						RaycastResult current = item;
						GameObject gameObject = ((RaycastResult)(ref current)).gameObject;
						multiInputHelper = ((gameObject != null) ? gameObject.GetComponentInParent<MultiInputHelper>() : null);
						if ((Object)(object)multiInputHelper != (Object)null && !((Object)((RaycastResult)(ref current)).gameObject).name.ToLower().Contains("command"))
						{
							break;
						}
						multiInputHelper = null;
					}
					if ((Object)(object)multiInputHelper != (Object)null)
					{
						bool flag = val2.GetButtonDown(4) || val2.GetButtonDown(14);
						bool flag2 = val2.GetButton(4) || val2.GetButton(14);
						if (flag || flag2)
						{
							multiInputHelper.OnClick((PointerEventData)(object)val3, flag, flag2);
						}
						else
						{
							((BaseInputModule)self).eventSystem.SetSelectedGameObject((GameObject)null);
						}
					}
					else
					{
						((BaseInputModule)self).eventSystem.SetSelectedGameObject((GameObject)null);
					}
				}
			}
			RaycastResult pointerCurrentRaycast = BaseInputModule.FindFirstRaycast(((BaseInputModule)self).m_RaycastResultCache);
			((PointerEventData)val3).pointerCurrentRaycast = pointerCurrentRaycast;
			self.UpdateHover(((BaseInputModule)self).m_RaycastResultCache);
			((BaseInputModule)self).m_RaycastResultCache.Clear();
			PlayerPointerEventData val5 = default(PlayerPointerEventData);
			((RewiredPointerInputModule)self).GetPointerData(playerId, mouseIndex, -2, ref val5, true, (PointerEventType)0);
			((RewiredPointerInputModule)self).CopyFromTo((PointerEventData)(object)val3, (PointerEventData)(object)val5);
			((PointerEventData)val5).button = (InputButton)1;
			PlayerPointerEventData val6 = default(PlayerPointerEventData);
			((RewiredPointerInputModule)self).GetPointerData(playerId, mouseIndex, -3, ref val6, true, (PointerEventType)0);
			((RewiredPointerInputModule)self).CopyFromTo((PointerEventData)(object)val3, (PointerEventData)(object)val6);
			((PointerEventData)val6).button = (InputButton)2;
			PlayerPointerEventData val7 = default(PlayerPointerEventData);
			for (int j = 3; j < mouseInputSource.buttonCount; j++)
			{
				((RewiredPointerInputModule)self).GetPointerData(playerId, mouseIndex, j - 2147483520, ref val7, true, (PointerEventType)0);
				((RewiredPointerInputModule)self).CopyFromTo((PointerEventData)(object)val3, (PointerEventData)(object)val7);
				((PointerEventData)val7).button = (InputButton)(-1);
			}
			self.m_MouseState.SetButtonState(0, ((RewiredPointerInputModule)self).StateForMouseButton(playerId, mouseIndex, 0), val3);
			self.m_MouseState.SetButtonState(1, ((RewiredPointerInputModule)self).StateForMouseButton(playerId, mouseIndex, 1), val5);
			self.m_MouseState.SetButtonState(2, ((RewiredPointerInputModule)self).StateForMouseButton(playerId, mouseIndex, 2), val6);
			PlayerPointerEventData val8 = default(PlayerPointerEventData);
			for (int k = 3; k < mouseInputSource.buttonCount; k++)
			{
				((RewiredPointerInputModule)self).GetPointerData(playerId, mouseIndex, k - 2147483520, ref val8, false, (PointerEventType)0);
				self.m_MouseState.SetButtonState(k, ((RewiredPointerInputModule)self).StateForMouseButton(playerId, mouseIndex, k), val8);
			}
			return self.m_MouseState;
		}

		private static void MPEventSystem_ValidateCurrentSelectedGameobject(orig_ValidateCurrentSelectedGameobject orig, MPEventSystem self)
		{
			if (Object.op_Implicit((Object)(object)((EventSystem)self).currentSelectedGameObject))
			{
				Selectable component = ((EventSystem)self).currentSelectedGameObject.GetComponent<Selectable>();
				MPButton val = (MPButton)(object)((component is MPButton) ? component : null);
				bool flag = !((Object)(object)component == (Object)null) && component.hasSelection;
				if ((Object)(object)val != (Object)null && !val.CanBeSelected())
				{
					flag = false;
				}
				if (!flag)
				{
					((EventSystem)self).SetSelectedGameObject((GameObject)null);
				}
			}
		}

		private static void InputSourceFilter_Refresh(orig_Refresh orig, InputSourceFilter self, bool forceRefresh)
		{
			//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_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_0029: Invalid comparison between Unknown and I4
			InputSource? val = (InputSource)0;
			bool flag = ((val.GetValueOrDefault() == self.requiredInputSource) & val.HasValue) || (int)self.requiredInputSource == 0;
			if (flag != self.wasOn || forceRefresh)
			{
				for (int i = 0; i < self.objectsToFilter.Length; i++)
				{
					self.objectsToFilter[i].SetActive(flag);
				}
			}
			self.wasOn = flag;
		}

		private static void HUDScaleController_SetScale(orig_SetScale orig, HUDScaleController self)
		{
			//IL_0081: Unknown result type (might be due to invalid IL or missing references)
			if (!(((Component)self).GetComponent<HUD>().localUserViewer.currentNetworkUser.localUser is LocalSplitscreenUser localSplitscreenUser))
			{
				orig.Invoke(self);
				return;
			}
			Vector3 localScale = default(Vector3);
			((Vector3)(ref localScale))..ctor((float)localSplitscreenUser.assignment.hudScale / 100f, (float)localSplitscreenUser.assignment.hudScale / 100f, (float)localSplitscreenUser.assignment.hudScale / 100f);
			RectTransform[] rectTransforms = self.rectTransforms;
			foreach (RectTransform val in rectTransforms)
			{
				((Transform)val).localScale = localScale;
			}
		}

		private static void InputBindingDisplayController_OnEnable(orig_OnEnable orig, InputBindingDisplayController self)
		{
			orig.Invoke(self);
			self.Refresh(true);
		}

		private static void InputBindingDisplayController_Refresh(orig_Refresh orig, InputBindingDisplayController self, bool forceRefresh)
		{
			MPEventSystem eventSystem = self.eventSystemLocator.eventSystem;
			if (((Object)self).name.Equals("ButtonText"))
			{
				self.eventSystemLocator.eventSystem = Input.lastEventSystem;
			}
			orig.Invoke(self, forceRefresh);
			self.eventSystemLocator.eventSystem = eventSystem;
		}

		private static void TooltipController_SetTooltipProvider(orig_SetTooltipProvider orig, TooltipController self, TooltipProvider provider)
		{
			orig.Invoke(self, provider);
			UICamera uiCamera = self.uiCamera;
			if ((Object)(object)((uiCamera != null) ? uiCamera.camera : null) != (Object)null)
			{
				((Component)self).GetComponent<Canvas>().targetDisplay = self.uiCamera.camera.targetDisplay;
			}
		}

		private static void RuleCategoryController_SetRandomVotes(orig_SetRandomVotes orig, RuleCategoryController self)
		{
			MPEventSystem eventSystem = self.eventSystemLocator.eventSystem;
			self.eventSystemLocator.eventSystem = Input.lastEventSystem;
			orig.Invoke(self);
			self.eventSystemLocator.eventSystem = eventSystem;
		}

		private static void ScoreboardController_Awake(orig_Awake orig, ScoreboardController self)
		{
			orig.Invoke(self);
			((Component)((Component)((Component)self).transform).GetComponentInChildren<PostProcessDuration>()).gameObject.SetActive(false);
		}

		private static void ProfileNameLabel_LateUpdate(orig_LateUpdate orig, ProfileNameLabel self)
		{
			if (!(Input.lastEventSystem.localUser.userProfile.name == self.currentUserName))
			{
				self.currentUserName = Input.lastEventSystem.localUser.userProfile.name;
				((TMP_Text)self.label).text = Language.GetStringFormatted(self.token, new object[1] { self.currentUserName });
			}
		}

		private static void MPEventSystem_RecenterCursors(orig_RecenterCursors orig)
		{
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			Log.LogOutput("MPEventSystem_RecenterCursors");
			foreach (MPEventSystem instances in MPEventSystem.instancesList)
			{
				if (Object.op_Implicit((Object)(object)((EventSystem)instances).currentInputModule))
				{
					((MPInput)((EventSystem)instances).currentInputModule.input).CenterCursor();
				}
			}
		}

		private static void CharacterSelectController_ClientSetUnready(orig_ClientSetUnready orig, CharacterSelectController self)
		{
			LocalUser localUser = Input.lastEventSystem.localUser;
			if (localUser != null)
			{
				NetworkUser currentNetworkUser = localUser.currentNetworkUser;
				if (currentNetworkUser != null)
				{
					currentNetworkUser.CallCmdSubmitVote(((Component)PreGameController.instance).gameObject, -1);
				}
			}
		}

		private static void CharacterSelectController_ClientSetReady(orig_ClientSetReady orig, CharacterSelectController self)
		{
			LocalUser localUser = Input.lastEventSystem.localUser;
			if (localUser != null)
			{
				NetworkUser currentNetworkUser = localUser.currentNetworkUser;
				if (currentNetworkUser != null)
				{
					currentNetworkUser.CallCmdSubmitVote(((Component)PreGameController.instance).gameObject, 0);
				}
			}
		}

		private static void VoteInfoPanelController_Awake(orig_Awake orig, VoteInfoPanelController self)
		{
			if (RoR2Application.isInMultiPlayer || Plugin.active)
			{
				self.voteController.canChangeVote = true;
			}
			else
			{
				((Component)self).gameObject.SetActive(false);
			}
		}

		private static void MPInput_CenterCursor(orig_CenterCursor orig, MPInput self)
		{
			//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_008c: 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_0097: 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_00ca: 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_00f4: 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_0120: 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_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)
			//IL_013c: Unknown result type (might be due to invalid IL or missing references)
			Log.LogOutput("MPInput_CenterCursor");
			if (self.eventSystem.localUser is LocalSplitscreenUser localSplitscreenUser && localSplitscreenUser.assignment.display != -1 && localSplitscreenUser.assignment.display < Display.displays.Length)
			{
				Vector2 val = new Vector2((float)Display.displays[localSplitscreenUser.assignment.display].systemWidth, (float)Display.displays[localSplitscreenUser.assignment.display].systemHeight) * 0.5f;
				Vector2 val2 = val / 2f;
				if (localSplitscreenUser.assignment.position.y > 1)
				{
					val.y += val2.y;
				}
				else if (localSplitscreenUser.assignment.position.y < 1)
				{
					val.y -= val2.y;
				}
				if (localSplitscreenUser.assignment.position.x > 1)
				{
					val.x += val2.x;
				}
				else if (localSplitscreenUser.assignment.position.x < 1)
				{
					val.x -= val2.x;
				}
				self.internalMousePosition = val;
			}
			else
			{
				orig.Invoke(self);
			}
		}

		private static void InputBindingControl_StartListening(orig_StartListening orig, InputBindingControl self)
		{
			MPEventSystem eventSystem = self.eventSystemLocator.eventSystem;
			self.eventSystemLocator.eventSystem = Input.lastEventSystem;
			orig.Invoke(self);
			self.eventSystemLocator.eventSystem = eventSystem;
		}

		private static UserProfile BaseSettingsControl_GetCurrentUserProfile(orig_GetCurrentUserProfile orig, BaseSettingsControl self)
		{
			MPEventSystem lastEventSystem = Input.lastEventSystem;
			object result;
			if (lastEventSystem == null)
			{
				result = null;
			}
			else
			{
				LocalUser localUser = lastEventSystem.localUser;
				result = ((localUser != null) ? localUser.userProfile : null);
			}
			return (UserProfile)result;
		}

		private static Color ColorCatalog_GetMultiplayerColor(orig_GetMultiplayerColor orig, int playerSlot)
		{
			//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_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_0035: Unknown result type (might be due to invalid IL or missing references)
			if (MPEventSystem.activeCount <= 1)
			{
				return Color.white;
			}
			return ((LocalSplitscreenUser)(object)LocalUserManager.localUsersList[playerSlot]).assignment.color;
		}

		private static void Nameplate_SetBody(orig_SetBody orig, Nameplate self, CharacterBody body)
		{
			//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)
			self.body = body;
			CharacterBody body2 = self.body;
			object obj;
			if (body2 == null)
			{
				obj = null;
			}
			else
			{
				CharacterMaster master = body2.master;
				if (master == null)
				{
					obj = null;
				}
				else
				{
					PlayerCharacterMasterController playerCharacterMasterController = master.playerCharacterMasterController;
					obj = ((playerCharacterMasterController == null) ? null : playerCharacterMasterController.networkUser?.localUser);
				}
			}
			if (obj != null)
			{
				self.baseColor = ColorCatalog.GetMultiplayerColor(self.body.master.playerCharacterMasterController.networkUser.localUser.id);
			}
		}

		private static void NetworkUser_UpdateUserName(orig_UpdateUserName orig, NetworkUser self)
		{
			//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)
			LocalSplitscreenUser localSplitscreenUser = self.localUser as LocalSplitscreenUser;
			if (self.localUser == null)
			{
				Log.LogOutput("Local user is null");
				NetworkPlayerName networkPlayerName = self.GetNetworkPlayerName();
				self.userName = ((NetworkPlayerName)(ref networkPlayerName)).GetResolvedName();
			}
			else
			{
				Log.LogOutput("Local user is NOT null");
				self.userName = ((LocalUser)localSplitscreenUser).userProfile.name;
			}
		}

		private static void CombatHealthBarViewer_SetLayoutHorizontal(orig_SetLayoutHorizontal orig, CombatHealthBarViewer self)
		{
			if (Object.op_Implicit((Object)(object)self.uiCamera))
			{
				self.UpdateAllHealthbarPositions(self.uiCamera.cameraRigController.sceneCam, self.uiCamera.camera);
			}
		}

		private static void LocalCameraEffect_OnUICameraPreCull(orig_OnUICameraPreCull orig, UICamera uiCamera)
		{
			GameObject target = uiCamera.cameraRigController.target;
			for (int i = 0; i < LocalCameraEffect.instancesList.Count; i++)
			{
				LocalCameraEffect val = LocalCameraEffect.instancesList[i];
				object obj;
				if (uiCamera == null)
				{
					obj = null;
				}
				else
				{
					CameraRigController cameraRigController = uiCamera.cameraRigController;
					if (cameraRigController == null)
					{
						obj = null;
					}
					else
					{
						LocalUser localUserViewer = cameraRigController.localUserViewer;
						if (localUserViewer == null)
						{
							obj = null;
						}
						else
						{
							CharacterBody cachedBody = localUserViewer.cachedBody;
							obj = ((cachedBody != null) ? cachedBody.healthComponent : null);
						}
					}
				}
				HealthComponent val2 = (HealthComponent)obj;
				if (Object.op_Implicit((Object)(object)val2))
				{
					if ((Object)(object)val.targetCharacter == (Object)(object)target && val2.alive)
					{
						val.effectRoot.SetActive(true);
					}
					else
					{
						val.effectRoot.SetActive(false);
					}
				}
			}
		}

		private static SimpleDialogBox SimpleDialogBox_Create(orig_Create orig, MPEventSystem owner)
		{
			SimpleDialogBox val = orig.Invoke(owner);
			if (Object.op_Implicit((Object)(object)Run.instance) && (Object)(object)Input.lastEventSystem != (Object)null)
			{
				((Component)((Component)val).transform.parent).gameObject.AddComponent<MultiMonitorHelper>().targetDisplay = ((LocalSplitscreenUser)(object)Input.lastEventSystem.localUser).assignment.display;
			}
			return val;
		}

		private static void MPEventSystem_Update(orig_Update orig, MPEventSystem self)
		{
			EventSystem current = EventSystem.current;
			EventSystem.current = (EventSystem)(object)self;
			IntPtr functionPointer = typeof(EventSystem).GetMethod("Update", (BindingFlags)(-1)).MethodHandle.GetFunctionPointer();
			Action action = (Action)Activator.CreateInstance(typeof(Action), self, functionPointer);
			action();
			EventSystem.current = current;
			self.ValidateCurrentSelectedGameobject();
			if (self.player.GetButtonDown(25) && (PauseScreenController.instancesList.Count == 0 || SimpleDialogBox.instancesList.Count == 0))
			{
				Console instance = Console.instance;
				LocalUser localUser = self.localUser;
				instance.SubmitCmd((localUser != null) ? localUser.currentNetworkUser : null, "pause", false);
			}
		}

		private static void PauseManager_CCTogglePause(orig_CCTogglePause orig, ConCommandArgs args)
		{
			//IL_0001: 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_0012: Unknown result type (might be due to invalid IL or missing references)
			if (args.localUserSender != null)
			{
				LocalSplitscreenUser localSplitscreenUser = args.localUserSender as LocalSplitscreenUser;
				if (Object.op_Implicit((Object)(object)PauseManager.pauseScreenInstance))
				{
					Object.Destroy((Object)(object)localSplitscreenUser.pauseScreenInstance);
					{
						foreach (LocalSplitscreenUser localUsers in LocalUserManager.localUsersList)
						{
							if ((Object)(object)localUsers.pauseScreenInstance != (Object)null)
							{
								PauseManager.pauseScreenInstance = localUsers.pauseScreenInstance;
							}
						}
						return;
					}
				}
				if (NetworkManager.singleton.isNetworkActive)
				{
					PauseManager.pauseScreenInstance = Object.Instantiate<GameObject>(LegacyResourcesAPI.Load<GameObject>("Prefabs/UI/PauseScreen"), ((Component)RoR2Application.instance).transform);
					localSplitscreenUser.pauseScreenInstance = PauseManager.pauseScreenInstance;
					localSplitscreenUser.pauseScreenInstance.GetComponent<Canvas>().targetDisplay = localSplitscreenUser.assignment.display;
				}
			}
			else
			{
				orig.Invoke(args);
			}
		}

		private static void HUD_OnEnable(orig_OnEnable orig, HUD self)
		{
			orig.Invoke(self);
			LocalUser localUserViewer = self.localUserViewer;
			if (((localUserViewer == null) ? null : localUserViewer.currentNetworkUser?.localUser) != null)
			{
				self.canvas.targetDisplay = (self.localUserViewer.currentNetworkUser.localUser as LocalSplitscreenUser).assignment.display;
				self.canvas.renderMode = (RenderMode)0;
			}
		}

		private static void CameraRigController_Start(orig_Start orig, CameraRigController self)
		{
			orig.Invoke(self);
			if (!Object.op_Implicit((Object)(object)Run.instance) || self.viewer?.localUser == null)
			{
				return;
			}
			LocalSplitscreenUser localSplitscreenUser = self.viewer.localUser as LocalSplitscreenUser;
			int display = localSplitscreenUser.assignment.display;
			if (localSplitscreenUser != null && display != 0)
			{
				if (!Display.displays[display].active)
				{
					Display.displays[display].Activate();
				}
				self.sceneCam.targetDisplay = display;
				self.uiCam.targetDisplay = display;
				Canvas component = ((Component)((LocalUser)localSplitscreenUser).eventSystem.cursorIndicatorController).GetComponent<Canvas>();
				component.targetDisplay = display;
				component.renderMode = (RenderMode)0;
			}
		}

		private static void CursorOpener_OnEnable(orig_OnEnable orig, CursorOpener self)
		{
			orig.Invoke(self);
			if (self.forceCursorForGamePad != Plugin.active)
			{
				self.forceCursorForGamePad = Plugin.active;
			}
		}

		private static void MPInput_Update(orig_Update orig, MPInput self)
		{
			//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_020c: Unknown result type (might be due to invalid IL or missing references)
			//IL_020e: 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_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_00b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bb: Invalid comparison between Unknown and I4
			//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_00da: 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_0169: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: 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_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_01a1: 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_01ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b1: Unknown result type (might be due to invalid IL or missing references)
			Vector2 mousePosition = ((BaseInput)self).mousePosition;
			if (Object.op_Implicit((Object)(object)Run.instance))
			{
				if (self.eventSystem.isCursorVisible && LocalUserManager.localUsersList[self.eventSystem.localUser.id] is LocalSplitscreenUser localSplitscreenUser)
				{
					int renderingWidth = Display.displays[localSplitscreenUser.assignment.display].renderingWidth;
					int renderingHeight = Display.displays[localSplitscreenUser.assignment.display].renderingHeight;
					float num = Mathf.Min((float)renderingWidth / 1920f, (float)renderingHeight / 1080f);
					self.internalScreenPositionDelta = Vector2.zero;
					if ((int)self.eventSystem.currentInputSource == 0)
					{
						if (Application.isFocused)
						{
							self.internalMousePosition = Vector2.op_Implicit(Input.mousePosition);
						}
					}
					else
					{
						Vector2 val = default(Vector2);
						((Vector2)(ref val))..ctor(self.player.GetAxis(23), self.player.GetAxis(24));
						float magnitude = ((Vector2)(ref val)).magnitude;
						self.stickMagnitude = Mathf.Min(Mathf.MoveTowards(self.stickMagnitude, magnitude, self.cursorAcceleration * Time.unscaledDeltaTime), magnitude);
						float num2 = self.stickMagnitude;
						if (self.eventSystem.isHovering)
						{
							num2 *= self.cursorStickyModifier;
						}
						self.internalScreenPositionDelta = (((double)magnitude == 0.0) ? Vector2.zero : (val * (num2 / magnitude))) * Time.unscaledDeltaTime * (1920f * self.cursorScreenSpeed * num);
						self.internalMousePosition += self.internalScreenPositionDelta;
					}
					self.internalMousePosition.x = Mathf.Clamp(self.internalMousePosition.x, 0f, (float)renderingWidth);
					self.internalMousePosition.y = Mathf.Clamp(self.internalMousePosition.y, 0f, (float)renderingHeight);
				}
			}
			else
			{
				orig.Invoke(self);
			}
			if (Vector3.SqrMagnitude(Vector2.op_Implicit(mousePosition - ((BaseInput)self).mousePosition)) > 0.1f)
			{
				Input.UpdateEventSystem(self.eventSystem);
			}
		}

		private static void CharacterSelectController_Update(orig_Update orig, CharacterSelectController self)
		{
			self.localUser = Input.lastEventSystem.localUser;
			orig.Invoke(self);
		}

		private static void SurvivorIconController_UpdateAvailability(orig_UpdateAvailability orig, SurvivorIconController self)
		{
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			self.SetBoolAndMarkDirtyIfChanged(ref self.survivorIsUnlocked, SurvivorCatalog.SurvivorIsUnlockedOnThisClient(self.survivorIndex));
			self.SetBoolAndMarkDirtyIfChanged(ref self.survivorRequiredExpansionEnabled, self.survivorDef.CheckRequiredExpansionEnabled((NetworkUser)null));
			bool flag = false;
			foreach (LocalUser readOnlyLocalUsers in LocalUserManager.readOnlyLocalUsersList)
			{
				flag |= self.survivorDef.CheckUserHasRequiredEntitlement(readOnlyLocalUsers);
			}
			self.SetBoolAndMarkDirtyIfChanged(ref self.survivorRequiredEntitlementAvailable, flag);
			self.survivorIsAvailable = self.survivorIsUnlocked && self.survivorRequiredExpansionEnabled && self.survivorRequiredEntitlementAvailable;
		}

		private static bool CharacterSelectBarController_ShouldDisplaySurvivor(orig_ShouldDisplaySurvivor orig, CharacterSelectBarController self, SurvivorDef survivorDef)
		{
			self.currentLocalUser = Input.lastEventSystem.localUser;
			return orig.Invoke(self, survivorDef);
		}

		private static void CharacterSelectBarController_PickIcon(orig_PickIcon orig, CharacterSelectBarController self, SurvivorIconController newPickedIcon)
		{
			self.currentLocalUser = Input.lastEventSystem.localUser;
			orig.Invoke(self, newPickedIcon);
		}

		private static void LoadoutPanelController_UpdateDisplayData(orig_UpdateDisplayData orig, LoadoutPanelController self)
		{
			//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_0052: 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_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)
			MPEventSystem lastEventSystem = Input.lastEventSystem;
			object obj;
			if (lastEventSystem == null)
			{
				obj = null;
			}
			else
			{
				LocalUser localUser = lastEventSystem.localUser;
				obj = ((localUser != null) ? localUser.userProfile : null);
			}
			UserProfile userProfile = (UserProfile)obj;
			MPEventSystem lastEventSystem2 = Input.lastEventSystem;
			object obj2;
			if (lastEventSystem2 == null)
			{
				obj2 = null;
			}
			else
			{
				LocalUser localUser2 = lastEventSystem2.localUser;
				obj2 = ((localUser2 != null) ? localUser2.currentNetworkUser : null);
			}
			NetworkUser val = (NetworkUser)obj2;
			BodyIndex bodyIndex = (BodyIndex)((!Object.op_Implicit((Object)(object)val)) ? (-1) : ((int)val.bodyIndexPreference));
			self.SetDisplayData(new DisplayData
			{
				userProfile = userProfile,
				bodyIndex = bodyIndex
			});
		}

		private static void MPButton_Update(orig_Update orig, MPButton self)
		{
		}

		private static void MPEventSystem_Update_IL(bool state)
		{
			//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_005b: Expected O, but got Unknown
			//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_0032: Expected O, but got Unknown
			if (state)
			{
				Log.LogOutput(" -------------- ENABLING ---------------");
				object obj = <>c.<>9__58_0;
				if (obj == null)
				{
					Manipulator val = delegate(ILContext il)
					{
						//IL_0002: Unknown result type (might be due to invalid IL or missing references)
						//IL_0008: Expected O, but got Unknown
						//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_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_011a: 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_0122: Unknown result type (might be due to invalid IL or missing references)
						ILCursor val4 = new ILCursor(il);
						val4.GotoNext(new Func<Instruction, bool>[4]
						{
							(Instruction x) => ILPatternMatchingExt.MatchCall<Console>(x, "get_instance"),
							(Instruction x) => ILPatternMatchingExt.MatchLdnull(x),
							(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "pause"),
							(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0)
						});
						val4.Index += 1;
						val4.Next.Operand = Input.lastEventSystem;
						OpCode opCode2 = val4.Next.OpCode;
						Log.LogOutput($"OpCode.Op1: {((OpCode)(ref opCode2)).Op1}");
						opCode2 = val4.Next.OpCode;
						Log.LogOutput($"OpCode.Op2: {((OpCode)(ref opCode2)).Op2}");
						opCode2 = val4.Next.OpCode;
						Log.LogOutput($"OpCode.FlowControl: {((OpCode)(ref opCode2)).FlowControl}");
						Log.LogOutput($"Operand: {val4.Next.Operand}");
					};
					<>c.<>9__58_0 = val;
					obj = (object)val;
				}
				MPEventSystem.Update += (Manipulator)obj;
				return;
			}
			object obj2 = <>c.<>9__58_1;
			if (obj2 == null)
			{
				Manipulator val2 = delegate(ILContext il)
				{
					//IL_0002: Unknown result type (might be due to invalid IL or missing references)
					//IL_0008: Expected O, but got Unknown
					//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_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_011a: 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_0122: Unknown result type (might be due to invalid IL or missing references)
					ILCursor val3 = new ILCursor(il);
					val3.GotoNext(new Func<Instruction, bool>[4]
					{
						(Instruction x) => ILPatternMatchingExt.MatchCall<Console>(x, "get_instance"),
						(Instruction x) => ILPatternMatchingExt.MatchLdnull(x),
						(Instruction x) => ILPatternMatchingExt.MatchLdstr(x, "pause"),
						(Instruction x) => ILPatternMatchingExt.MatchLdcI4(x, 0)
					});
					val3.Index += 1;
					val3.Next.Operand = Input.lastEventSystem;
					OpCode opCode = val3.Next.OpCode;
					Log.LogOutput($"OpCode.Op1: {((OpCode)(ref opCode)).Op1}");
					opCode = val3.Next.OpCode;
					Log.LogOutput($"OpCode.Op2: {((OpCode)(ref opCode)).Op2}");
					opCode = val3.Next.OpCode;
					Log.LogOutput($"OpCode.FlowControl: {((OpCode)(ref opCode)).FlowControl}");
					Log.LogOutput($"Operand: {val3.Next.Operand}");
				};
				<>c.<>9__58_1 = val2;
				obj2 = (object)val2;
			}
			MPEventSystem.Update -= (Manipulator)obj2;
		}

		private static void SetGeneralHooks(bool enable)
		{
			foreach (Hook hook in hooks)
			{
				if (enable)
				{
					hook.Apply();
				}
				else
				{
					hook.Undo();
				}
			}
		}

		private static void SetRunListeners(bool enable)
		{
			if (enable)
			{
				Run.onRunStartGlobal += OnRunStartGlobal;
				Run.onRunDestroyGlobal += OnRunDestroyGlobal;
			}
			else
			{
				Run.onRunStartGlobal -= OnRunStartGlobal;
				Run.onRunDestroyGlobal -= OnRunDestroyGlobal;
			}
		}

		private static void SetGeneralRunDelegates(bool enable)
		{
			Action[] array = new Action[1]
			{
				delegate
				{
					foreach (MPEventSystem instances in MPEventSystem.instancesList)
					{
						((Component)instances.cursorIndicatorController).GetComponent<Canvas>().targetDisplay = 0;
					}
				}
			};
			Action[] array2 = new Action[1]
			{
				delegate
				{
					foreach (LocalUser localUsers in LocalUserManager.localUsersList)
					{
						localUsers.currentNetworkUser.UpdateUserName();
					}
				}
			};
			if (enable)
			{
				Action[] array3 = array;
				foreach (Action item in array3)
				{
					onRunDestroyExecute.Add(item);
				}
				Action[] array4 = array2;
				foreach (Action item2 in array4)
				{
					onRunStartExecute.Add(item2);
				}
			}
			else
			{
				Action[] array5 = array;
				foreach (Action item3 in array5)
				{
					onRunDestroyExecute.Remove(item3);
				}
				Action[] array6 = array2;
				foreach (Action item4 in array6)
				{
					onRunStartExecute.Remove(item4);
				}
			}
		}

		private static void OnRunStartGlobal(Run run)
		{
			foreach (Action item in onRunStartExecute)
			{
				item();
			}
		}

		private static void OnRunDestroyGlobal(Run run)
		{
			foreach (Action item in onRunDestroyExecute)
			{
				item();
			}
		}

		private static void HealthComponent_TakeDamage(orig_TakeDamage orig, HealthComponent self, DamageInfo damageInfo)
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Invalid comparison between Unknown and I4
			//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 ((int)self.body.teamComponent.teamIndex == 1)
			{
				damageInfo.damage = 0f;
				damageInfo.force = Vector3.zero;
			}
			else
			{
				damageInfo.damage *= 100f;
			}
			orig.Invoke(self, damageInfo);
		}
	}
	public static class Input
	{
		private class UpdateInput : IMono
		{
			internal UpdateInput()
			{
				Plugin.RegisterIMono((IMono)(object)this);
				SetLastEventSystemDefault();
				EventSystem current = EventSystem.current;
				activeEventSystem = (MPEventSystem)(object)(