Decompiled source of ForgeControl v0.1.0

despr0grammer.ForgeControl.dll

Decompiled 2 weeks ago
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using BepInEx;
using BepInEx.Configuration;
using BepInEx.Logging;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using UnityEngine;
using UnityEngine.EventSystems;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: AssemblyVersion("0.0.0.0")]
[module: RefSafetyRules(11)]
namespace Microsoft.CodeAnalysis
{
	[CompilerGenerated]
	[Embedded]
	internal sealed class EmbeddedAttribute : Attribute
	{
	}
}
namespace System.Runtime.CompilerServices
{
	[CompilerGenerated]
	[Embedded]
	[AttributeUsage(AttributeTargets.Module, AllowMultiple = false, Inherited = false)]
	internal sealed class RefSafetyRulesAttribute : Attribute
	{
		public readonly int Version;

		public RefSafetyRulesAttribute(int P_0)
		{
			Version = P_0;
		}
	}
}
namespace despr0grammer.ForgeControl
{
	internal enum EndReason
	{
		Done,
		Broke,
		NoIdols,
		TooMany,
		Cancelled,
		CouldNotStart,
		NoProgress,
		Missing,
		Error
	}
	internal sealed class Attempt
	{
		internal ItemData Item;

		internal int Quality;

		internal Vector2i Pos;

		internal string Name;

		internal bool Tweaked;

		internal SharedData Idol;

		internal float OldUpgradeChance;

		internal float OldBreakChance;
	}
	internal static class Chain
	{
		private const float DelayBetweenAttempts = 0.9f;

		private static UpgradeAction _action;

		private static FailureMode _failure;

		private static bool _upgrader;

		private static string _name;

		private static string _displayName;

		private static Vector2i _pos;

		private static int _startQuality;

		private static int _lastQuality;

		private static int _target;

		private static int _remaining;

		private static int _attempts;

		private static int _spent;

		private static int _held;

		private static bool _broke;

		private static bool _noProgress;

		private static bool _pending;

		private static EndReason _pressFailure = EndReason.CouldNotStart;

		private static float _nextAt;

		private static bool _reported;

		internal static bool Active { get; private set; }

		internal static bool Bypass { get; private set; }

		internal static void Start(InventoryGui gui, PromptInfo info, UpgradeAction action, FailureMode failure, int levels)
		{
			//IL_0059: Unknown result type (might be due to invalid IL or missing references)
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			if (Active || (Object)(object)gui == (Object)null || info == null || info.Item == null)
			{
				return;
			}
			_action = action;
			_failure = failure;
			_upgrader = info.Upgrader;
			_name = info.Item.m_shared.m_name;
			_displayName = info.ItemName;
			_pos = info.Item.m_gridPos;
			_startQuality = info.Quality;
			_lastQuality = info.Quality;
			_target = info.Quality + levels;
			_remaining = levels;
			_attempts = 0;
			_spent = 0;
			_held = 0;
			_broke = false;
			_noProgress = false;
			_pending = false;
			_nextAt = 0f;
			Active = true;
			try
			{
				if (!Press(gui))
				{
					End(_pressFailure);
				}
			}
			catch (Exception e)
			{
				Fail("starting the attempts", e);
			}
		}

		internal static void Tick()
		{
			if (!Active)
			{
				return;
			}
			try
			{
				InventoryGui instance = InventoryGui.instance;
				Player localPlayer = Player.m_localPlayer;
				if ((Object)(object)instance == (Object)null || !InventoryGui.IsVisible() || (Object)(object)localPlayer == (Object)null || ((Character)localPlayer).IsDead() || ForgeHud.IsOpen)
				{
					End(FinishedOr(EndReason.Cancelled));
				}
				else
				{
					if (GameAccess.CraftTimer(instance) >= 0f)
					{
						return;
					}
					if (_pending)
					{
						End(EndReason.Cancelled);
					}
					else if (!(Time.time < _nextAt))
					{
						Step step = UpgradePlan.Next(_action, _lastQuality, _target, _attempts, Plugin.MaxAttempts.Value, _remaining, _broke, _upgrader, CanPayNext(instance, localPlayer), _noProgress);
						if (step != Step.Continue)
						{
							End(ReasonOf(step));
						}
						else if (!Press(instance))
						{
							End(_pressFailure);
						}
					}
				}
			}
			catch (Exception e)
			{
				Fail("running the attempts", e);
			}
		}

		internal static void OnUserCancel()
		{
			if (Active)
			{
				End(EndReason.Cancelled);
			}
		}

		internal static void OnHidden()
		{
			if (Active)
			{
				End(FinishedOr(EndReason.Cancelled));
			}
		}

		internal static Attempt BeforeAttempt(InventoryGui gui)
		{
			//IL_0047: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Unknown result type (might be due to invalid IL or missing references)
			if (!Active)
			{
				return null;
			}
			Recipe val = GameAccess.CraftingRecipe(gui);
			ItemData val2 = GameAccess.CraftingItem(gui);
			if ((Object)(object)val == (Object)null || val2 == null || val2.m_shared == null)
			{
				return null;
			}
			Attempt attempt = new Attempt
			{
				Item = val2,
				Quality = val2.m_quality,
				Pos = val2.m_gridPos,
				Name = val2.m_shared.m_name
			};
			Player localPlayer = Player.m_localPlayer;
			CraftingStation val3 = (((Object)(object)localPlayer != (Object)null) ? localPlayer.GetCurrentCraftingStation() : null);
			if ((Object)(object)val3 == (Object)null || !val3.m_upgrader)
			{
				return attempt;
			}
			SharedData val4 = Prompt.FindIdol(val);
			if (val4 == null)
			{
				return attempt;
			}
			float? num = null;
			float? num2 = null;
			switch (_action)
			{
			case UpgradeAction.Upgrade:
				if (_failure == FailureMode.Downgrade)
				{
					num2 = -1f;
				}
				break;
			case UpgradeAction.Guaranteed:
				num = 2f;
				break;
			case UpgradeAction.Downgrade:
				num = -1f;
				num2 = -1f;
				break;
			case UpgradeAction.Break:
				num = -1f;
				num2 = 2f;
				break;
			}
			if (num.HasValue || num2.HasValue)
			{
				attempt.Idol = val4;
				attempt.OldUpgradeChance = val4.m_upgradeChance;
				attempt.OldBreakChance = val4.m_breakChance;
				attempt.Tweaked = true;
				if (num.HasValue)
				{
					val4.m_upgradeChance = num.Value;
				}
				if (num2.HasValue)
				{
					val4.m_breakChance = num2.Value;
				}
			}
			return attempt;
		}

		internal static void AfterAttempt(Attempt attempt, Exception exception)
		{
			if (attempt == null)
			{
				return;
			}
			if (attempt.Tweaked && attempt.Idol != null)
			{
				attempt.Idol.m_upgradeChance = attempt.OldUpgradeChance;
				attempt.Idol.m_breakChance = attempt.OldBreakChance;
			}
			Player localPlayer = Player.m_localPlayer;
			ItemData val = (((Object)(object)localPlayer != (Object)null) ? ((Humanoid)localPlayer).GetInventory().GetItemAt(attempt.Pos.x, attempt.Pos.y) : null);
			bool flag = val != null && val.m_shared != null && val.m_shared.m_name == attempt.Name;
			if (flag && val.m_quality < 1)
			{
				val.m_quality = 1;
				val.m_durability = val.GetMaxDurability();
				TryRefreshPanel();
			}
			if (exception == null && Active)
			{
				_pending = false;
				_nextAt = Time.time + 0.9f;
				Outcome outcome = UpgradePlan.Classify(flag, attempt.Quality, flag ? val.m_quality : 0, val == attempt.Item);
				_lastQuality = (flag ? val.m_quality : 0);
				switch (outcome)
				{
				case Outcome.NoChange:
					_noProgress = true;
					return;
				case Outcome.Broke:
					_broke = true;
					break;
				case Outcome.Downgraded:
					_remaining--;
					break;
				case Outcome.Held:
					_held++;
					break;
				}
				_attempts++;
				_spent++;
			}
		}

		private static bool Press(InventoryGui gui)
		{
			//IL_0007: Unknown result type (might be due to invalid IL or missing references)
			_pressFailure = EndReason.CouldNotStart;
			if (!GameAccess.Reselect(gui, _pos, _name))
			{
				return false;
			}
			Player localPlayer = Player.m_localPlayer;
			Recipe val = GameAccess.SelectedRecipe(gui);
			ItemData val2 = GameAccess.SelectedItem(gui);
			if ((Object)(object)localPlayer != (Object)null && (Object)(object)val != (Object)null && val2 != null && !HaveMaterials(localPlayer, val, val2))
			{
				_pressFailure = EndReason.Missing;
				return false;
			}
			Bypass = true;
			try
			{
				GameAccess.PressCraft(gui);
			}
			catch
			{
				if (GameAccess.CraftTimer(gui) >= 0f)
				{
					GameAccess.StopCraft(gui);
				}
				throw;
			}
			finally
			{
				Bypass = false;
			}
			if (GameAccess.CraftTimer(gui) < 0f)
			{
				return false;
			}
			_pending = true;
			return true;
		}

		private static bool HaveMaterials(Player player, Recipe recipe, ItemData item)
		{
			if (!Prompt.FreeCrafting(player))
			{
				return player.HaveRequirements(recipe, false, item.m_quality + 1, 1);
			}
			return true;
		}

		private static bool CanPayNext(InventoryGui gui, Player player)
		{
			//IL_0008: Unknown result type (might be due to invalid IL or missing references)
			if (_broke || !GameAccess.Reselect(gui, _pos, _name))
			{
				return true;
			}
			Recipe val = GameAccess.SelectedRecipe(gui);
			ItemData val2 = GameAccess.SelectedItem(gui);
			if (!((Object)(object)val == (Object)null) && val2 != null)
			{
				return HaveMaterials(player, val, val2);
			}
			return true;
		}

		private static EndReason FinishedOr(EndReason otherwise)
		{
			if (_pending)
			{
				return otherwise;
			}
			Step step = UpgradePlan.Next(_action, _lastQuality, _target, _attempts, Plugin.MaxAttempts.Value, _remaining, _broke, needsIdols: false, idolsLeft: true, _noProgress);
			if (step != Step.Done && step != Step.Broke)
			{
				return otherwise;
			}
			return ReasonOf(step);
		}

		private static void TryRefreshPanel()
		{
			try
			{
				InventoryGui instance = InventoryGui.instance;
				if ((Object)(object)instance != (Object)null)
				{
					GameAccess.RefreshPanel(instance);
				}
			}
			catch (Exception ex)
			{
				Plugin.Log.LogWarning((object)("Could not refresh the crafting list: " + ex.Message));
			}
		}

		private static EndReason ReasonOf(Step step)
		{
			return step switch
			{
				Step.Broke => EndReason.Broke, 
				Step.NoIdols => EndReason.NoIdols, 
				Step.TooManyAttempts => EndReason.TooMany, 
				Step.NoProgress => EndReason.NoProgress, 
				_ => EndReason.Done, 
			};
		}

		private static string ReasonText(EndReason reason)
		{
			return reason switch
			{
				EndReason.Broke => Text.ReasonBroke, 
				EndReason.NoIdols => Text.ReasonNoIdols, 
				EndReason.TooMany => Text.ReasonTooMany(Plugin.MaxAttempts.Value), 
				EndReason.Cancelled => Text.ReasonCancelled, 
				EndReason.CouldNotStart => Text.ReasonCouldNotStart, 
				EndReason.NoProgress => Text.ReasonNoProgress, 
				EndReason.Missing => Text.ReasonMissing, 
				EndReason.Error => Text.ReasonError, 
				_ => Text.ReasonDone, 
			};
		}

		private static void End(EndReason reason)
		{
			if (!Active)
			{
				return;
			}
			Active = false;
			_pending = false;
			try
			{
				string reason2 = ReasonText(reason) + ((_held > 0) ? (" " + Text.ReasonHeld) : string.Empty);
				string text = Text.Summary(_displayName, _startQuality, _lastQuality, _attempts, _spent, _upgrader, reason2);
				Plugin.Log.LogInfo((object)text);
				Player localPlayer = Player.m_localPlayer;
				if ((Object)(object)localPlayer != (Object)null)
				{
					((Character)localPlayer).Message((MessageType)1, text, 0, (Sprite)null, false);
				}
			}
			catch (Exception ex)
			{
				Plugin.Log.LogWarning((object)("Could not report the result: " + ex.Message));
			}
		}

		private static void Fail(string what, Exception e)
		{
			if (!_reported)
			{
				_reported = true;
				Plugin.Log.LogError((object)$"Error while {what} (further errors are not logged): {e}");
			}
			End(EndReason.Error);
		}
	}
	internal static class ForgeHud
	{
		private static int _blockUntilFrame = -1;

		private static EventSystem _eventSystem;

		private static bool _eventSystemSwitchedOff;

		private static Action _pendingStart;

		internal static bool Available { get; set; }

		internal static bool IsOpen { get; private set; }

		internal static ForgeHudWindow Window { get; set; }

		internal static bool Blocking
		{
			get
			{
				if (!IsOpen)
				{
					return Time.frameCount <= _blockUntilFrame;
				}
				return true;
			}
		}

		internal static bool Open(PromptInfo info)
		{
			if (!Available || (Object)(object)Window == (Object)null || IsOpen)
			{
				return false;
			}
			IsOpen = true;
			try
			{
				Window.OnOpened(info);
				((Behaviour)Window).enabled = true;
				SwitchEventSystem(on: false);
				return true;
			}
			catch (Exception arg)
			{
				Plugin.Log.LogError((object)$"The window could not open: {arg}");
				Close();
				return false;
			}
		}

		internal static void Close()
		{
			if (IsOpen)
			{
				IsOpen = false;
				_blockUntilFrame = Time.frameCount + 1;
				if ((Object)(object)Window != (Object)null)
				{
					((Behaviour)Window).enabled = false;
				}
				SwitchEventSystem(on: true);
			}
		}

		internal static void Request(PromptInfo info, UpgradeAction action, int levels, FailureMode failure)
		{
			if (Plugin.RememberChoices.Value && action == UpgradeAction.Upgrade && info.Upgrader)
			{
				Plugin.DefaultLevels.Value = levels;
				Plugin.OnFailure.Value = failure;
			}
			Close();
			_pendingStart = delegate
			{
				Chain.Start(InventoryGui.instance, info, action, failure, levels);
			};
		}

		internal static void Pump()
		{
			if (_pendingStart != null)
			{
				Action pendingStart = _pendingStart;
				_pendingStart = null;
				pendingStart();
			}
			if (!IsOpen && _eventSystemSwitchedOff)
			{
				SwitchEventSystem(on: true);
			}
		}

		internal static void DropPending()
		{
			_pendingStart = null;
		}

		private static void SwitchEventSystem(bool on)
		{
			try
			{
				if (!on)
				{
					EventSystem current = EventSystem.current;
					if ((Object)(object)current != (Object)null && ((Behaviour)current).enabled)
					{
						_eventSystem = current;
						((Behaviour)current).enabled = false;
						_eventSystemSwitchedOff = true;
					}
				}
				else if (_eventSystemSwitchedOff)
				{
					_eventSystemSwitchedOff = false;
					if ((Object)(object)_eventSystem != (Object)null)
					{
						((Behaviour)_eventSystem).enabled = true;
					}
					_eventSystem = null;
				}
			}
			catch (Exception ex)
			{
				Plugin.Log.LogWarning((object)("Could not switch the UI event system: " + ex.Message));
			}
		}
	}
	internal sealed class ForgeHudWindow : MonoBehaviour
	{
		private const float Width = 660f;

		private const float HeightUpgrader = 640f;

		private const float GuaranteedBlock = 70f;

		private const float HeightRegular = 410f;

		private const float RefreshSeconds = 0.5f;

		private PromptInfo _info;

		private int _levels = 1;

		private FailureMode _failure;

		private float _refreshAt;

		private int _openedFrame;

		private void Awake()
		{
			((Behaviour)this).enabled = false;
		}

		internal void OnOpened(PromptInfo info)
		{
			_info = info;
			_levels = UpgradePlan.ClampLevels(Plugin.DefaultLevels.Value, info.MaxLevels);
			_failure = Plugin.OnFailure.Value;
			_refreshAt = Time.unscaledTime + 0.5f;
			_openedFrame = Time.frameCount;
		}

		private void Update()
		{
			if (!ForgeHud.IsOpen)
			{
				return;
			}
			Player localPlayer = Player.m_localPlayer;
			if ((Object)(object)localPlayer == (Object)null || ((Character)localPlayer).IsDead() || ((Character)localPlayer).IsTeleporting() || !InventoryGui.IsVisible() || Menu.IsVisible() || Console.IsVisible() || Input.GetKeyDown((KeyCode)27) || ZInput.GetButtonDown("Inventory") || ZInput.GetButtonDown("JoyButtonB"))
			{
				ForgeHud.Close();
			}
			else if ((Input.GetKeyDown((KeyCode)13) || Input.GetKeyDown((KeyCode)271)) && Time.frameCount > _openedFrame + 1)
			{
				if (CanUpgrade())
				{
					ForgeHud.Request(_info, UpgradeAction.Upgrade, _levels, _failure);
				}
			}
			else if (Time.unscaledTime >= _refreshAt)
			{
				_refreshAt = Time.unscaledTime + 0.5f;
				Prompt.Refresh(_info);
			}
		}

		private bool CanUpgrade()
		{
			return _info.CanAfford;
		}

		private void OnGUI()
		{
			if (!ForgeHud.IsOpen || _info == null)
			{
				return;
			}
			try
			{
				Draw();
			}
			catch (ExitGUIException)
			{
				throw;
			}
			catch (Exception arg)
			{
				Plugin.Log.LogError((object)$"The window failed and was closed: {arg}");
				ForgeHud.Close();
			}
		}

		private void Draw()
		{
			//IL_004a: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_00db: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0120: Unknown result type (might be due to invalid IL or missing references)
			HudStyle.Ensure();
			GUI.depth = -100;
			GUISkin skin = GUI.skin;
			GUI.skin = HudStyle.Skin;
			float num = Mathf.Clamp((float)Screen.height / 1080f, 0.75f, 3f) * Plugin.HudScale.Value;
			GUI.matrix = Matrix4x4.Scale(new Vector3(num, num, 1f));
			_ = (float)Screen.width / num;
			float num2 = (float)Screen.height / num;
			float num3 = ((!_info.Upgrader) ? 410f : (640f + (Plugin.AllowGuaranteed.Value ? 70f : 0f)));
			num = Mathf.Min(new float[3]
			{
				num,
				((float)Screen.height - 20f) / num3,
				((float)Screen.width - 20f) / 660f
			});
			GUI.matrix = Matrix4x4.Scale(new Vector3(num, num, 1f));
			float num4 = (float)Screen.width / num;
			num2 = (float)Screen.height / num;
			GUI.BeginGroup(new Rect((num4 - 660f) / 2f, Mathf.Max(10f, (num2 - num3) / 2f), 660f, num3));
			try
			{
				DrawContents(num3);
			}
			finally
			{
				GUI.EndGroup();
				GUI.matrix = Matrix4x4.identity;
				GUI.skin = skin;
			}
		}

		private void DrawContents(float height)
		{
			//IL_0010: Unknown result type (might be due to invalid IL or missing references)
			//IL_002e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			//IL_0097: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0139: Unknown result type (might be due to invalid IL or missing references)
			//IL_0170: Unknown result type (might be due to invalid IL or missing references)
			//IL_0194: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0202: Unknown result type (might be due to invalid IL or missing references)
			//IL_0246: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d8: Unknown result type (might be due to invalid IL or missing references)
			//IL_032c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0377: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a9: Unknown result type (might be due to invalid IL or missing references)
			HudStyle.Frame(new Rect(0f, 0f, 660f, height));
			HudStyle.DrawTitle(new Rect(70f, 18f, 520f, 50f), Text.Title);
			HudStyle.Divider(60f, 600f, 74f);
			if (GUI.Button(new Rect(594f, 24f, 38f, 34f), "X", HudStyle.Button))
			{
				ForgeHud.Close();
				return;
			}
			float num = 94f;
			HudStyle.SlotIcon(new Rect(36f, num, 64f, 64f), _info.Icon);
			HudStyle.Shadowed(new Rect(114f, num - 2f, 510f, 30f), _info.ItemName, HudStyle.Heading);
			HudStyle.Shadowed(new Rect(114f, num + 28f, 510f, 26f), Text.QualityLine(_info.Quality, _info.Quality + _levels), HudStyle.Notice);
			HudStyle.Shadowed(new Rect(114f, num + 52f, 510f, 22f), Text.StationLine(_info.StationName), HudStyle.Small);
			num += 86f;
			HudStyle.Shadowed(new Rect(36f, num, 230f, 36f), Text.LevelsLabel, HudStyle.Label);
			if (GUI.Button(new Rect(270f, num, 40f, 36f), "-", HudStyle.Button))
			{
				_levels = UpgradePlan.ClampLevels(_levels - 1, _info.MaxLevels);
			}
			HudStyle.Shadowed(new Rect(316f, num, 60f, 36f), _levels.ToString(), HudStyle.Center);
			if (GUI.Button(new Rect(382f, num, 40f, 36f), "+", HudStyle.Button))
			{
				_levels = UpgradePlan.ClampLevels(_levels + 1, _info.MaxLevels);
			}
			if (GUI.Button(new Rect(432f, num, 90f, 36f), Text.MaxButton, HudStyle.Button))
			{
				int wanted = ((_info.Upgrader && _info.IdolCount > 0) ? _info.IdolCount : _info.MaxLevels);
				_levels = UpgradePlan.ClampLevels(wanted, _info.MaxLevels);
			}
			num += 52f;
			if (_info.Upgrader)
			{
				num = DrawUpgraderSection(num);
			}
			else
			{
				HudStyle.Shadowed(new Rect(36f, num, 588f, 64f), Text.ExplainRegular(_info.MaxQuality), HudStyle.Wrap);
			}
			if (!ForgeHud.IsOpen)
			{
				return;
			}
			float num2 = height - 92f;
			bool flag = CanUpgrade();
			bool enabled = GUI.enabled;
			GUI.enabled = enabled && flag;
			if (GUI.Button(new Rect(100f, num2, 220f, 44f), Text.Confirm, HudStyle.Button))
			{
				ForgeHud.Request(_info, UpgradeAction.Upgrade, _levels, _failure);
				GUI.enabled = enabled;
				return;
			}
			GUI.enabled = enabled;
			if (GUI.Button(new Rect(340f, num2, 220f, 44f), Text.Cancel, HudStyle.Button))
			{
				ForgeHud.Close();
			}
			else
			{
				HudStyle.Shadowed(new Rect(32f, height - 36f, 596f, 26f), Text.Footer, HudStyle.Small);
			}
		}

		private float DrawUpgraderSection(float y)
		{
			//IL_0021: 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_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c5: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ee: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0342: Unknown result type (might be due to invalid IL or missing references)
			//IL_0244: Unknown result type (might be due to invalid IL or missing references)
			//IL_038e: Unknown result type (might be due to invalid IL or missing references)
			//IL_029e: Unknown result type (might be due to invalid IL or missing references)
			//IL_042c: Unknown result type (might be due to invalid IL or missing references)
			int num = UpgradePlan.Percent(_info.UpChance);
			HudStyle.Shadowed(new Rect(36f, y, 588f, 28f), Text.Odds(num, 100 - num), HudStyle.Notice);
			y += 28f;
			string text = (_info.Free ? Text.IdolsFree : ((_info.IdolCount == 0 && _info.CanAfford) ? Text.IdolsFromChests(_info.IdolName) : Text.Idols(_info.IdolCount, _info.IdolName)));
			Color contentColor = GUI.contentColor;
			GUI.contentColor = (Color)(_info.CanAfford ? HudStyle.Body : new Color(1f, 0.45f, 0.35f, 1f));
			HudStyle.Shadowed(new Rect(36f, y, 588f, 28f), text, HudStyle.Plain);
			GUI.contentColor = contentColor;
			y += 34f;
			HudStyle.Shadowed(new Rect(36f, y, 120f, 36f), Text.FailLabel, HudStyle.Label);
			if (GUI.Button(new Rect(160f, y, 230f, 36f), Text.FailBreak, (_failure == FailureMode.Break) ? HudStyle.TabOn : HudStyle.Button))
			{
				_failure = FailureMode.Break;
			}
			if (GUI.Button(new Rect(400f, y, 226f, 36f), Text.FailDown, (_failure == FailureMode.Downgrade) ? HudStyle.TabOn : HudStyle.Button))
			{
				_failure = FailureMode.Downgrade;
			}
			y += 48f;
			int target = _info.Quality + _levels;
			string text2 = ((_failure == FailureMode.Break) ? Text.ExplainBreak(target) : Text.ExplainDown(target, Plugin.MaxAttempts.Value));
			HudStyle.Shadowed(new Rect(36f, y, 588f, 64f), text2, HudStyle.Wrap);
			y += 74f;
			if (Plugin.AllowGuaranteed.Value)
			{
				bool enabled = GUI.enabled;
				GUI.enabled = enabled && _info.CanAfford;
				if (GUI.Button(new Rect(36f, y, 588f, 40f), Text.Guaranteed(_levels), HudStyle.TabOn))
				{
					GUI.enabled = enabled;
					ForgeHud.Request(_info, UpgradeAction.Guaranteed, _levels, _failure);
					return y;
				}
				GUI.enabled = enabled;
				HudStyle.Shadowed(new Rect(36f, y + 44f, 588f, 22f), Text.GuaranteedNote, HudStyle.Small);
				y += 70f;
			}
			HudStyle.Divider(60f, 600f, y);
			y += 14f;
			HudStyle.Shadowed(new Rect(36f, y, 588f, 28f), Text.DirectLabel, HudStyle.Notice);
			y += 34f;
			bool enabled2 = GUI.enabled;
			bool canAfford = _info.CanAfford;
			GUI.enabled = enabled2 && canAfford && _info.Quality > 1;
			if (GUI.Button(new Rect(36f, y, 280f, 36f), Text.DirectDown, HudStyle.Button))
			{
				GUI.enabled = enabled2;
				ForgeHud.Request(_info, UpgradeAction.Downgrade, 1, _failure);
				return y;
			}
			GUI.enabled = enabled2 && canAfford;
			if (GUI.Button(new Rect(330f, y, 296f, 36f), Text.DirectBreak, HudStyle.Button))
			{
				GUI.enabled = enabled2;
				ForgeHud.Request(_info, UpgradeAction.Break, 1, _failure);
				return y;
			}
			GUI.enabled = enabled2;
			y += 44f;
			string text3 = (string.IsNullOrEmpty(_info.RefundText) ? Text.RefundNothing : Text.Refund(_info.RefundText));
			if (text3.Length > 84)
			{
				text3 = text3.Substring(0, 81) + "...";
			}
			HudStyle.Shadowed(new Rect(36f, y, 588f, 22f), text3, HudStyle.Small);
			return y + 28f;
		}
	}
	internal static class GameAccess
	{
		private static readonly FieldInfo CraftRecipeField = AccessTools.Field(typeof(InventoryGui), "m_craftRecipe");

		private static readonly FieldInfo CraftUpgradeItemField = AccessTools.Field(typeof(InventoryGui), "m_craftUpgradeItem");

		private static readonly FieldInfo CraftTimerField = AccessTools.Field(typeof(InventoryGui), "m_craftTimer");

		private static readonly FieldInfo SelectedRecipeField = AccessTools.Field(typeof(InventoryGui), "m_selectedRecipe");

		private static readonly FieldInfo AvailableRecipesField = AccessTools.Field(typeof(InventoryGui), "m_availableRecipes");

		private static readonly MethodInfo OnCraftPressedMethod = AccessTools.Method(typeof(InventoryGui), "OnCraftPressed", (Type[])null, (Type[])null);

		private static readonly MethodInfo UpdateCraftingPanelMethod = AccessTools.Method(typeof(InventoryGui), "UpdateCraftingPanel", new Type[1] { typeof(bool) }, (Type[])null);

		private static readonly MethodInfo SetRecipeMethod = AccessTools.Method(typeof(InventoryGui), "SetRecipe", new Type[2]
		{
			typeof(int),
			typeof(bool)
		}, (Type[])null);

		private static readonly Type PairType = typeof(InventoryGui).GetNestedType("RecipeDataPair", BindingFlags.Public | BindingFlags.NonPublic);

		private static readonly PropertyInfo PairRecipe = PairType?.GetProperty("Recipe");

		private static readonly PropertyInfo PairItem = PairType?.GetProperty("ItemData");

		internal static bool Ready
		{
			get
			{
				if (CraftRecipeField != null && CraftRecipeField.FieldType == typeof(Recipe) && CraftUpgradeItemField != null && CraftUpgradeItemField.FieldType == typeof(ItemData) && CraftTimerField != null && CraftTimerField.FieldType == typeof(float) && SelectedRecipeField != null && PairType != null && SelectedRecipeField.FieldType == PairType && AvailableRecipesField != null && typeof(IList).IsAssignableFrom(AvailableRecipesField.FieldType) && OnCraftPressedMethod != null && OnCraftPressedMethod.GetParameters().Length == 0 && SetRecipeMethod != null && UpdateCraftingPanelMethod != null && PairRecipe != null && PairRecipe.PropertyType == typeof(Recipe) && PairItem != null)
				{
					return PairItem.PropertyType == typeof(ItemData);
				}
				return false;
			}
		}

		internal static Recipe CraftingRecipe(InventoryGui gui)
		{
			object? value = CraftRecipeField.GetValue(gui);
			return (Recipe)((value is Recipe) ? value : null);
		}

		internal static ItemData CraftingItem(InventoryGui gui)
		{
			object? value = CraftUpgradeItemField.GetValue(gui);
			return (ItemData)((value is ItemData) ? value : null);
		}

		internal static float CraftTimer(InventoryGui gui)
		{
			return (float)CraftTimerField.GetValue(gui);
		}

		internal static Recipe SelectedRecipe(InventoryGui gui)
		{
			object value = SelectedRecipeField.GetValue(gui);
			if (value == null)
			{
				return null;
			}
			object? value2 = PairRecipe.GetValue(value, null);
			return (Recipe)((value2 is Recipe) ? value2 : null);
		}

		internal static ItemData SelectedItem(InventoryGui gui)
		{
			object value = SelectedRecipeField.GetValue(gui);
			if (value == null)
			{
				return null;
			}
			object? value2 = PairItem.GetValue(value, null);
			return (ItemData)((value2 is ItemData) ? value2 : null);
		}

		internal static bool Reselect(InventoryGui gui, Vector2i pos, string sharedName)
		{
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			if (!(AvailableRecipesField.GetValue(gui) is IList list))
			{
				return false;
			}
			for (int i = 0; i < list.Count; i++)
			{
				object? value = PairItem.GetValue(list[i], null);
				ItemData val = (ItemData)((value is ItemData) ? value : null);
				if (val != null && val.m_shared != null && val.m_gridPos == pos && val.m_shared.m_name == sharedName)
				{
					SetRecipeMethod.Invoke(gui, new object[2] { i, false });
					return true;
				}
			}
			return false;
		}

		internal static void PressCraft(InventoryGui gui)
		{
			OnCraftPressedMethod.Invoke(gui, null);
		}

		internal static void StopCraft(InventoryGui gui)
		{
			CraftTimerField.SetValue(gui, -1f);
		}

		internal static void RefreshPanel(InventoryGui gui)
		{
			UpdateCraftingPanelMethod.Invoke(gui, new object[1] { false });
		}
	}
	internal static class HudStyle
	{
		internal static readonly Color Gold = new Color(1f, 0.72f, 0.36f, 1f);

		internal static readonly Color GoldBright = new Color(1f, 0.84f, 0.35f, 1f);

		internal static readonly Color Body = new Color(0.93f, 0.89f, 0.8f, 1f);

		internal static readonly Color Dim = new Color(0.72f, 0.64f, 0.52f, 1f);

		internal static readonly Color Orange = new Color(1f, 0.65f, 0.16f, 1f);

		internal static GUIStyle Label;

		internal static GUIStyle Notice;

		internal static GUIStyle Small;

		internal static GUIStyle Heading;

		internal static GUIStyle Title;

		internal static GUIStyle TitleFallback;

		internal static GUIStyle Center;

		internal static GUIStyle Wrap;

		internal static GUIStyle Plain;

		internal static GUIStyle PlainRight;

		internal static GUIStyle PlainSmall;

		internal static GUIStyle Button;

		internal static GUIStyle TabOn;

		internal static GUIStyle Slot;

		internal static GUIStyle SlotOn;

		internal static GUIStyle Field;

		internal static GUIStyle Row;

		internal static GUISkin Skin;

		private static Texture2D _wood;

		private static Texture2D _stud;

		private static Texture2D _lock;

		private static Font _body;

		private static Font _title;

		private static bool _ready;

		private static readonly Dictionary<Sprite, Rect> IconRects = new Dictionary<Sprite, Rect>();

		private static readonly Dictionary<string, bool> TitleFits = new Dictionary<string, bool>();

		internal static Texture2D LockIcon
		{
			get
			{
				//IL_0026: Unknown result type (might be due to invalid IL or missing references)
				if (!((Object)(object)_lock != (Object)null))
				{
					return _lock = Load("lock", new Color(0.9f, 0.7f, 0.3f, 1f));
				}
				return _lock;
			}
		}

		internal static void Ensure()
		{
			if (!_ready)
			{
				_ready = true;
				try
				{
					Build();
				}
				catch (Exception arg)
				{
					Plugin.Log.LogError((object)$"Could not build the HUD's Valheim look; using plain styles. {arg}");
				}
				FillMissing();
			}
		}

		private static void FillMissing()
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0093: 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_00cb: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_010e: 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_0130: Unknown result type (might be due to invalid IL or missing references)
			//IL_014f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0174: Unknown result type (might be due to invalid IL or missing references)
			//IL_0191: Unknown result type (might be due to invalid IL or missing references)
			//IL_0196: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01ef: Unknown result type (might be due to invalid IL or missing references)
			//IL_020c: Unknown result type (might be due to invalid IL or missing references)
			Label = (GUIStyle)(((object)Label) ?? ((object)new GUIStyle(GUI.skin.label)));
			Notice = (GUIStyle)(((object)Notice) ?? ((object)new GUIStyle(GUI.skin.label)));
			Small = (GUIStyle)(((object)Small) ?? ((object)new GUIStyle(GUI.skin.label)));
			Heading = (GUIStyle)(((object)Heading) ?? ((object)new GUIStyle(GUI.skin.label)));
			Title = (GUIStyle)(((object)Title) ?? ((object)new GUIStyle(GUI.skin.label)
			{
				alignment = (TextAnchor)4,
				fontSize = 28
			}));
			TitleFallback = TitleFallback ?? Title;
			Center = (GUIStyle)(((object)Center) ?? ((object)new GUIStyle(GUI.skin.label)
			{
				alignment = (TextAnchor)4
			}));
			Wrap = (GUIStyle)(((object)Wrap) ?? ((object)new GUIStyle(GUI.skin.label)
			{
				wordWrap = true
			}));
			Plain = (GUIStyle)(((object)Plain) ?? ((object)new GUIStyle(GUI.skin.label)));
			PlainRight = (GUIStyle)(((object)PlainRight) ?? ((object)new GUIStyle(GUI.skin.label)
			{
				alignment = (TextAnchor)5
			}));
			PlainSmall = (GUIStyle)(((object)PlainSmall) ?? ((object)new GUIStyle(GUI.skin.label)
			{
				fontSize = 14
			}));
			Button = (GUIStyle)(((object)Button) ?? ((object)new GUIStyle(GUI.skin.button)));
			TabOn = (GUIStyle)(((object)TabOn) ?? ((object)new GUIStyle(GUI.skin.button)
			{
				fontStyle = (FontStyle)1
			}));
			Slot = (GUIStyle)(((object)Slot) ?? ((object)new GUIStyle(GUI.skin.box)));
			SlotOn = (GUIStyle)(((object)SlotOn) ?? ((object)new GUIStyle(GUI.skin.box)));
			Field = (GUIStyle)(((object)Field) ?? ((object)new GUIStyle(GUI.skin.textField)));
			Row = (GUIStyle)(((object)Row) ?? ((object)new GUIStyle(GUI.skin.button)));
			Skin = (((Object)(object)Skin != (Object)null) ? Skin : GUI.skin);
		}

		private static void Build()
		{
			//IL_001e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0066: Unknown result type (might be due to invalid IL or missing references)
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_011f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0140: Unknown result type (might be due to invalid IL or missing references)
			//IL_0161: Unknown result type (might be due to invalid IL or missing references)
			//IL_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_01a3: Unknown result type (might be due to invalid IL or missing references)
			//IL_01c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_01f0: Unknown result type (might be due to invalid IL or missing references)
			//IL_0223: Unknown result type (might be due to invalid IL or missing references)
			//IL_0255: Unknown result type (might be due to invalid IL or missing references)
			//IL_0287: Unknown result type (might be due to invalid IL or missing references)
			//IL_02be: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f3: Expected O, but got Unknown
			//IL_02fe: Unknown result type (might be due to invalid IL or missing references)
			//IL_0308: Expected O, but got Unknown
			//IL_030d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0317: Expected O, but got Unknown
			//IL_033f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0371: Unknown result type (might be due to invalid IL or missing references)
			//IL_0385: Unknown result type (might be due to invalid IL or missing references)
			//IL_038a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0393: Unknown result type (might be due to invalid IL or missing references)
			//IL_039d: Expected O, but got Unknown
			//IL_039d: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ac: Expected O, but got Unknown
			//IL_03ac: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b1: Unknown result type (might be due to invalid IL or missing references)
			//IL_03bb: Expected O, but got Unknown
			//IL_03c0: Expected O, but got Unknown
			//IL_03e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f7: Unknown result type (might be due to invalid IL or missing references)
			//IL_0401: Expected O, but got Unknown
			//IL_0424: Unknown result type (might be due to invalid IL or missing references)
			//IL_0444: Unknown result type (might be due to invalid IL or missing references)
			//IL_0477: Unknown result type (might be due to invalid IL or missing references)
			//IL_04cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_04e3: Unknown result type (might be due to invalid IL or missing references)
			//IL_04ed: Expected O, but got Unknown
			//IL_04f8: Unknown result type (might be due to invalid IL or missing references)
			//IL_0502: Expected O, but got Unknown
			//IL_050c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0511: Unknown result type (might be due to invalid IL or missing references)
			//IL_0516: Unknown result type (might be due to invalid IL or missing references)
			//IL_0520: Expected O, but got Unknown
			//IL_0525: Expected O, but got Unknown
			//IL_0553: Unknown result type (might be due to invalid IL or missing references)
			//IL_0580: Unknown result type (might be due to invalid IL or missing references)
			FindFonts();
			_wood = Load("wood", new Color(0.42f, 0.29f, 0.19f, 1f));
			_stud = Load("stud", new Color(0.5f, 0.36f, 0.24f, 1f));
			Label = Make(GUI.skin.label, _body, 16, Body, (TextAnchor)3);
			Notice = Make(GUI.skin.label, _body, 16, Gold, (TextAnchor)3);
			Small = Make(GUI.skin.label, _body, 13, Dim, (TextAnchor)3);
			Heading = Make(GUI.skin.label, _body, 20, Gold, (TextAnchor)3);
			Title = Make(GUI.skin.label, ((Object)(object)_title != (Object)null) ? _title : _body, 30, Gold, (TextAnchor)4);
			TitleFallback = Make(GUI.skin.label, _body, 28, Gold, (TextAnchor)4);
			Center = Make(GUI.skin.label, _body, 16, Body, (TextAnchor)4);
			Plain = Make(GUI.skin.label, _body, 16, Color.white, (TextAnchor)3);
			PlainRight = Make(GUI.skin.label, _body, 16, Color.white, (TextAnchor)5);
			PlainSmall = Make(GUI.skin.label, _body, 14, Color.white, (TextAnchor)3);
			Wrap = Make(GUI.skin.label, _body, 16, Body, (TextAnchor)0);
			Wrap.wordWrap = true;
			Button = Make(GUI.skin.button, _body, 16, Body, (TextAnchor)4);
			Button.normal.background = Load("button", new Color(0.2f, 0.19f, 0.18f, 1f));
			Button.hover.background = Load("button_hover", new Color(0.3f, 0.28f, 0.24f, 1f));
			Button.active.background = Load("button_active", new Color(0.12f, 0.11f, 0.1f, 1f));
			Button.focused.background = Button.normal.background;
			Button.hover.textColor = GoldBright;
			Button.active.textColor = Gold;
			Button.border = new RectOffset(12, 12, 12, 12);
			Button.padding = new RectOffset(10, 10, 4, 4);
			TabOn = new GUIStyle(Button);
			TabOn.normal.background = Button.hover.background;
			TabOn.normal.textColor = GoldBright;
			TabOn.focused.background = Button.hover.background;
			TabOn.focused.textColor = GoldBright;
			Slot = new GUIStyle(GUI.skin.box)
			{
				border = new RectOffset(14, 14, 14, 14),
				margin = new RectOffset(0, 0, 0, 0),
				padding = new RectOffset(0, 0, 0, 0)
			};
			Slot.normal.background = Load("slot", new Color(0.28f, 0.19f, 0.12f, 0.9f));
			SlotOn = new GUIStyle(Slot);
			SlotOn.normal.background = Load("slot_selected", new Color(0.4f, 0.28f, 0.15f, 0.95f));
			Field = Make(GUI.skin.textField, _body, 16, Body, (TextAnchor)3);
			Field.normal.background = Load("field", new Color(0.13f, 0.09f, 0.07f, 1f));
			Field.focused.background = Field.normal.background;
			Field.hover.background = Field.normal.background;
			Field.focused.textColor = GoldBright;
			Field.border = new RectOffset(14, 14, 14, 14);
			Field.padding = new RectOffset(10, 10, 4, 4);
			Row = new GUIStyle(GUI.skin.button)
			{
				border = new RectOffset(0, 0, 0, 0)
			};
			Row.normal.background = null;
			Row.hover.background = Flat(new Color(1f, 0.85f, 0.5f, 0.1f));
			Row.active.background = Flat(new Color(1f, 0.85f, 0.5f, 0.2f));
			Row.focused.background = null;
			BuildSkin();
		}

		internal static void Fill(Rect rect, Color color)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			//IL_000e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0019: Unknown result type (might be due to invalid IL or missing references)
			if ((int)Event.current.type == 7)
			{
				Color color2 = GUI.color;
				GUI.color = color;
				GUI.DrawTexture(rect, (Texture)(object)Texture2D.whiteTexture);
				GUI.color = color2;
			}
		}

		internal static void Border(Rect rect, Color color, float thickness = 2f)
		{
			//IL_0016: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0039: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_005a: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			Fill(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, ((Rect)(ref rect)).width, thickness), color);
			Fill(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).yMax - thickness, ((Rect)(ref rect)).width, thickness), color);
			Fill(new Rect(((Rect)(ref rect)).x, ((Rect)(ref rect)).y, thickness, ((Rect)(ref rect)).height), color);
			Fill(new Rect(((Rect)(ref rect)).xMax - thickness, ((Rect)(ref rect)).y, thickness, ((Rect)(ref rect)).height), color);
		}

		internal static void Frame(Rect rect)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			//IL_0029: Unknown result type (might be due to invalid IL or missing references)
			//IL_003e: Unknown result type (might be due to invalid IL or missing references)
			//IL_001b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0048: Unknown result type (might be due to invalid IL or missing references)
			//IL_005d: Unknown result type (might be due to invalid IL or missing references)
			//IL_006c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0072: Unknown result type (might be due to invalid IL or missing references)
			//IL_008b: Unknown result type (might be due to invalid IL or missing references)
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ce: 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)
			if ((int)Event.current.type == 7)
			{
				if ((Object)(object)_wood != (Object)null)
				{
					GUI.DrawTexture(rect, (Texture)(object)_wood, (ScaleMode)0);
				}
				else
				{
					Fill(rect, new Color(0.42f, 0.29f, 0.19f, 1f));
				}
				Border(rect, new Color(0.05f, 0.03f, 0.02f, 1f), 3f);
				Border(Inset(rect, 3f), new Color(0.23f, 0.15f, 0.09f, 1f), 7f);
				Border(Inset(rect, 10f), new Color(0.59f, 0.42f, 0.27f, 1f), 1f);
				Border(Inset(rect, 11f), new Color(0.13f, 0.09f, 0.055f, 1f), 1f);
				DrawStud(((Rect)(ref rect)).x + 11f, ((Rect)(ref rect)).y + 11f);
				DrawStud(((Rect)(ref rect)).xMax - 11f, ((Rect)(ref rect)).y + 11f);
				DrawStud(((Rect)(ref rect)).x + 11f, ((Rect)(ref rect)).yMax - 11f);
				DrawStud(((Rect)(ref rect)).xMax - 11f, ((Rect)(ref rect)).yMax - 11f);
			}
		}

		internal static void Divider(float left, float right, float y)
		{
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_000b: Invalid comparison between Unknown and I4
			//IL_005e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0063: Unknown result type (might be due to invalid IL or missing references)
			//IL_007f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0084: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a0: 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_00c7: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cc: Unknown result type (might be due to invalid IL or missing references)
			//IL_00d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Unknown result type (might be due to invalid IL or missing references)
			//IL_010b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0129: Unknown result type (might be due to invalid IL or missing references)
			//IL_012e: Unknown result type (might be due to invalid IL or missing references)
			if ((int)Event.current.type == 7)
			{
				float num = (left + right) / 2f;
				Color color = default(Color);
				((Color)(ref color))..ctor(0.1f, 0.055f, 0.03f, 1f);
				Color color2 = default(Color);
				((Color)(ref color2))..ctor(0.72f, 0.53f, 0.29f, 1f);
				Fill(new Rect(left, y, num - 14f - left, 3f), color);
				Fill(new Rect(left, y - 1f, num - 14f - left, 1f), color2);
				Fill(new Rect(num + 14f, y, right - num - 14f, 3f), color);
				Fill(new Rect(num + 14f, y - 1f, right - num - 14f, 1f), color2);
				Matrix4x4 matrix = GUI.matrix;
				GUIUtility.RotateAroundPivot(45f, new Vector2(num, y + 1f));
				Fill(new Rect(num - 5f, y - 4f, 10f, 10f), color);
				Fill(new Rect(num - 4f, y - 3f, 8f, 8f), color2);
				GUI.matrix = matrix;
			}
		}

		internal static void Shadowed(Rect rect, string text, GUIStyle style)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0005: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_005f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0065: Unknown result type (might be due to invalid IL or missing references)
			Color contentColor = GUI.contentColor;
			GUI.contentColor = new Color(0f, 0f, 0f, 0.75f * contentColor.a);
			GUI.Label(new Rect(((Rect)(ref rect)).x + 1f, ((Rect)(ref rect)).y + 1.5f, ((Rect)(ref rect)).width, ((Rect)(ref rect)).height), text, style);
			GUI.contentColor = contentColor;
			GUI.Label(rect, text, style);
		}

		internal static void DrawTitle(Rect rect, string text)
		{
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			if (!TitleFits.TryGetValue(text, out var value))
			{
				value = (Object)(object)_title != (Object)null;
				int num = 0;
				while (value && num < text.Length)
				{
					value = text[num] == ' ' || _title.HasCharacter(text[num]);
					num++;
				}
				TitleFits[text] = value;
			}
			Shadowed(rect, text, value ? Title : TitleFallback);
		}

		internal static void SlotIcon(Rect rect, Sprite sprite)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			GUI.Box(rect, GUIContent.none, Slot);
			Icon(new Rect(((Rect)(ref rect)).x + 3f, ((Rect)(ref rect)).y + 3f, ((Rect)(ref rect)).width - 6f, ((Rect)(ref rect)).height - 6f), sprite);
		}

		internal static void Icon(Rect rect, Sprite sprite)
		{
			//IL_0087: Unknown result type (might be due to invalid IL or missing references)
			//IL_008c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0095: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0022: Invalid comparison between Unknown and I4
			//IL_00a9: 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_0035: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_007e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0083: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)sprite == (Object)null || (Object)(object)sprite.texture == (Object)null || (int)Event.current.type != 7)
			{
				return;
			}
			if (!IconRects.TryGetValue(sprite, out var value))
			{
				try
				{
					Rect textureRect = sprite.textureRect;
					Texture2D texture = sprite.texture;
					value = new Rect(((Rect)(ref textureRect)).x / (float)((Texture)texture).width, ((Rect)(ref textureRect)).y / (float)((Texture)texture).height, ((Rect)(ref textureRect)).width / (float)((Texture)texture).width, ((Rect)(ref textureRect)).height / (float)((Texture)texture).height);
				}
				catch (Exception)
				{
					value = Rect.zero;
				}
				IconRects[sprite] = value;
			}
			if (((Rect)(ref value)).width > 0f)
			{
				GUI.DrawTextureWithTexCoords(rect, (Texture)(object)sprite.texture, value);
			}
		}

		internal static Color WithAlpha(Color color, float alpha)
		{
			//IL_0000: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			return new Color(color.r, color.g, color.b, alpha);
		}

		private static Rect Inset(Rect rect, float by)
		{
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			return new Rect(((Rect)(ref rect)).x + by, ((Rect)(ref rect)).y + by, ((Rect)(ref rect)).width - 2f * by, ((Rect)(ref rect)).height - 2f * by);
		}

		private static void DrawStud(float x, float y)
		{
			//IL_0025: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_stud != (Object)null)
			{
				GUI.DrawTexture(new Rect(x - 8f, y - 8f, 16f, 16f), (Texture)(object)_stud);
			}
		}

		private static GUIStyle Make(GUIStyle basis, Font font, int size, Color color, TextAnchor anchor)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_0015: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0023: Unknown result type (might be due to invalid IL or missing references)
			//IL_002a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0031: Unknown result type (might be due to invalid IL or missing references)
			//IL_0037: Unknown result type (might be due to invalid IL or missing references)
			//IL_003d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0049: Unknown result type (might be due to invalid IL or missing references)
			//IL_004f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0055: 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_0062: Expected O, but got Unknown
			GUIStyle val = new GUIStyle(basis)
			{
				font = font,
				fontSize = size,
				alignment = anchor,
				wordWrap = false,
				clipping = (TextClipping)1,
				richText = false
			};
			val.normal.textColor = color;
			val.hover.textColor = color;
			val.active.textColor = color;
			val.focused.textColor = color;
			return val;
		}

		private static void BuildSkin()
		{
			//IL_0034: 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_0077: Unknown result type (might be due to invalid IL or missing references)
			//IL_0081: Expected O, but got Unknown
			//IL_009a: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a4: Expected O, but got Unknown
			//IL_00bd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00c7: Expected O, but got Unknown
			//IL_00e0: Unknown result type (might be due to invalid IL or missing references)
			//IL_00ea: Expected O, but got Unknown
			Skin = Object.Instantiate<GUISkin>(GUI.skin);
			((Object)Skin).hideFlags = (HideFlags)61;
			Texture2D texture = Load("scroll_track", new Color(0.1f, 0.07f, 0.05f, 0.8f));
			Texture2D texture2 = Load("scroll_thumb", new Color(0.6f, 0.43f, 0.21f, 1f));
			Skin.verticalScrollbar = Bar(Skin.verticalScrollbar, texture, new RectOffset(5, 5, 5, 5));
			Skin.verticalScrollbarThumb = Bar(Skin.verticalScrollbarThumb, texture2, new RectOffset(5, 5, 6, 6));
			Skin.horizontalScrollbar = Bar(Skin.horizontalScrollbar, texture, new RectOffset(5, 5, 5, 5));
			Skin.horizontalScrollbarThumb = Bar(Skin.horizontalScrollbarThumb, texture2, new RectOffset(6, 6, 5, 5));
			Skin.verticalScrollbarUpButton = Hidden(Skin.verticalScrollbarUpButton);
			Skin.verticalScrollbarDownButton = Hidden(Skin.verticalScrollbarDownButton);
			Skin.horizontalScrollbarLeftButton = Hidden(Skin.horizontalScrollbarLeftButton);
			Skin.horizontalScrollbarRightButton = Hidden(Skin.horizontalScrollbarRightButton);
		}

		private static GUIStyle Bar(GUIStyle basis, Texture2D texture, RectOffset border)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_000d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0012: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Expected O, but got Unknown
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Unknown result type (might be due to invalid IL or missing references)
			//IL_002b: Expected O, but got Unknown
			//IL_002b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0030: Unknown result type (might be due to invalid IL or missing references)
			//IL_003a: Expected O, but got Unknown
			//IL_003a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_0052: 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_006b: Expected O, but got Unknown
			GUIStyle val = new GUIStyle(basis)
			{
				border = border,
				margin = new RectOffset(0, 0, 0, 0),
				padding = new RectOffset(0, 0, 0, 0),
				overflow = new RectOffset(0, 0, 0, 0)
			};
			val.normal.background = texture;
			val.hover.background = texture;
			val.active.background = texture;
			val.focused.background = texture;
			return val;
		}

		private static GUIStyle Hidden(GUIStyle basis)
		{
			//IL_0001: Unknown result type (might be due to invalid IL or missing references)
			//IL_0006: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_001c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0028: Unknown result type (might be due to invalid IL or missing references)
			//IL_0034: Unknown result type (might be due to invalid IL or missing references)
			//IL_0040: Unknown result type (might be due to invalid IL or missing references)
			//IL_004d: Expected O, but got Unknown
			GUIStyle val = new GUIStyle(basis)
			{
				fixedWidth = 0f,
				fixedHeight = 0f
			};
			val.normal.background = null;
			val.hover.background = null;
			val.active.background = null;
			val.focused.background = null;
			return val;
		}

		private static Texture2D Flat(Color color)
		{
			//IL_0004: Unknown result type (might be due to invalid IL or missing references)
			//IL_0009: Unknown result type (might be due to invalid IL or missing references)
			//IL_0011: Unknown result type (might be due to invalid IL or missing references)
			//IL_0014: Unknown result type (might be due to invalid IL or missing references)
			//IL_001a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			Texture2D val = new Texture2D(1, 1, (TextureFormat)4, false)
			{
				hideFlags = (HideFlags)61
			};
			val.SetPixel(0, 0, color);
			val.Apply();
			return val;
		}

		private static Texture2D Load(string name, Color fallback)
		{
			//IL_0013: Unknown result type (might be due to invalid IL or missing references)
			//IL_0018: Unknown result type (might be due to invalid IL or missing references)
			//IL_0021: Expected O, but got Unknown
			//IL_0086: Unknown result type (might be due to invalid IL or missing references)
			try
			{
				if (HudTextures.Base64.TryGetValue(name, out var value))
				{
					Texture2D val = new Texture2D(2, 2, (TextureFormat)4, false)
					{
						hideFlags = (HideFlags)61
					};
					if (ImageConversion.LoadImage(val, Convert.FromBase64String(value)))
					{
						((Texture)val).filterMode = (FilterMode)1;
						((Texture)val).wrapMode = (TextureWrapMode)1;
						return val;
					}
					Object.Destroy((Object)(object)val);
				}
			}
			catch (Exception ex)
			{
				Plugin.Log.LogWarning((object)("HUD texture '" + name + "' could not be decoded (" + ex.Message + "); using a flat colour."));
			}
			return Flat(fallback);
		}

		private static void FindFonts()
		{
			try
			{
				Font[] array = Resources.FindObjectsOfTypeAll<Font>();
				StringBuilder stringBuilder = new StringBuilder();
				Font[] array2 = array;
				foreach (Font val in array2)
				{
					if ((Object)(object)val != (Object)null)
					{
						stringBuilder.Append(((Object)val).name).Append(val.dynamic ? string.Empty : " (static)").Append("; ");
					}
				}
				_body = Pick(array, "AveriaSerif", "Regular", null) ?? Pick(array, "AveriaSerif", null, null);
				_title = Pick(array, null, null, "Norse") ?? Pick(array, "Norse", null, null);
				Plugin.Log.LogInfo((object)string.Format("HUD fonts: text = {0}, title = {1} (fonts in the game: {2})", ((Object)(object)_body != (Object)null) ? ((Object)_body).name : "default", ((Object)(object)_title != (Object)null) ? ((Object)_title).name : "default", stringBuilder));
			}
			catch (Exception ex)
			{
				Plugin.Log.LogWarning((object)("Could not look for the game's fonts (" + ex.Message + "); the HUD uses the default font."));
			}
		}

		private static Font Pick(Font[] fonts, string contains, string and, string exact)
		{
			foreach (Font val in fonts)
			{
				if ((Object)(object)val == (Object)null || !val.dynamic)
				{
					continue;
				}
				string name = ((Object)val).name;
				bool num;
				if (exact == null)
				{
					if (name.IndexOf(contains, StringComparison.OrdinalIgnoreCase) < 0)
					{
						continue;
					}
					if (and == null)
					{
						goto IL_0053;
					}
					num = name.IndexOf(and, StringComparison.OrdinalIgnoreCase) >= 0;
				}
				else
				{
					num = string.Equals(name, exact, StringComparison.OrdinalIgnoreCase);
				}
				if (!num)
				{
					continue;
				}
				goto IL_0053;
				IL_0053:
				if (val.HasCharacter('A') && val.HasCharacter('a'))
				{
					return val;
				}
			}
			return null;
		}
	}
	internal static class HudTextures
	{
		internal static readonly Dictionary<string, string> Base64 = new Dictionary<string, string>
		{
			{
				"wood",
				"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" + "pVr1nIbkHPpxkqP/2Q=="
			},
			{
				"slot",
				"iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAFbklEQVR42u3bTYwcxRUH8P97Vf2xM97ZZXcx/hAoBB+CfOBmICCNgYsVCcilSYADOfiAhJBz" + "TJClZiS0KMqRA4RTolwijziQ2BJCRHJHAoEREcEwQTmADCJGOOxnz85OT9V7HMZjLQu2wwExO64n9aFVfej3q9dddahncPWgLMvMwYMHudPpKHZA5Dn4MJrm" + "8K/OoShwxXemKw1mGUy7DT+61zzn33Ven6bpDRnHxNN+gzCH/rHnXulvy0GAb4e4HADpcFCfuO8n80mjca8larKhHxFoQaGeroL3wwSxQkvxek5E3uwONv/+" + "/KmzHwFADnALkKsCbH3wgdsPHFPgaByZ/aTknYjzIh5jmfxwwkDEkTEREUzl/ap4edn03dMv/+vcyvaK/gbAKPlHDx1obDC/AMbPCLRebla+7PaT/sBFoso0" + "LJCxC4USEUlijaulcTVdi4WZZlW1w0KPv/TWf97bjkDbMY49eNvM+aXqzwS9u3LyvwvL3cZGv4oBgOjS1zHWoaoEALE1bmG2tlafiusiWKqn0S/++NrZs3kO" + "brWGVc5bfhasCkzZ9Pe1xN7pnL/w2YXVuV5VRYZJjCFhImGCjvtlzPB9nRfz+Zfrc+VG1Usi05itpy8uPnHffKsFHU24GSafmXa74/2/f3qUDB9dXu+tfvLF" + "6jwUZJmVCWAiYiLspMswq2FC2RukcWzKPXP1hvTkpn988OnJPAcXBZRGEr955O5Z6+QkGLNvf/jZ7Fq3nzKTYkes/FdZ6FVBzHr7rfvP15K45r1/ZLH95pks" + "y4zNm03TKgrHA3eYrdn/5Vqv2+1VibVGMCFBBDjn+YvlbnrLvoSdp58DOJMBsJ3dhQ4f4iYT++W1bsrMMESKSQpjZKXs1ZzXdSY69OSRI8lD7XbfttuQJ48c" + "SYC1WwbOu26vqllDQsBEARBYq4G3varSWhpdX6+V+wF8ZIdbxKWE2C5UTsR5NRcBJi5UlPqVx640rovV3SMApLFVAJ4ufTOEiQRgBQ1LWy2r+9o+YFy3t99X" + "iAw3S4xrPAJAAAgAASAABIAAEAACQAAIAAEgAASAABAAAkAACAABIAAEgAAQAAJAAAgAASAABIAAEAACQAC4FgA2K0eAXjMYBBBY+BJA33oHUMlERDxhJ0S3" + "NVQYJii0LwNbAgDnOfjFk+9siOrHccS2lkSVep24I3MKILLWp0lCIlia6m9+PKyA081h6SudgZK9rjHVEyjRZM08vBeeqSebScSRgt5/+m/v9PIczK3isABA" + "pPSqF1ldmKm7ehpXXienChSANSx75qdLEbXeySki6OnTTWagJVmWmVb79U8E+Kthmr3xhpll1ck4OUoABk5479z0Wn0qTp3o+wmvvqoKKorCGwDodDrIc7Ap" + "f/xPX7l76ml8fWS5XFrr1YkAZtqRieNi8jfM7ypv3jO34QVG2T/+zIl3/wsMO0Z4S5Wg9adixar5tfeysne+wQdunLtgrfEDJ6w76JNQVRr44TJ30+6ZlQP7" + "5ktR3UXAU8/+5a33siwzo6Yp+nqnaGba7bY//su7DqrKH4wxe6vKleeX1qdW1nu1/sBZ8UrjvH0iQCNrfaOebO6dmy7rtTgVryKK44sn3ngpbzZtqyjcZU+I" + "jxDyh5sLA18tGuZ7mMl4L/2NzYFW3o/tz0EBWGbUkghRZGIRNSL6gSqOL7bfeLfZbNpiS/KXPSK/ta/utw/dcReD7wfRIWbMM1FdVXU8e4OIVLUS1SUVPatE" + "r0SfR6daReHyPOdWqyX/d/O0Xhwbtc7kjzXT/sDvY1ftBls3Om8/Xht7YQtbGm/PtdpF+W0T+p0jyzKTZZnZaatAnud8YvjeV5yorwC3Lay69mn1FQAAAABJ" + "RU5ErkJggg=="
			},
			{
				"slot_selected",
				"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"
			},
			{
				"field",
				"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" + "64vuA2Z9/nea2gqVAAAAAElFTkSuQmCC"
			},
			{
				"stud",
				"iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAADYElEQVR42lWTbWhbZRTH/+e5N7nJvclNlixpU/bSGLuNqXtR55zKilLZJgN1kEz30YFjguDL" + "nIqwLML0w2CK+sUNfAFRTBibSL/4RYpYhKll0HV9mdLarm9Jk9zb9Ca3997n8UPpaM+ncw7/c/jDOT9gTRSzWWlt3X/lZGzwysnY2n6xuF5Dq4nI5xkVCrz4" + "fjYRi/lPt2zncGXRykAAuqrMhTWl3/Xsz4+8d/WWECAiiHsLVoevFY4dEoK+Hhovp24MT+Nu2YTHORJRDbsybdjblXIjIf/Zox+UPi1msyxXKnn3LP1UyD5b" + "OveiOPxwp0hFgk5HJOjt6IjyBzbF+JaY5rXrAWdvOuF9e/ao+PlC9jwA5PPdMgmArn30QsxtsaGvev9O3Lwzx5NRVdrdlUJEC0BiBNOyMTxRxlTZFLqquGde" + "fsK3Ka4d7Hn3x98YAUJjwddGJyvJm3fmvGRUlU48tw+nTvRg3+4M/D4JqXgYB/d0Ip3aQBXDYn0D47Ac71w+D8a+fPURn9Wyn79xe1oQQLu6Unjq0R1o2S7u" + "T3cgHgtjqWmDMcKD6SR0VWEDY7NiwWwdeDxwfAu7r3Onblj21rsVk3RNYVFNwT8TMwgG/Jgt12EYFnyyBMfl0DUFG6Mq1cwmamZTVQP+7bIeBiarYJ7HITGC" + "LDEMDk9gZr4Gw1iC7TiQJQmcr9xOYgxcCHAOEhIxNrHcskJB33wyqolFa1kYDRs+WcLMXBWO60KWGDgXYIzQtB1UTQthVUEkpNiO406x3NulZkhV+h7KtNGy" + "6/GR/8rwOIcaUEBE4BxgjKD4JIxOLqDeaPGuzXHE9MDovyOhYQaAiMmf7NnW7qXiYUyVTfHH4CTqjSYYY/DJDLbj4q+RaYxNLYARuUf2ZygcDFw8dfmyQ8Vi" + "VsrlSt71D7NvGo3mpYs/9HsVw4KuKmxjVCWJMVRNS9QbLUFE7uvHHvPv7Exc/dMt5YButu6Vey8cP182lvJ9A+MYGJtFdbEpOBfQVYW2bY7j0P4M0u3R4q35" + "2um3Lv1SWw+TEEREovfjl55hJN4p160DlboV4UIgogVabRu022rQ91nPme+/WdGvAEVr0fw13y0/XehzAeD3L17ZKjx3u+r3iaZtzzz5xndDALgQggDCKo3/" + "A61Ag9Hsr3ASAAAAAElFTkSuQmCC"
			},
			{
				"lock",
				"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" +