Decompiled source of Wendigos Voice Cloning v2.0.0

Wendigos.dll

Decompiled a week ago
using System;
using System.CodeDom.Compiler;
using System.Collections;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Globalization;
using System.IO;
using System.Linq;
using System.Net.Http;
using System.Reflection;
using System.Resources;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Security;
using System.Security.Cryptography;
using System.Security.Permissions;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using BepInEx;
using BepInEx.Configuration;
using GameNetcodeStuff;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using NAudio.CoreAudioApi;
using NAudio.Lame;
using NAudio.Wave;
using TimShaw.VoiceBox.Components;
using TimShaw.VoiceBox.Core;
using TimShaw.VoiceBox.Data;
using TimShaw.VoiceBox.GUI;
using TimShaw.VoiceBox.Generics;
using TimShaw.VoiceBox.Modding;
using Unity.Netcode;
using UnityEngine;
using UnityEngine.AI;
using UnityEngine.SceneManagement;
using Wendigos.NetcodePatcher;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETStandard,Version=v2.1", FrameworkDisplayName = "")]
[assembly: AssemblyCompany("Wendigos")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyDescription("Voice Cloning Mod for Lethal Company")]
[assembly: AssemblyFileVersion("2.0.0.0")]
[assembly: AssemblyInformationalVersion("2.0.0")]
[assembly: AssemblyProduct("Wendigos")]
[assembly: AssemblyTitle("Wendigos")]
[assembly: SecurityPermission(SecurityAction.RequestMinimum, SkipVerification = true)]
[assembly: AssemblyVersion("2.0.0.0")]
[module: UnverifiableCode]
[module: RefSafetyRules(11)]
[module: NetcodePatchedAssembly]
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;
		}
	}
}
public static class SavWav
{
	private const uint HeaderSize = 44u;

	private const float RescaleFactor = 32767f;

	public static void Save(string filename, AudioClip clip, bool trim = false)
	{
		if (!filename.ToLower().EndsWith(".wav"))
		{
			filename += ".wav";
		}
		string path = Path.Combine(Application.persistentDataPath, filename);
		Directory.CreateDirectory(Path.GetDirectoryName(path));
		using FileStream output = new FileStream(path, FileMode.Create);
		using BinaryWriter binaryWriter = new BinaryWriter(output);
		uint length;
		byte[] wav = GetWav(clip, out length, trim);
		binaryWriter.Write(wav, 0, (int)length);
	}

	public static byte[] GetWav(AudioClip clip, out uint length, bool trim = false)
	{
		uint samplesAfterTrimming;
		byte[] array = ConvertAndWrite(clip, out length, out samplesAfterTrimming, trim);
		WriteHeader(array, clip, length, samplesAfterTrimming);
		return array;
	}

	private static byte[] ConvertAndWrite(AudioClip clip, out uint length, out uint samplesAfterTrimming, bool trim)
	{
		float[] array = new float[clip.samples * clip.channels];
		clip.GetData(array, 0);
		int num = array.Length;
		int num2 = 0;
		int num3 = num - 1;
		if (trim)
		{
			for (int i = 0; i < num; i++)
			{
				if ((short)(array[i] * 32767f) != 0)
				{
					num2 = i;
					break;
				}
			}
			for (int num4 = num - 1; num4 >= 0; num4--)
			{
				if ((short)(array[num4] * 32767f) != 0)
				{
					num3 = num4;
					break;
				}
			}
		}
		byte[] array2 = new byte[(long)(num * 2) + 44L];
		uint num5 = 44u;
		for (int j = num2; j <= num3; j++)
		{
			short num6 = (short)(array[j] * 32767f);
			array2[num5++] = (byte)num6;
			array2[num5++] = (byte)(num6 >> 8);
		}
		length = num5;
		samplesAfterTrimming = (uint)(num3 - num2 + 1);
		return array2;
	}

	private static void AddDataToBuffer(byte[] buffer, ref uint offset, byte[] addBytes)
	{
		foreach (byte b in addBytes)
		{
			buffer[offset++] = b;
		}
	}

	private static void WriteHeader(byte[] stream, AudioClip clip, uint length, uint samples)
	{
		int frequency = clip.frequency;
		ushort num = (ushort)clip.channels;
		uint offset = 0u;
		byte[] bytes = Encoding.UTF8.GetBytes("RIFF");
		AddDataToBuffer(stream, ref offset, bytes);
		byte[] bytes2 = BitConverter.GetBytes(length - 8);
		AddDataToBuffer(stream, ref offset, bytes2);
		byte[] bytes3 = Encoding.UTF8.GetBytes("WAVE");
		AddDataToBuffer(stream, ref offset, bytes3);
		byte[] bytes4 = Encoding.UTF8.GetBytes("fmt ");
		AddDataToBuffer(stream, ref offset, bytes4);
		byte[] bytes5 = BitConverter.GetBytes(16u);
		AddDataToBuffer(stream, ref offset, bytes5);
		byte[] bytes6 = BitConverter.GetBytes((ushort)1);
		AddDataToBuffer(stream, ref offset, bytes6);
		byte[] bytes7 = BitConverter.GetBytes(num);
		AddDataToBuffer(stream, ref offset, bytes7);
		byte[] bytes8 = BitConverter.GetBytes((uint)frequency);
		AddDataToBuffer(stream, ref offset, bytes8);
		byte[] bytes9 = BitConverter.GetBytes((uint)(frequency * num * 2));
		AddDataToBuffer(stream, ref offset, bytes9);
		ushort value = (ushort)(num * 2);
		AddDataToBuffer(stream, ref offset, BitConverter.GetBytes(value));
		byte[] bytes10 = BitConverter.GetBytes((ushort)16);
		AddDataToBuffer(stream, ref offset, bytes10);
		byte[] bytes11 = Encoding.UTF8.GetBytes("data");
		AddDataToBuffer(stream, ref offset, bytes11);
		byte[] bytes12 = BitConverter.GetBytes(samples * 2);
		AddDataToBuffer(stream, ref offset, bytes12);
	}
}
namespace Wendigos
{
	public static class AudioUtils
	{
		public static void CopyTo(this AudioSource original, AudioSource destination)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			destination.volume = original.volume;
			destination.pitch = original.pitch;
			destination.spatialBlend = original.spatialBlend;
			destination.dopplerLevel = original.dopplerLevel;
			destination.spread = original.spread;
			destination.rolloffMode = original.rolloffMode;
			destination.minDistance = original.minDistance;
			destination.maxDistance = original.maxDistance;
			destination.priority = original.priority;
			destination.outputAudioMixerGroup = original.outputAudioMixerGroup;
			destination.bypassEffects = original.bypassEffects;
			destination.bypassListenerEffects = original.bypassListenerEffects;
			destination.bypassReverbZones = original.bypassReverbZones;
		}

		public static void CopyOcclusion(this OccludeAudio original, GameObject destination)
		{
			if (!((Object)(object)original == (Object)null))
			{
				OccludeAudio obj = destination.AddComponent<OccludeAudio>();
				obj.useReverb = original.useReverb;
				obj.overridingLowPass = original.overridingLowPass;
				obj.lowPassOverride = original.lowPassOverride;
				obj.debugLog = original.debugLog;
			}
		}

		public static void AudioClipToMp3File(AudioClip clip, string name, string path)
		{
			//IL_00b8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00bf: Expected O, but got Unknown
			//IL_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Expected O, but got Unknown
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e2: Expected O, but got Unknown
			if (name.EndsWith(".mp3", StringComparison.OrdinalIgnoreCase))
			{
				name = name.Substring(0, name.Length - 4);
			}
			string text = Path.Combine(path, name + ".mp3");
			float[] array = new float[clip.samples * clip.channels];
			clip.GetData(array, 0);
			byte[] array2 = new byte[array.Length * 2];
			int num = 0;
			for (int i = 0; i < array.Length; i++)
			{
				short num2 = (short)(Mathf.Clamp(array[i], -1f, 1f) * 32767f);
				array2[num++] = (byte)((uint)num2 & 0xFFu);
				array2[num++] = (byte)((uint)(num2 >> 8) & 0xFFu);
			}
			WaveFormat val = new WaveFormat(clip.frequency, 16, clip.channels);
			using MemoryStream memoryStream = new MemoryStream(array2);
			RawSourceWaveStream val2 = new RawSourceWaveStream((Stream)memoryStream, val);
			try
			{
				LameMP3FileWriter val3 = new LameMP3FileWriter(text, val, (LAMEPreset)1001, (ID3TagData)null);
				try
				{
					((Stream)(object)val2).CopyTo((Stream)(object)val3);
				}
				finally
				{
					((IDisposable)val3)?.Dispose();
				}
			}
			finally
			{
				((IDisposable)val2)?.Dispose();
			}
		}

		public static byte[] AudioClipToMp3Data(AudioClip clip)
		{
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Expected O, but got Unknown
			//IL_009d: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Expected O, but got Unknown
			float[] array = new float[clip.samples * clip.channels];
			clip.GetData(array, 0);
			byte[] array2 = new byte[array.Length * 2];
			int num = 0;
			for (int i = 0; i < array.Length; i++)
			{
				short num2 = (short)(Mathf.Clamp(array[i], -1f, 1f) * 32767f);
				array2[num++] = (byte)((uint)num2 & 0xFFu);
				array2[num++] = (byte)((uint)(num2 >> 8) & 0xFFu);
			}
			WaveFormat val = new WaveFormat(clip.frequency, 16, clip.channels);
			using MemoryStream memoryStream = new MemoryStream();
			LameMP3FileWriter val2 = new LameMP3FileWriter((Stream)memoryStream, val, (LAMEPreset)1001, (ID3TagData)null);
			try
			{
				((Stream)(object)val2).Write(array2, 0, array2.Length);
			}
			finally
			{
				((IDisposable)val2)?.Dispose();
			}
			return memoryStream.ToArray();
		}
	}
	internal static class ElevenLabs
	{
		private const string baseDir = ".\\";

		private const string baseURL = "https://api.elevenlabs.io/v1/text-to-speech/";

		public static string VOICE_ID;

		public static float masked_volume;

		public static TTSManager ttsManagerComponent;

		public static void Init(string api_key, string voice_id, float volumeBoost)
		{
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (!(voice_id == "pending"))
				{
					if ((Object)(object)ttsManagerComponent != (Object)null)
					{
						Object.DestroyImmediate((Object)(object)((Component)ttsManagerComponent).gameObject);
						ttsManagerComponent = null;
					}
					Console.WriteLine("[Wendigos TTS] Creating TTS manager object. Disregard \"Service config is null\" errors.");
					ttsManagerComponent = new GameObject("wendigosTtsManager").AddComponent<TTSManager>();
					ElevenlabsTTSServiceConfig val = ModdingTools.CreateTTSServiceConfig<ElevenlabsTTSServiceConfig>();
					val.voiceId = voice_id;
					val.modelID = "eleven_flash_v2_5";
					if (api_key.Length == 0)
					{
						Console.WriteLine("[Wendigos TTS] No Elevenlabs API key found. Attempting to load from environment variable " + ((GenericTTSServiceConfig)val).apiKeyJSONString + " ...");
						ModdingTools.InitTTSManagerObject(ttsManagerComponent, (GenericTTSServiceConfig)(object)val, "", (string)null);
					}
					else
					{
						ModdingTools.InitTTSManagerObject(ttsManagerComponent, (GenericTTSServiceConfig)(object)val, "", api_key);
					}
					VOICE_ID = voice_id;
					masked_volume = volumeBoost;
					Console.WriteLine("[Wendigos TTS] Created TTS manager.");
				}
			}
			catch (Exception ex)
			{
				Console.WriteLine(ex.ToString());
			}
		}

		public static void ConvertMp3ToWav(string _inPath_, string _outPath_)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0007: Expected O, but got Unknown
			Mp3FileReader val = new Mp3FileReader(_inPath_);
			try
			{
				WaveStream val2 = WaveFormatConversionStream.CreatePcmStream((WaveStream)(object)val);
				try
				{
					WaveFileWriter.CreateWaveFile(_outPath_, (IWaveProvider)(object)val2);
				}
				finally
				{
					((IDisposable)val2)?.Dispose();
				}
			}
			finally
			{
				((IDisposable)val)?.Dispose();
			}
		}

		public static void IncreaseVolume(string inputPath, string outputPath, double db)
		{
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_002f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0035: Expected O, but got Unknown
			double num = Math.Pow(10.0, db / 10.0);
			WaveFileReader val = new WaveFileReader(inputPath);
			try
			{
				new VolumeWaveProvider16((IWaveProvider)(object)val);
				WaveFileWriter val2 = new WaveFileWriter(outputPath, ((WaveStream)val).WaveFormat);
				try
				{
					while (true)
					{
						float[] array = val.ReadNextSampleFrame();
						if (array == null)
						{
							break;
						}
						float num2 = array[0] * (float)num;
						if (num2 < -0.6f)
						{
							num2 = -0.6f;
						}
						if (num2 > 0.6f)
						{
							num2 = 0.6f;
						}
						val2.WriteSample(array[0] * (float)num);
					}
				}
				finally
				{
					((IDisposable)val2)?.Dispose();
				}
			}
			finally
			{
				((IDisposable)val)?.Dispose();
			}
		}

		public static void RequestAudio(string prompt, string voice, string fileName, string dir, int fileNum, Action<string> onSuccess)
		{
			while (File.Exists(Path.Combine(dir, fileName + fileNum)))
			{
				fileNum++;
			}
			fileName += fileNum;
			ttsManagerComponent.GenerateSpeechFileFromText(prompt, fileName, dir, (Action<string>)delegate
			{
				onSuccess(dir + fileName + ".mp3");
			}, (Action<string>)delegate(string err)
			{
				Debug.LogError((object)err);
			}, default(CancellationToken));
		}

		public static void StreamAudio(string prompt, string voiceID, AudioStreamer audioStreamer)
		{
			audioStreamer.StopStreaming(ttsManagerComponent.TextToSpeechService);
			((Component)audioStreamer).GetComponent<AudioSource>().volume = ((masked_volume > 1f) ? 1f : masked_volume);
			GenericTTSServiceConfig textToSpeechConfig = ttsManagerComponent.textToSpeechConfig;
			Console.WriteLine(((ElevenlabsTTSServiceConfig)((textToSpeechConfig is ElevenlabsTTSServiceConfig) ? textToSpeechConfig : null)).voiceId);
			ttsManagerComponent.RequestAudioAndStream(prompt, audioStreamer);
		}
	}
	[BepInPlugin("Wendigos", "Wendigos", "2.0.0")]
	public class Plugin : BaseUnityPlugin
	{
		public class WendigosNetworkManager : NetworkBehaviour
		{
			public static WendigosNetworkManager Instance { get; private set; }

			public override void OnNetworkSpawn()
			{
				((NetworkBehaviour)this).OnNetworkSpawn();
				((NetworkBehaviour)this).NetworkManager.OnClientConnectedCallback += OnClientConnectedCallback;
				ShareVoiceIDServerRpc(NetworkManager.Singleton.LocalClientId, TTS_voice_id.Value);
				ShareNameServerRpc(NetworkManager.Singleton.LocalClientId, player_name.Value);
			}

			private void OnClientConnectedCallback(ulong obj)
			{
				if (!((NetworkBehaviour)this).IsServer)
				{
					return;
				}
				foreach (ulong connectedClientsId in NetworkManager.Singleton.ConnectedClientsIds)
				{
					_ = connectedClientsId;
					ulong[] array = clientVoiceIDLookup.Keys.ToArray();
					foreach (ulong num in array)
					{
						ShareVoiceIDClientRpc(num, clientVoiceIDLookup[num]);
					}
					array = clientNameLookup.Keys.ToArray();
					foreach (ulong num2 in array)
					{
						ShareNameClientRpc(num2, clientNameLookup[num2]);
					}
				}
				WriteToConsole(clientVoiceIDLookup.Values.ToArray().ToString());
				WriteToConsole(clientNameLookup.Values.ToArray().ToString());
				if (enable_config_sync.Value)
				{
					PromptToShareDataWithClients();
				}
			}

			internal static void ClientConnectInitializer(Scene sceneName, LoadSceneMode sceneEnum)
			{
				//IL_0000: Unknown result type (might be due to invalid IL or missing references)
				//IL_0001: Unknown result type (might be due to invalid IL or missing references)
				//IL_0041: Unknown result type (might be due to invalid IL or missing references)
				//IL_0047: Expected O, but got Unknown
				Scene val = sceneName;
				if (((Scene)(ref val)).name == "SampleSceneRelay")
				{
					uint num = BitConverter.ToUInt32(MD5.Create().ComputeHash(Encoding.UTF8.GetBytes("Wendigos.MyNetworkPrefab")));
					GameObject val2 = new GameObject("WendigosMessageHandler");
					val2.AddComponent<WendigosNetworkManager>();
					val2.AddComponent<NetworkObject>();
					PropertyInfo? property = typeof(NetworkObject).GetProperty("NetworkObjectId", BindingFlags.Instance | BindingFlags.Public);
					WriteToConsole((property == null).ToString() ?? "");
					property.SetValue(val2.GetComponent<NetworkObject>(), (ulong)num);
					WriteToConsole("NETWORK MANAGER ID IS " + val2.GetComponent<NetworkObject>().NetworkObjectId);
					FieldInfo? field = typeof(NetworkObject).GetField("GlobalObjectIdHash", BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic);
					WriteToConsole((field == null).ToString() ?? "");
					field.SetValue(val2.GetComponent<NetworkObject>(), num);
				}
			}

			private void Awake()
			{
				if ((Object)(object)Instance != (Object)null)
				{
					Object.Destroy((Object)(object)this);
				}
				else
				{
					Instance = this;
				}
			}

			private void Update()
			{
				Action result;
				while (MainThreadInvoker._actions.TryDequeue(out result))
				{
					result();
				}
			}

			public override void OnNetworkDespawn()
			{
				STT.StopSpeechTranscription();
				WendigosChatManager.chats.Clear();
				sharedMaskedClientDict.Clear();
				clientNameLookup.Clear();
				clientVoiceIDLookup.Clear();
				STT.speakingClips.Clear();
				((NetworkBehaviour)this).NetworkManager.OnClientConnectedCallback -= OnClientConnectedCallback;
			}

			[ClientRpc]
			public void SetMaskedSuitClientRpc(string maskedId, int suitid)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1082237979u, val, (RpcDelivery)0);
					bool flag = maskedId != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(maskedId, false);
					}
					BytePacker.WriteValueBitPacked(val2, suitid);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1082237979u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost))
				{
					return;
				}
				base.__rpc_exec_stage = (__RpcExecStage)0;
				string maskedId2 = maskedId;
				int suitid2 = suitid;
				try
				{
					Task.Run(() => WaitThenSetSuit(maskedId2, suitid2));
				}
				catch (Exception ex)
				{
					WriteToConsole("Error trying to set masked suit: " + ex.Message);
				}
			}

			private async Task WaitThenSetSuit(string maskedId, int suitid)
			{
				for (int attempts = 0; attempts < 3; attempts++)
				{
					if (maskedInstanceLookup.Keys.Contains(maskedId))
					{
						break;
					}
					await Task.Delay(100);
				}
				maskedInstanceLookup[maskedId].SetSuit(suitid);
			}

			[ServerRpc(RequireOwnership = false)]
			public void AddToMaskedClientDictServerRpc(string maskedID, ulong clientID)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(1451840012u, val, (RpcDelivery)0);
					bool flag = maskedID != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(maskedID, false);
					}
					BytePacker.WriteValueBitPacked(val2, clientID);
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 1451840012u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					AddToMaskedClientDictClientRpc(maskedID, clientID);
				}
			}

			[ClientRpc]
			public void AddToMaskedClientDictClientRpc(string maskedID, ulong clientID)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00af: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1980800722u, val, (RpcDelivery)0);
					bool flag = maskedID != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(maskedID, false);
					}
					BytePacker.WriteValueBitPacked(val2, clientID);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1980800722u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					WriteToConsole("Trying to add masked to masked_client_dict");
					if (sharedMaskedClientDict.TryAdd(maskedID, clientID))
					{
						WriteToConsole("Added masked " + maskedID + " to masked_client_dict");
					}
					else
					{
						WriteToConsole("Failed to add masked " + maskedID + " to masked_client_dict");
					}
				}
			}

			[ServerRpc(RequireOwnership = false)]
			public void ShareVoiceIDServerRpc(ulong clientID, string VoiceID)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(888146200u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, clientID);
					bool flag = VoiceID != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(VoiceID, false);
					}
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 888146200u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsServer && !networkManager.IsHost))
				{
					return;
				}
				base.__rpc_exec_stage = (__RpcExecStage)0;
				if (!clientVoiceIDLookup.ContainsKey(clientID))
				{
					clientVoiceIDLookup.Add(clientID, VoiceID);
					WriteToConsole("Server added " + clientID + " " + VoiceID);
				}
				else
				{
					if (clientVoiceIDLookup[clientID] == "")
					{
						clientVoiceIDLookup[clientID] = VoiceID;
					}
					WriteToConsole("Server has " + clientID + " " + VoiceID);
				}
				ShareVoiceIDClientRpc(clientID, VoiceID);
			}

			[ClientRpc]
			public void ShareVoiceIDClientRpc(ulong clientID, string VoiceID)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(3668387743u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, clientID);
					bool flag = VoiceID != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(VoiceID, false);
					}
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 3668387743u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost))
				{
					return;
				}
				base.__rpc_exec_stage = (__RpcExecStage)0;
				if (!clientVoiceIDLookup.ContainsKey(clientID))
				{
					clientVoiceIDLookup.Add(clientID, VoiceID);
					WriteToConsole("Client added " + clientID + " " + VoiceID);
					return;
				}
				if (clientVoiceIDLookup[clientID] == "")
				{
					clientVoiceIDLookup[clientID] = VoiceID;
				}
				WriteToConsole("Client has " + clientID + " " + VoiceID);
			}

			[ServerRpc(RequireOwnership = false)]
			public void ShareNameServerRpc(ulong clientID, string name)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(2581621959u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, clientID);
					bool flag = name != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(name, false);
					}
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 2581621959u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					if (!clientNameLookup.ContainsKey(clientID))
					{
						clientNameLookup.Add(clientID, name);
						WriteToConsole("Server added " + clientID + " " + name);
					}
					else
					{
						WriteToConsole("Server has " + clientID + " " + name);
					}
				}
			}

			[ClientRpc]
			public void ShareNameClientRpc(ulong clientID, string name)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e1: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0071: Unknown result type (might be due to invalid IL or missing references)
				//IL_0095: Unknown result type (might be due to invalid IL or missing references)
				//IL_009b: Unknown result type (might be due to invalid IL or missing references)
				//IL_010c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1451705257u, val, (RpcDelivery)0);
					BytePacker.WriteValueBitPacked(val2, clientID);
					bool flag = name != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(name, false);
					}
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1451705257u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					if (!clientNameLookup.ContainsKey(clientID))
					{
						clientNameLookup.Add(clientID, name);
						WriteToConsole("Client added " + clientID + " " + name);
					}
					else
					{
						WriteToConsole("Client has " + clientID + " " + name);
					}
				}
			}

			[ClientRpc]
			public void InitSTTClientRpc()
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					ClientRpcParams val = default(ClientRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendClientRpc(1714730178u, val, (RpcDelivery)0);
					((NetworkBehaviour)this).__endSendClientRpc(ref val2, 1714730178u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					WriteToConsole("STT MANAGER IS: " + (object)STT.manager);
					if ((Object)(object)STT.manager == (Object)null)
					{
						STT.num_gens = 0;
						STT.Init(ChooseApiKey(STT_api_key.Value, temp_STT_api_key), STT_region.Value, STT_language.Value, mic_name);
					}
					STT.StartSpeechTranscription(Chat_prompt.Value);
				}
			}

			[ServerRpc(RequireOwnership = false)]
			public void ShareAudioDataServerRpc(byte[] audioData, string MaskedID, ServerRpcParams serverRpcParams = default(ServerRpcParams))
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_0115: Unknown result type (might be due to invalid IL or missing references)
				//IL_011f: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_014a: Unknown result type (might be due to invalid IL or missing references)
				//IL_014f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0150: Unknown result type (might be due to invalid IL or missing references)
				//IL_015d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0167: Unknown result type (might be due to invalid IL or missing references)
				//IL_0192: Unknown result type (might be due to invalid IL or missing references)
				//IL_0193: Unknown result type (might be due to invalid IL or missing references)
				//IL_0198: Unknown result type (might be due to invalid IL or missing references)
				//IL_0199: Unknown result type (might be due to invalid IL or missing references)
				//IL_019d: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_0105: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(1634666820u, serverRpcParams, (RpcDelivery)0);
					bool flag = audioData != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe<byte>(audioData, default(ForPrimitives));
					}
					bool flag2 = MaskedID != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
					if (flag2)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(MaskedID, false);
					}
					((NetworkBehaviour)this).__endSendServerRpc(ref val, 1634666820u, serverRpcParams, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					ulong senderClientId = serverRpcParams.Receive.SenderClientId;
					ClientRpcParams val2 = default(ClientRpcParams);
					val2.Send = new ClientRpcSendParams
					{
						TargetClientIds = NetworkManager.Singleton.ConnectedClientsIds.Except(new ulong[1] { senderClientId }).ToList()
					};
					ClientRpcParams clientRpcParams = val2;
					PlayAudioDataClientRpc(audioData, MaskedID, clientRpcParams);
				}
			}

			[ClientRpc]
			public void PlayAudioDataClientRpc(byte[] audioData, string MaskedID, ClientRpcParams clientRpcParams = default(ClientRpcParams))
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_0115: Unknown result type (might be due to invalid IL or missing references)
				//IL_011f: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_014a: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d3: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d9: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ac: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b2: Unknown result type (might be due to invalid IL or missing references)
				//IL_0105: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(892336189u, clientRpcParams, (RpcDelivery)0);
					bool flag = audioData != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe<byte>(audioData, default(ForPrimitives));
					}
					bool flag2 = MaskedID != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
					if (flag2)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(MaskedID, false);
					}
					((NetworkBehaviour)this).__endSendClientRpc(ref val, 892336189u, clientRpcParams, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					MaskedEnemyIdentifier component = ((Component)maskedInstanceLookup[MaskedID]).GetComponent<MaskedEnemyIdentifier>();
					if ((Object)(object)component != (Object)null)
					{
						component.child.GetComponent<MaskedAudioComponent>().audioQueue.Feed(audioData, true);
					}
				}
			}

			[ServerRpc(RequireOwnership = false)]
			public void RequestMaskedResponseServerRpc(string maskedID, string playerName, string playerSpeech, bool respondingToPlayer = true)
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_0161: Unknown result type (might be due to invalid IL or missing references)
				//IL_016b: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0196: Unknown result type (might be due to invalid IL or missing references)
				//IL_01a9: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_01c7: Unknown result type (might be due to invalid IL or missing references)
				//IL_01cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_01cd: Unknown result type (might be due to invalid IL or missing references)
				//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_0104: Unknown result type (might be due to invalid IL or missing references)
				//IL_010a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0137: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					ServerRpcParams val = default(ServerRpcParams);
					FastBufferWriter val2 = ((NetworkBehaviour)this).__beginSendServerRpc(58846502u, val, (RpcDelivery)0);
					bool flag = maskedID != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(maskedID, false);
					}
					bool flag2 = playerName != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
					if (flag2)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(playerName, false);
					}
					bool flag3 = playerSpeech != null;
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref flag3, default(ForPrimitives));
					if (flag3)
					{
						((FastBufferWriter)(ref val2)).WriteValueSafe(playerSpeech, false);
					}
					((FastBufferWriter)(ref val2)).WriteValueSafe<bool>(ref respondingToPlayer, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendServerRpc(ref val2, 58846502u, val, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					ulong item = sharedMaskedClientDict[maskedID];
					ClientRpcParams val3 = default(ClientRpcParams);
					val3.Send = new ClientRpcSendParams
					{
						TargetClientIds = new <>z__ReadOnlySingleElementList<ulong>(item)
					};
					ClientRpcParams clientParams = val3;
					RequestMaskedResponseClientRpc(maskedID, playerName, playerSpeech, respondingToPlayer, clientParams);
				}
			}

			[ClientRpc]
			public void RequestMaskedResponseClientRpc(string maskedID, string playerName, string playerSpeech, bool respondingToPlayer = true, ClientRpcParams clientParams = default(ClientRpcParams))
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_0161: Unknown result type (might be due to invalid IL or missing references)
				//IL_016b: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_0196: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_0104: Unknown result type (might be due to invalid IL or missing references)
				//IL_010a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0137: Unknown result type (might be due to invalid IL or missing references)
				//IL_013d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0151: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(2757415658u, clientParams, (RpcDelivery)0);
					bool flag = maskedID != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(maskedID, false);
					}
					bool flag2 = playerName != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
					if (flag2)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(playerName, false);
					}
					bool flag3 = playerSpeech != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag3, default(ForPrimitives));
					if (flag3)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(playerSpeech, false);
					}
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref respondingToPlayer, default(ForPrimitives));
					((NetworkBehaviour)this).__endSendClientRpc(ref val, 2757415658u, clientParams, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsClient || networkManager.IsHost))
				{
					base.__rpc_exec_stage = (__RpcExecStage)0;
					STT.SendToChatAndChooseResponse(maskedInstanceLookup[maskedID], playerName, playerSpeech, respondingToPlayer);
				}
			}

			private void PromptToShareDataWithClients()
			{
				SimpleConfirmationGUI.CreateConfirmationGUI("Do you want to share your Wendigos config with all clients (including API keys?). Close this window to decline.", show_name_input_box: false).onButtonClicked = delegate
				{
					//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)
					if (((NetworkBehaviour)this).IsServer)
					{
						ShareConfigToClientsServerRpc();
					}
				};
			}

			[ServerRpc(RequireOwnership = false)]
			public void ShareConfigToClientsServerRpc(ServerRpcParams serverRpcParams = default(ServerRpcParams))
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0096: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_007c: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d4: Unknown result type (might be due to invalid IL or missing references)
				//IL_00de: Unknown result type (might be due to invalid IL or missing references)
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_010a: Unknown result type (might be due to invalid IL or missing references)
				//IL_010f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0110: Unknown result type (might be due to invalid IL or missing references)
				//IL_0194: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsClient || networkManager.IsHost))
					{
						FastBufferWriter val = ((NetworkBehaviour)this).__beginSendServerRpc(1113147307u, serverRpcParams, (RpcDelivery)0);
						((NetworkBehaviour)this).__endSendServerRpc(ref val, 1113147307u, serverRpcParams, (RpcDelivery)0);
					}
					if ((int)base.__rpc_exec_stage == 1 && (networkManager.IsServer || networkManager.IsHost))
					{
						base.__rpc_exec_stage = (__RpcExecStage)0;
						ulong senderClientId = serverRpcParams.Receive.SenderClientId;
						ClientRpcParams val2 = default(ClientRpcParams);
						val2.Send = new ClientRpcSendParams
						{
							TargetClientIds = NetworkManager.Singleton.ConnectedClientsIds.Except(new ulong[1] { senderClientId }).ToList()
						};
						ClientRpcParams clientParams = val2;
						RecieveConfigClientRpc(ChatServiceProvider.Value, Chat_api_key.Value, Chat_model.Value, Chat_prompt.Value, enable_realtime_responses.Value, max_clip_count.Value, talk_probability.Value, STT_service.Value, STT_api_key.Value, STT_region.Value, STT_language.Value, TTS_enabled.Value, TTS_api_key.Value, clientParams);
					}
				}
			}

			[ClientRpc]
			public void RecieveConfigClientRpc(string chatServiceProvider, string chatApiKey, string chatModel, string prompt, bool realtimeResponses, uint maxClips, uint talkProbability, string sttService, string sttApiKey, string region, string language, bool ttsEnabled, string ttsApiKey, ClientRpcParams clientParams = default(ClientRpcParams))
			{
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_002e: Invalid comparison between Unknown and I4
				//IL_030a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0314: Invalid comparison between Unknown and I4
				//IL_005f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0068: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_0088: Unknown result type (might be due to invalid IL or missing references)
				//IL_008e: Unknown result type (might be due to invalid IL or missing references)
				//IL_033f: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
				//IL_0104: Unknown result type (might be due to invalid IL or missing references)
				//IL_010a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0142: Unknown result type (might be due to invalid IL or missing references)
				//IL_0148: Unknown result type (might be due to invalid IL or missing references)
				//IL_0175: Unknown result type (might be due to invalid IL or missing references)
				//IL_017b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0184: Unknown result type (might be due to invalid IL or missing references)
				//IL_0191: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_01bb: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f3: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f9: Unknown result type (might be due to invalid IL or missing references)
				//IL_0231: Unknown result type (might be due to invalid IL or missing references)
				//IL_0237: Unknown result type (might be due to invalid IL or missing references)
				//IL_026f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0275: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a2: Unknown result type (might be due to invalid IL or missing references)
				//IL_02a8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c8: Unknown result type (might be due to invalid IL or missing references)
				//IL_02ce: Unknown result type (might be due to invalid IL or missing references)
				//IL_02fa: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = ((NetworkBehaviour)this).NetworkManager;
				if (networkManager == null || !networkManager.IsListening)
				{
					return;
				}
				if ((int)base.__rpc_exec_stage != 1 && (networkManager.IsServer || networkManager.IsHost))
				{
					FastBufferWriter val = ((NetworkBehaviour)this).__beginSendClientRpc(1784179457u, clientParams, (RpcDelivery)0);
					bool flag = chatServiceProvider != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag, default(ForPrimitives));
					if (flag)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(chatServiceProvider, false);
					}
					bool flag2 = chatApiKey != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag2, default(ForPrimitives));
					if (flag2)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(chatApiKey, false);
					}
					bool flag3 = chatModel != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag3, default(ForPrimitives));
					if (flag3)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(chatModel, false);
					}
					bool flag4 = prompt != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag4, default(ForPrimitives));
					if (flag4)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(prompt, false);
					}
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref realtimeResponses, default(ForPrimitives));
					BytePacker.WriteValueBitPacked(val, maxClips);
					BytePacker.WriteValueBitPacked(val, talkProbability);
					bool flag5 = sttService != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag5, default(ForPrimitives));
					if (flag5)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(sttService, false);
					}
					bool flag6 = sttApiKey != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag6, default(ForPrimitives));
					if (flag6)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(sttApiKey, false);
					}
					bool flag7 = region != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag7, default(ForPrimitives));
					if (flag7)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(region, false);
					}
					bool flag8 = language != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag8, default(ForPrimitives));
					if (flag8)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(language, false);
					}
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref ttsEnabled, default(ForPrimitives));
					bool flag9 = ttsApiKey != null;
					((FastBufferWriter)(ref val)).WriteValueSafe<bool>(ref flag9, default(ForPrimitives));
					if (flag9)
					{
						((FastBufferWriter)(ref val)).WriteValueSafe(ttsApiKey, false);
					}
					((NetworkBehaviour)this).__endSendClientRpc(ref val, 1784179457u, clientParams, (RpcDelivery)0);
				}
				if ((int)base.__rpc_exec_stage != 1 || (!networkManager.IsClient && !networkManager.IsHost))
				{
					return;
				}
				base.__rpc_exec_stage = (__RpcExecStage)0;
				string chatServiceProvider2 = chatServiceProvider;
				string chatApiKey2 = chatApiKey;
				string chatModel2 = chatModel;
				string prompt2 = prompt;
				bool realtimeResponses2 = realtimeResponses;
				uint maxClips2 = maxClips;
				uint talkProbability2 = talkProbability;
				string sttService2 = sttService;
				string sttApiKey2 = sttApiKey;
				string region2 = region;
				string language2 = language;
				bool ttsEnabled2 = ttsEnabled;
				string ttsApiKey2 = ttsApiKey;
				string text = "Host has requested to sync Wendigos config with you!";
				if (TTS_api_key.Value != "")
				{
					text += " You already have a TTS api key set so TTS options will be skipped.";
				}
				if (STT_api_key.Value != "")
				{
					text += " You already have an STT api key set so STT options will be skipped.";
				}
				if (Chat_api_key.Value != "")
				{
					text += " You already have a Chat api key set so Chat options will be skipped.";
				}
				text += " Are you sure you want to continue?";
				SimpleConfirmationGUI.CreateConfirmationGUI(text, show_name_input_box: true).onButtonClicked = delegate
				{
					if (Chat_api_key.Value == "")
					{
						ChatServiceProvider.Value = chatServiceProvider2;
						temp_Chat_api_key = chatApiKey2;
						Chat_model.Value = chatModel2;
						Chat_prompt.Value = prompt2;
						WendigosChatManager.Init(ChooseApiKey(Chat_api_key.Value, temp_Chat_api_key), Chat_model.Value, ChatServiceProvider.Value);
					}
					enable_realtime_responses.Value = realtimeResponses2;
					max_clip_count.Value = maxClips2;
					talk_probability.Value = talkProbability2;
					if (STT_api_key.Value == "")
					{
						STT_service.Value = sttService2;
						temp_STT_api_key = sttApiKey2;
						STT_region.Value = region2;
						STT_language.Value = language2;
					}
					if (TTS_api_key.Value == "")
					{
						TTS_enabled.Value = ttsEnabled2;
						temp_TTS_api_key = ttsApiKey2;
					}
					if ((Object)(object)ElevenLabs.ttsManagerComponent == (Object)null && (TTS_enabled.Value || enable_realtime_responses.Value))
					{
						ElevenLabs.Init(ChooseApiKey(TTS_api_key.Value, temp_TTS_api_key), TTS_voice_id.Value, TTS_voice_volume.Value);
					}
				};
			}

			protected override void __initializeVariables()
			{
				((NetworkBehaviour)this).__initializeVariables();
			}

			protected override void __initializeRpcs()
			{
				//IL_000d: Unknown result type (might be due to invalid IL or missing references)
				//IL_001c: Expected O, but got Unknown
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0038: Expected O, but got Unknown
				//IL_0045: Unknown result type (might be due to invalid IL or missing references)
				//IL_0054: Expected O, but got Unknown
				//IL_0061: Unknown result type (might be due to invalid IL or missing references)
				//IL_0070: Expected O, but got Unknown
				//IL_007d: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Expected O, but got Unknown
				//IL_0099: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a8: Expected O, but got Unknown
				//IL_00b5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00c4: Expected O, but got Unknown
				//IL_00d1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e0: Expected O, but got Unknown
				//IL_00ed: Unknown result type (might be due to invalid IL or missing references)
				//IL_00fc: Expected O, but got Unknown
				//IL_0109: Unknown result type (might be due to invalid IL or missing references)
				//IL_0118: Expected O, but got Unknown
				//IL_0125: Unknown result type (might be due to invalid IL or missing references)
				//IL_0134: Expected O, but got Unknown
				//IL_0141: Unknown result type (might be due to invalid IL or missing references)
				//IL_0150: Expected O, but got Unknown
				//IL_015d: Unknown result type (might be due to invalid IL or missing references)
				//IL_016c: Expected O, but got Unknown
				//IL_0179: Unknown result type (might be due to invalid IL or missing references)
				//IL_0188: Expected O, but got Unknown
				((NetworkBehaviour)this).__registerRpc(1082237979u, new RpcReceiveHandler(__rpc_handler_1082237979), "SetMaskedSuitClientRpc");
				((NetworkBehaviour)this).__registerRpc(1451840012u, new RpcReceiveHandler(__rpc_handler_1451840012), "AddToMaskedClientDictServerRpc");
				((NetworkBehaviour)this).__registerRpc(1980800722u, new RpcReceiveHandler(__rpc_handler_1980800722), "AddToMaskedClientDictClientRpc");
				((NetworkBehaviour)this).__registerRpc(888146200u, new RpcReceiveHandler(__rpc_handler_888146200), "ShareVoiceIDServerRpc");
				((NetworkBehaviour)this).__registerRpc(3668387743u, new RpcReceiveHandler(__rpc_handler_3668387743), "ShareVoiceIDClientRpc");
				((NetworkBehaviour)this).__registerRpc(2581621959u, new RpcReceiveHandler(__rpc_handler_2581621959), "ShareNameServerRpc");
				((NetworkBehaviour)this).__registerRpc(1451705257u, new RpcReceiveHandler(__rpc_handler_1451705257), "ShareNameClientRpc");
				((NetworkBehaviour)this).__registerRpc(1714730178u, new RpcReceiveHandler(__rpc_handler_1714730178), "InitSTTClientRpc");
				((NetworkBehaviour)this).__registerRpc(1634666820u, new RpcReceiveHandler(__rpc_handler_1634666820), "ShareAudioDataServerRpc");
				((NetworkBehaviour)this).__registerRpc(892336189u, new RpcReceiveHandler(__rpc_handler_892336189), "PlayAudioDataClientRpc");
				((NetworkBehaviour)this).__registerRpc(58846502u, new RpcReceiveHandler(__rpc_handler_58846502), "RequestMaskedResponseServerRpc");
				((NetworkBehaviour)this).__registerRpc(2757415658u, new RpcReceiveHandler(__rpc_handler_2757415658), "RequestMaskedResponseClientRpc");
				((NetworkBehaviour)this).__registerRpc(1113147307u, new RpcReceiveHandler(__rpc_handler_1113147307), "ShareConfigToClientsServerRpc");
				((NetworkBehaviour)this).__registerRpc(1784179457u, new RpcReceiveHandler(__rpc_handler_1784179457), "RecieveConfigClientRpc");
				((NetworkBehaviour)this).__initializeRpcs();
			}

			private static void __rpc_handler_1082237979(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string maskedId = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedId, false);
					}
					int suitid = default(int);
					ByteUnpacker.ReadValueBitPacked(reader, ref suitid);
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).SetMaskedSuitClientRpc(maskedId, suitid);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1451840012(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string maskedID = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedID, false);
					}
					ulong clientID = default(ulong);
					ByteUnpacker.ReadValueBitPacked(reader, ref clientID);
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).AddToMaskedClientDictServerRpc(maskedID, clientID);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1980800722(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_005b: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string maskedID = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedID, false);
					}
					ulong clientID = default(ulong);
					ByteUnpacker.ReadValueBitPacked(reader, ref clientID);
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).AddToMaskedClientDictClientRpc(maskedID, clientID);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_888146200(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					ulong clientID = default(ulong);
					ByteUnpacker.ReadValueBitPacked(reader, ref clientID);
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string voiceID = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref voiceID, false);
					}
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).ShareVoiceIDServerRpc(clientID, voiceID);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_3668387743(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					ulong clientID = default(ulong);
					ByteUnpacker.ReadValueBitPacked(reader, ref clientID);
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string voiceID = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref voiceID, false);
					}
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).ShareVoiceIDClientRpc(clientID, voiceID);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_2581621959(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					ulong clientID = default(ulong);
					ByteUnpacker.ReadValueBitPacked(reader, ref clientID);
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string name = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref name, false);
					}
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).ShareNameServerRpc(clientID, name);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1451705257(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_003c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0042: Unknown result type (might be due to invalid IL or missing references)
				//IL_006e: Unknown result type (might be due to invalid IL or missing references)
				//IL_008c: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					ulong clientID = default(ulong);
					ByteUnpacker.ReadValueBitPacked(reader, ref clientID);
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string name = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref name, false);
					}
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).ShareNameClientRpc(clientID, name);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1714730178(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_003f: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).InitSTTClientRpc();
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1634666820(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					byte[] audioData = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe<byte>(ref audioData, default(ForPrimitives));
					}
					bool flag2 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
					string maskedID = null;
					if (flag2)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedID, false);
					}
					ServerRpcParams server = rpcParams.Server;
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).ShareAudioDataServerRpc(audioData, maskedID, server);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_892336189(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_0074: Unknown result type (might be due to invalid IL or missing references)
				//IL_007a: Unknown result type (might be due to invalid IL or missing references)
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
				//IL_00a6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00b0: 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_00d2: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					byte[] audioData = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe<byte>(ref audioData, default(ForPrimitives));
					}
					bool flag2 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
					string maskedID = null;
					if (flag2)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedID, false);
					}
					ClientRpcParams client = rpcParams.Client;
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).PlayAudioDataClientRpc(audioData, maskedID, client);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_58846502(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_0112: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string maskedID = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedID, false);
					}
					bool flag2 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
					string playerName = null;
					if (flag2)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref playerName, false);
					}
					bool flag3 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag3, default(ForPrimitives));
					string playerSpeech = null;
					if (flag3)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref playerSpeech, false);
					}
					bool respondingToPlayer = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref respondingToPlayer, default(ForPrimitives));
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).RequestMaskedResponseServerRpc(maskedID, playerName, playerSpeech, respondingToPlayer);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_2757415658(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
				//IL_00e7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_00f6: Unknown result type (might be due to invalid IL or missing references)
				//IL_0111: Unknown result type (might be due to invalid IL or missing references)
				//IL_0120: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string maskedID = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref maskedID, false);
					}
					bool flag2 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
					string playerName = null;
					if (flag2)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref playerName, false);
					}
					bool flag3 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag3, default(ForPrimitives));
					string playerSpeech = null;
					if (flag3)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref playerSpeech, false);
					}
					bool respondingToPlayer = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref respondingToPlayer, default(ForPrimitives));
					ClientRpcParams client = rpcParams.Client;
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).RequestMaskedResponseClientRpc(maskedID, playerName, playerSpeech, respondingToPlayer, client);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1113147307(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_0023: Unknown result type (might be due to invalid IL or missing references)
				//IL_0024: Unknown result type (might be due to invalid IL or missing references)
				//IL_0029: Unknown result type (might be due to invalid IL or missing references)
				//IL_0033: Unknown result type (might be due to invalid IL or missing references)
				//IL_003e: Unknown result type (might be due to invalid IL or missing references)
				//IL_004d: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					ServerRpcParams server = rpcParams.Server;
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).ShareConfigToClientsServerRpc(server);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			private static void __rpc_handler_1784179457(NetworkBehaviour target, FastBufferReader reader, __RpcParams rpcParams)
			{
				//IL_002f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0035: Unknown result type (might be due to invalid IL or missing references)
				//IL_0067: Unknown result type (might be due to invalid IL or missing references)
				//IL_006d: Unknown result type (might be due to invalid IL or missing references)
				//IL_009f: 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_00d7: Unknown result type (might be due to invalid IL or missing references)
				//IL_00dd: Unknown result type (might be due to invalid IL or missing references)
				//IL_010f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0115: Unknown result type (might be due to invalid IL or missing references)
				//IL_011e: Unknown result type (might be due to invalid IL or missing references)
				//IL_012b: Unknown result type (might be due to invalid IL or missing references)
				//IL_0144: Unknown result type (might be due to invalid IL or missing references)
				//IL_014a: Unknown result type (might be due to invalid IL or missing references)
				//IL_017c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0182: Unknown result type (might be due to invalid IL or missing references)
				//IL_01b4: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_01ec: Unknown result type (might be due to invalid IL or missing references)
				//IL_01f2: Unknown result type (might be due to invalid IL or missing references)
				//IL_0224: Unknown result type (might be due to invalid IL or missing references)
				//IL_022a: Unknown result type (might be due to invalid IL or missing references)
				//IL_023f: Unknown result type (might be due to invalid IL or missing references)
				//IL_0245: Unknown result type (might be due to invalid IL or missing references)
				//IL_026b: Unknown result type (might be due to invalid IL or missing references)
				//IL_026c: Unknown result type (might be due to invalid IL or missing references)
				//IL_0271: Unknown result type (might be due to invalid IL or missing references)
				//IL_027b: Unknown result type (might be due to invalid IL or missing references)
				//IL_02ba: Unknown result type (might be due to invalid IL or missing references)
				//IL_02c9: Unknown result type (might be due to invalid IL or missing references)
				NetworkManager networkManager = target.NetworkManager;
				if (networkManager != null && networkManager.IsListening)
				{
					bool flag = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag, default(ForPrimitives));
					string chatServiceProvider = null;
					if (flag)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref chatServiceProvider, false);
					}
					bool flag2 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag2, default(ForPrimitives));
					string chatApiKey = null;
					if (flag2)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref chatApiKey, false);
					}
					bool flag3 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag3, default(ForPrimitives));
					string chatModel = null;
					if (flag3)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref chatModel, false);
					}
					bool flag4 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag4, default(ForPrimitives));
					string prompt = null;
					if (flag4)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref prompt, false);
					}
					bool realtimeResponses = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref realtimeResponses, default(ForPrimitives));
					uint maxClips = default(uint);
					ByteUnpacker.ReadValueBitPacked(reader, ref maxClips);
					uint talkProbability = default(uint);
					ByteUnpacker.ReadValueBitPacked(reader, ref talkProbability);
					bool flag5 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag5, default(ForPrimitives));
					string sttService = null;
					if (flag5)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref sttService, false);
					}
					bool flag6 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag6, default(ForPrimitives));
					string sttApiKey = null;
					if (flag6)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref sttApiKey, false);
					}
					bool flag7 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag7, default(ForPrimitives));
					string region = null;
					if (flag7)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref region, false);
					}
					bool flag8 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag8, default(ForPrimitives));
					string language = null;
					if (flag8)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref language, false);
					}
					bool ttsEnabled = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref ttsEnabled, default(ForPrimitives));
					bool flag9 = default(bool);
					((FastBufferReader)(ref reader)).ReadValueSafe<bool>(ref flag9, default(ForPrimitives));
					string ttsApiKey = null;
					if (flag9)
					{
						((FastBufferReader)(ref reader)).ReadValueSafe(ref ttsApiKey, false);
					}
					ClientRpcParams client = rpcParams.Client;
					target.__rpc_exec_stage = (__RpcExecStage)1;
					((WendigosNetworkManager)(object)target).RecieveConfigClientRpc(chatServiceProvider, chatApiKey, chatModel, prompt, realtimeResponses, maxClips, talkProbability, sttService, sttApiKey, region, language, ttsEnabled, ttsApiKey, client);
					target.__rpc_exec_stage = (__RpcExecStage)0;
				}
			}

			protected internal override string __getTypeName()
			{
				return "WendigosNetworkManager";
			}
		}

		public class MainThreadInvoker
		{
			public static readonly ConcurrentQueue<Action> _actions = new ConcurrentQueue<Action>();

			public static void Enqueue(Action action)
			{
				if (action == null)
				{
					throw new ArgumentNullException("action");
				}
				_actions.Enqueue(action);
			}
		}

		public class MaskedEnemyIdentifier : MonoBehaviour
		{
			public string id;

			public GameObject child;

			public ConcurrentQueue<byte[]> audioNetworkQueue = new ConcurrentQueue<byte[]>();

			private void Update()
			{
				//IL_0058: Unknown result type (might be due to invalid IL or missing references)
				//IL_005e: Unknown result type (might be due to invalid IL or missing references)
				if (audioNetworkQueue.TryDequeue(out var result))
				{
					int i = 0;
					int num = result.Length;
					child.GetComponent<MaskedAudioComponent>();
					int num2;
					for (; i < num; i += num2)
					{
						num2 = Math.Min(32768, num - i);
						byte[] array = new byte[num2];
						Array.Copy(result, i, array, 0, num2);
						WendigosNetworkManager.Instance.ShareAudioDataServerRpc(array.ToArray(), id);
					}
				}
			}
		}

		public class MaskedAudioComponent : MonoBehaviour
		{
			public StreamingAudioDecoder audioQueue = new StreamingAudioDecoder();

			private AudioSource _audioSource;

			private AudioClip _streamingClip;

			private int SampleRate = 48000;

			private int Channels = 2;

			public void Awake()
			{
				AudioSource component = ((Component)this).GetComponent<AudioSource>();
				if ((Object)(object)component != (Object)null)
				{
					((EnemyAI)((Component)((Component)this).transform.parent).GetComponent<MaskedPlayerEnemy>()).creatureVoice.CopyTo(component);
				}
				_audioSource = ((Component)this).gameObject.AddComponent<AudioSource>();
				_audioSource.playOnAwake = false;
				((EnemyAI)((Component)((Component)this).transform.parent).GetComponent<MaskedPlayerEnemy>()).creatureVoice.CopyTo(_audioSource);
			}

			private void Start()
			{
				//IL_0017: Unknown result type (might be due to invalid IL or missing references)
				//IL_001d: Invalid comparison between Unknown and I4
				//IL_0048: Unknown result type (might be due to invalid IL or missing references)
				//IL_0052: Expected O, but got Unknown
				audioQueue.Reset();
				SampleRate = AudioSettings.outputSampleRate;
				Channels = (((int)AudioSettings.speakerMode == 1) ? 1 : 2);
				_streamingClip = AudioClip.Create("NetworkStream", SampleRate, Channels, SampleRate, true, new PCMReaderCallback(OnAudioRead));
				_audioSource.clip = _streamingClip;
				_audioSource.loop = true;
				if (!_audioSource.isPlaying)
				{
					_audioSource.Play();
				}
			}

			private void OnAudioRead(float[] data)
			{
				float num = default(float);
				for (int i = 0; i < data.Length; i++)
				{
					if (audioQueue.TryGetSample(ref num))
					{
						data[i] = num;
					}
					else
					{
						data[i] = 0f;
					}
				}
			}
		}

		[HarmonyPatch(typeof(StartOfRound), "OnPlayerDC")]
		private class PlayerDCPatch
		{
			private static void Prefix(int playerObjectNumber, ulong clientId)
			{
				if (!((NetworkBehaviour)WendigosNetworkManager.Instance).IsServer)
				{
					return;
				}
				foreach (string key in new Dictionary<string, ulong>(sharedMaskedClientDict).Keys)
				{
					if (sharedMaskedClientDict[key] == clientId)
					{
						sharedMaskedClientDict.Remove(key);
					}
				}
			}
		}

		[HarmonyPatch(typeof(MaskedPlayerEnemy), "DoAIInterval")]
		private class MaskedPlayerEnemyAIPatch
		{
			private static void Prefix(MaskedPlayerEnemy __instance)
			{
				//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
				//IL_00d0: Unknown result type (might be due to invalid IL or missing references)
				if (((EnemyAI)__instance).isEnemyDead)
				{
					((EnemyAI)__instance).agent.speed = 0f;
					return;
				}
				string id = ((Component)__instance).gameObject.GetComponent<MaskedEnemyIdentifier>().id;
				ulong num = 0uL;
				if (!sharedMaskedClientDict.Keys.Contains(id))
				{
					return;
				}
				num = sharedMaskedClientDict[id];
				if (num != NetworkManager.Singleton.LocalClientId)
				{
					return;
				}
				switch (((EnemyAI)__instance).currentBehaviourStateIndex)
				{
				case 0:
				{
					PlayerControllerB val = ((EnemyAI)__instance).CheckLineOfSightForClosestPlayer(45f, 60, -1, 0f);
					if ((Object)(object)val != (Object)null)
					{
						if (!enable_realtime_responses.Value && serverRand.Next(100) >= 100 - talk_probability.Value && Vector3.Distance(((Component)val.gameplayCamera).transform.position, ((EnemyAI)__instance).eye.position) > 15f)
						{
							WendigosNetworkManager.Instance.RequestMaskedResponseServerRpc(id, "", "", respondingToPlayer: false);
						}
					}
					else if (serverRand.Next(100) >= 100 - talk_probability.Value)
					{
						PlayLocalAudioClipAndQueue(__instance);
					}
					break;
				}
				case 1:
				case 2:
					break;
				}
			}
		}

		[HarmonyPatch(typeof(MaskedPlayerEnemy), "SetVisibilityOfMaskedEnemy")]
		private class MaskedPlayerEnemyVisibilityPatch
		{
			public static void Postfix(MaskedPlayerEnemy __instance)
			{
				if ((bool)Traverse.Create((object)__instance).Field("enemyEnabled").GetValue())
				{
					((Component)((Component)__instance).gameObject.transform.Find("ScavengerModel/metarig/spine/spine.001/spine.002/spine.003/spine.004/HeadMaskComedy")).gameObject.SetActive(false);
					((Component)((Component)__instance).gameObject.transform.Find("ScavengerModel/metarig/spine/spine.001/spine.002/spine.003/spine.004/HeadMaskTragedy")).gameObject.SetActive(false);
				}
			}
		}

		[HarmonyPatch(typeof(MaskedPlayerEnemy), "SetHandsOutClientRpc")]
		private class MaskedPlayerEnemyRemoveHands
		{
			public static void Prefix(ref bool setOut, MaskedPlayerEnemy __instance)
			{
				setOut = false;
			}
		}

		[HarmonyPatch(typeof(MaskedPlayerEnemy), "HitEnemy")]
		private class MaskedPlayerEnemyDamagePatch
		{
			private static void Prefix(MaskedPlayerEnemy __instance)
			{
				try
				{
					string id = ((Component)__instance).gameObject.GetComponent<MaskedEnemyIdentifier>().id;
					_ = sharedMaskedClientDict[id];
					if (!enable_realtime_responses.Value && serverRand.Next(3) == 0)
					{
						WendigosNetworkManager.Instance.RequestMaskedResponseServerRpc(id, "", "{DAMAGED}", respondingToPlayer: false);
					}
				}
				catch
				{
				}
			}
		}

		[HarmonyPatch(typeof(MaskedPlayerEnemy), "Start")]
		private class MaskedStartPatch
		{
			public static void Postfix(MaskedPlayerEnemy __instance)
			{
				InitMaskedAudio(__instance);
				if (((NetworkBehaviour)WendigosNetworkManager.Instance).IsServer)
				{
					List<ulong> list = new List<ulong>();
					WriteToConsole("Number of connected clients: " + NetworkManager.Singleton.ConnectedClientsIds.Count);
					foreach (ulong connectedClientsId in NetworkManager.Singleton.ConnectedClientsIds)
					{
						if (!sharedMaskedClientDict.Values.Contains(connectedClientsId))
						{
							list.Add(connectedClientsId);
						}
					}
					WriteToConsole("Created unasssigned list");
					if (list.Count == 0)
					{
						return;
					}
					ulong num = list[serverRand.Next() % list.Count];
					WendigosNetworkManager.Instance.AddToMaskedClientDictServerRpc(((Component)__instance).gameObject.GetComponent<MaskedEnemyIdentifier>().id, num);
					PlayerControllerB[] allPlayerScripts = StartOfRound.Instance.allPlayerScripts;
					foreach (PlayerControllerB val in allPlayerScripts)
					{
						if (val.actualClientId == num)
						{
							WendigosNetworkManager.Instance.SetMaskedSuitClientRpc(((Component)__instance).gameObject.GetComponent<MaskedEnemyIdentifier>().id, val.currentSuitID);
							break;
						}
					}
				}
				WriteToConsole("Finished Spawning Masked");
			}
		}

		[HarmonyPatch(typeof(RoundManager), "LoadNewLevel")]
		private class RoundManagerSpawnPatch
		{
			private static void Prefix()
			{
				GUIManager.CreateGUIManagerObject();
				WriteToConsole("Created GUI Manager");
				WriteToConsole("Chat Manager Object is: " + (object)WendigosChatManager.chatManagerComponent);
				WriteToConsole("Clearing chared masked dict");
				sharedMaskedClientDict.Clear();
				if (NetworkManager.Singleton.IsServer)
				{
					WendigosNetworkManager.Instance.InitSTTClientRpc();
				}
				if ((Object)(object)WendigosChatManager.chatManagerComponent == (Object)null)
				{
					WendigosChatManager.Init(ChooseApiKey(Chat_api_key.Value, temp_Chat_api_key), Chat_model.Value, ChatServiceProvider.Value);
				}
				try
				{
					if ((TTS_enabled.Value || enable_realtime_responses.Value) && (Object)(object)ElevenLabs.ttsManagerComponent == (Object)null)
					{
						ElevenLabs.Init(ChooseApiKey(TTS_api_key.Value, temp_TTS_api_key), TTS_voice_id.Value, TTS_voice_volume.Value);
					}
				}
				catch (Exception ex)
				{
					WriteToConsole(ex.ToString());
				}
				foreach (ulong key in clientVoiceIDLookup.Keys)
				{
					WriteToConsole($"CLIENT IDS: {key} {clientVoiceIDLookup[key]}");
				}
			}
		}

		[HarmonyPatch(typeof(RoundManager), "DespawnPropsAtEndOfRound")]
		private class RoundManagerEndPatch
		{
			private static void Prefix()
			{
				try
				{
					STT.StopSpeechTranscription();
					WendigosChatManager.chats.Clear();
				}
				catch (Exception ex)
				{
					WriteToConsole(ex.ToString());
				}
			}
		}

		[HarmonyPatch(typeof(IngamePlayerSettings), "LoadSettingsFromPrefs")]
		private class IngamePlayerSettingsLoadPatch
		{
			private static void Postfix(IngamePlayerSettings __instance)
			{
				mic_name = IngamePlayerSettings.Instance.settings.micDevice;
				STT.ChangeMicDevice(mic_name);
				WriteToConsole(mic_name);
			}
		}

		[HarmonyPatch(typeof(IngamePlayerSettings), "SaveChangedSettings")]
		private class IngamePlayerSettingsMicSavePatch
		{
			private static void Postfix(IngamePlayerSettings __instance)
			{
				mic_name = IngamePlayerSettings.Instance.settings.micDevice;
				STT.ChangeMicDevice(mic_name);
				WriteToConsole("Set to " + mic_name);
			}
		}

		[HarmonyPatch(typeof(MenuManager), "Start")]
		private class MenuManagerPatch
		{
			private static void Postfix(MenuManager __instance)
			{
				if (!__instance.isInitScene)
				{
					GUIManager.CreateGUIManagerObject();
				}
			}
		}

		[HarmonyPatch(typeof(PlayerControllerB), "ShowNameBillboard")]
		private class HidePlayerNamePatch
		{
			private static void Postfix(PlayerControllerB __instance)
			{
				__instance.usernameAlpha.alpha = 0f;
			}
		}

		public static Random serverRand = new Random();

		private static ConfigEntry<bool> mod_enabled;

		public static ConfigEntry<uint> max_clip_count;

		private static ConfigEntry<uint> talk_probability;

		private static ConfigEntry<bool> TTS_enabled;

		private static ConfigEntry<string> TTS_api_key;

		public static ConfigEntry<string> TTS_voice_id;

		public static ConfigEntry<float> TTS_voice_volume;

		public static ConfigEntry<string> p