Decompiled source of Painted Signs v0.1.7

Plankwright.dll

Decompiled 2 weeks ago
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Runtime.Versioning;
using System.Text;
using System.Text.RegularExpressions;
using BepInEx;
using HarmonyLib;
using Microsoft.CodeAnalysis;
using TMPro;
using UnityEngine;
using UnityEngine.EventSystems;
using UnityEngine.Events;
using UnityEngine.UI;

[assembly: CompilationRelaxations(8)]
[assembly: RuntimeCompatibility(WrapNonExceptionThrows = true)]
[assembly: Debuggable(DebuggableAttribute.DebuggingModes.IgnoreSymbolStoreSequencePoints)]
[assembly: TargetFramework(".NETFramework,Version=v4.8", FrameworkDisplayName = ".NET Framework 4.8")]
[assembly: AssemblyCompany("Plankwright")]
[assembly: AssemblyConfiguration("Release")]
[assembly: AssemblyFileVersion("1.0.0.0")]
[assembly: AssemblyInformationalVersion("1.0.0")]
[assembly: AssemblyProduct("Plankwright")]
[assembly: AssemblyTitle("Plankwright")]
[assembly: AssemblyVersion("1.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 PlankwrightMod
{
	internal static class FontPick
	{
		internal static int Rank(string name)
		{
			if (string.IsNullOrEmpty(name))
			{
				return 1;
			}
			if (name.IndexOf("Liberation", StringComparison.OrdinalIgnoreCase) >= 0)
			{
				return 0;
			}
			bool flag = name.IndexOf("Bold", StringComparison.OrdinalIgnoreCase) >= 0;
			if (name.IndexOf("AveriaSansLibre", StringComparison.OrdinalIgnoreCase) >= 0)
			{
				if (!flag)
				{
					return 100;
				}
				return 80;
			}
			if (name.IndexOf("Averia", StringComparison.OrdinalIgnoreCase) >= 0)
			{
				if (!flag)
				{
					return 70;
				}
				return 60;
			}
			if (name.IndexOf("Norse", StringComparison.OrdinalIgnoreCase) >= 0)
			{
				return 20;
			}
			return 10;
		}

		internal static string Best(IList<string> names)
		{
			string result = null;
			int num = 0;
			if (names == null)
			{
				return null;
			}
			for (int i = 0; i < names.Count; i++)
			{
				int num2 = Rank(names[i]);
				if (num2 > num)
				{
					num = num2;
					result = names[i];
				}
			}
			return result;
		}
	}
	internal static class Glyphs
	{
		public static readonly string[] Groups = new string[12]
		{
			"Arrows", "Shapes", "Math", "Weather", "Hearts", "Fun", "Type", "Animals", "Places", "Nature",
			"Food", "Things"
		};

		public static readonly string[] Chars = new string[12]
		{
			"←↑→↓↔↕↖↗↘↙↩↪↸↹⇄⇅⇆⇋⇌⇐⇒⇔⇦⇧⇨⇩⇵➡⤴⤵⬅⬆⬇⮕", "⎰⎱─━│┃┄┅┆┇┈┉┊┋┌┍┎┏┐┑┒┓└┕┖┗┘┙┚┛├┝┞┟┠┡┢┣┤┥┦┧┨┩┪┫┬┭┮┯┰┱┲┳┴┵┶┷┸┹┺┻┼┽┾┿╀╁╂╃╄╅╆╇╈╉╊╋╌╍╎╏═║╒╓╔╕╖╗╘╙╚╛╜╝╞╟╠╡╢╣╤╥╦╧╨╩╪╫╬╭╮╯╰╱╲╳╴╵╶╷╸╹╺╻╼╽╾╿▀▁▂▃▄▅▆▇█▉▊▋▌▍▎▏▐░▒▓▔▕▖▗▘▙▚▛▜▝▞▟■□▢▣▤▥▦▧▨▩▪▫▱▲△▶▷▼▽◀◁◆◇◈◉◊○◌◎●◐◑◒◓◢◣◤◥◦◯◻◼◽◾⬚⬛⬜⭕", "¬±×÷϶⁄⁒⁺⁻⁼₊₋₌℘⅀⅁⅂⅃⅄⅋∀∂∃∅∆∇∈∉∊∋∏∑−∓∕√∝∞∟∠∣∥∦∧∨∩∪∫∬∭∮∴∵∶∷∽≃≅≈≌≒≠≡≢≤≥≦≧≪≫≮≯≲≳≶≷⊂⊃⊄⊅⊆⊇⊊⊋⊕⊖⊗⊘⊙⊠⊥⊿⋚⋛⋯♯⦿⧺⧻", "☀☁☂☃☄☉☔⚡⛄⛅⛈⛱❄", "♡♥❣❤\ud83d\udc91\ud83d\udc93\ud83d\udc94\ud83d\udc95\ud83d\udc96\ud83d\udc97\ud83d\udc98\ud83d\udc99\ud83d\udc9a\ud83d\udc9b\ud83d\udc9c\ud83d\udc9d\ud83d\udc9e\ud83d\udc9f\ud83d\udda4\ud83e\udd70\ud83e\udde1\ud83e\ude75\ud83e\ude76\ud83e\ude77\ud83e\udec0\ud83e\udef6", "⌅⌆⌇⌒⌘⌚⌛⌨〈〉⏎⏏⏚⏛⏩⏪⏫⏬⏭⏮⏯⏰⏱⏲⏳⏸⏹⏺★☆☎☏☑☕☘☜☝☞☟☠☢☣☮☹☺♀♁♂♟♠♢♣♤♦♧♨♩♪♫♬♭♮♲♳♴♵♶♷♸♹♺♻♼♽♾♿⚒⚓⚔⚕⚖⚗⚙⚛⚜⚠⚧⚪⚫⚰⚱⚽⚾⛏⛑⛓⛔⛰⛲⛳⛴⛵⛷⛸⛹⛺⛽✂✅✈✉✊✋✌✍✏✒✓✔✖✚✨✳✴✽✿❀❇❌❎❓❔❕❖❗➕➖➗➰➿", "¡¦§\u00a8©«®\u00af°\u00b4¶·\u00b8»¿\u0375;\u0384\u0385·҂।॥॰᳓\u1fbd\u1fbf\u1fc0\u1fc1\u1fcd\u1fce\u1fcf\u1fdd\u1fde\u1fdf\u1fed\u1fee\u1fef\u1ffd\u1ffe‐‑‒–—―‖‗‘’‚‛“”„‟†‡•‣․‥…‧‰‱′″‴‵‶‷‸‹›※‼‽‾\u203f\u2040⁁⁂⁃⁅⁆⁇⁈⁉⁋⁌⁍⁎⁏⁐⁑⁓\u2054⁕⁖⁗⁘⁙⁚⁛⁜⁝⁞⁽⁾₍₎℀℁℃℄℅℆℈℉℔№℗℞℟℠℡™℣℥℧℩℮℺℻⅊⅌⅍⅏␣⒜⒝⒞⒟⒠⒡⒢⒣⒤⒥⒦⒧⒨⒩⒪⒫⒬⒭⒮⒯⒰⒱⒲⒳⒴⒵ⒶⒷⒸⒹⒺⒻⒼⒽⒾⒿⓀⓁⓂⓃⓄⓅⓆⓇⓈⓉⓊⓋⓌⓍⓎⓏⓐⓑⓒⓓⓔⓕⓖⓗⓘⓙⓚⓛⓜⓝⓞⓟⓠⓡⓢⓣⓤⓥⓦⓧⓨⓩ⭐⸀⸁⸂⸃⸄⸅⸆⸇⸈⸉⸊⸋⸌⸍⸎⸏⸐⸑⸒⸓⸔⸕⸖⸗⸘⸙⸚⸛⸜⸝⸞⸟⸠⸡⸢⸣⸤⸥⸦⸧⸨⸩⸪⸫⸬⸭⸮⸰⸱⸲⸳⸴⸵⸶⸷⸸⸹⸺⸻⸼⸽⸾⸿⹀⹁⹂⹃⹄⹅⹆⹇⹈⹉⹊⹋⹌⹍⹎⹏", "\ud83d\udc00\ud83d\udc01\ud83d\udc02\ud83d\udc03\ud83d\udc04\ud83d\udc05\ud83d\udc06\ud83d\udc07\ud83d\udc08\ud83d\udc09\ud83d\udc0a\ud83d\udc0b\ud83d\udc0c\ud83d\udc0d\ud83d\udc0e\ud83d\udc0f\ud83d\udc10\ud83d\udc11\ud83d\udc12\ud83d\udc13\ud83d\udc14\ud83d\udc15\ud83d\udc16\ud83d\udc17\ud83d\udc18\ud83d\udc19\ud83d\udc1a\ud83d\udc1b\ud83d\udc1c\ud83d\udc1d\ud83d\udc1e\ud83d\udc1f\ud83d\udc20\ud83d\udc21\ud83d\udc22\ud83d\udc23\ud83d\udc24\ud83d\udc25\ud83d\udc26\ud83d\udc27\ud83d\udc28\ud83d\udc29\ud83d\udc2a\ud83d\udc2b\ud83d\udc2c\ud83d\udc2d\ud83d\udc2e\ud83d\udc2f\ud83d\udc30\ud83d\udc31\ud83d\udc32\ud83d\udc33\ud83d\udc34\ud83d\udc35\ud83d\udc36\ud83d\udc37\ud83d\udc38\ud83d\udc39\ud83d\udc3a\ud83d\udc3b\ud83d\udc3c\ud83d\udc3d\ud83d\udc3e\ud83d\udc3f\ud83e\udd80\ud83e\udd81\ud83e\udd82\ud83e\udd83\ud83e\udd84\ud83e\udd85\ud83e\udd86\ud83e\udd87\ud83e\udd88\ud83e\udd89\ud83e\udd8a\ud83e\udd8b\ud83e\udd8c\ud83e\udd8d\ud83e\udd8e\ud83e\udd8f\ud83e\udd90\ud83e\udd91\ud83e\udd92\ud83e\udd93\ud83e\udd94\ud83e\udd95\ud83e\udd96\ud83e\udd97\ud83e\udd98\ud83e\udd99\ud83e\udd9a\ud83e\udd9b\ud83e\udd9c\ud83e\udd9d\ud83e\udd9e\ud83e\udd9f\ud83e\udda0\ud83e\udda1\ud83e\udda2\ud83e\udda3\ud83e\udda4\ud83e\udda5\ud83e\udda6\ud83e\udda7\ud83e\udda8\ud83e\udda9\ud83e\uddaa\ud83e\uddab\ud83e\uddac\ud83e\uddad\ud83e\uddae", "\ud83c\udfe0\ud83c\udfe1\ud83c\udfe2\ud83c\udfe3\ud83c\udfe4\ud83c\udfe5\ud83c\udfe6\ud83c\udfe7\ud83c\udfe8\ud83c\udfe9\ud83c\udfea\ud83c\udfeb\ud83c\udfec\ud83c\udfed\ud83c\udfee\ud83c\udfef\ud83c\udff0\ud83d\ude80\ud83d\ude81\ud83d\ude82\ud83d\ude83\ud83d\ude84\ud83d\ude85\ud83d\ude86\ud83d\ude87\ud83d\ude88\ud83d\ude89\ud83d\ude8a\ud83d\ude8b\ud83d\ude8c\ud83d\ude8d\ud83d\ude8e\ud83d\ude8f\ud83d\ude90\ud83d\ude91\ud83d\ude92\ud83d\ude93\ud83d\ude94\ud83d\ude95\ud83d\ude96\ud83d\ude97\ud83d\ude98\ud83d\ude99\ud83d\ude9a\ud83d\ude9b\ud83d\ude9c\ud83d\ude9d\ud83d\ude9e\ud83d\ude9f\ud83d\udea0\ud83d\udea1\ud83d\udea2\ud83d\udea3\ud83d\udea4\ud83d\udea5\ud83d\udea6\ud83d\udea7\ud83d\udea8\ud83d\udea9\ud83d\udeaa\ud83d\udeab\ud83d\udeac\ud83d\udead\ud83d\udeae\ud83d\udeaf\ud83d\udeb0\ud83d\udeb1\ud83d\udeb2\ud83d\udeb3\ud83d\udeb4\ud83d\udeb5\ud83d\udeb6\ud83d\udeb7\ud83d\udeb8\ud83d\udeb9\ud83d\udeba\ud83d\udebb\ud83d\udebc\ud83d\udebd\ud83d\udebe\ud83d\udebf\ud83d\udec0\ud83d\udec1\ud83d\udec2\ud83d\udec3\ud83d\udec4\ud83d\udec5\ud83d\udecb\ud83d\udecc\ud83d\udecd\ud83d\udece\ud83d\udecf\ud83d\uded0\ud83d\uded1\ud83d\uded2\ud83d\uded5\ud83d\uded6\ud83d\uded7\ud83d\udedc\ud83d\udedd\ud83d\udede\ud83d\udedf\ud83d\udee0\ud83d\udee1\ud83d\udee2\ud83d\udee3\ud83d\udee4\ud83d\udee5\ud83d\udee9\ud83d\udeeb\ud83d\udeec\ud83d\udef0\ud83d\udef3\ud83d\udef4\ud83d\udef5\ud83d\udef6\ud83d\udef7\ud83d\udef9\ud83d\udefa\ud83d\udefb\ud83d\udefc", "\ud83c\udf00\ud83c\udf01\ud83c\udf02\ud83c\udf03\ud83c\udf04\ud83c\udf05\ud83c\udf06\ud83c\udf07\ud83c\udf08\ud83c\udf09\ud83c\udf0a\ud83c\udf0b\ud83c\udf0c\ud83c\udf0d\ud83c\udf0e\ud83c\udf0f\ud83c\udf10\ud83c\udf11\ud83c\udf12\ud83c\udf13\ud83c\udf14\ud83c\udf15\ud83c\udf16\ud83c\udf17\ud83c\udf18\ud83c\udf19\ud83c\udf1a\ud83c\udf1b\ud83c\udf1c\ud83c\udf1d\ud83c\udf1e\ud83c\udf1f\ud83c\udf20\ud83c\udf21\ud83c\udf24\ud83c\udf25\ud83c\udf26\ud83c\udf27\ud83c\udf28\ud83c\udf29\ud83c\udf2a\ud83c\udf2b\ud83c\udf2c\ud83c\udf2d\ud83c\udf2e\ud83c\udf2f\ud83c\udf30\ud83c\udf31\ud83c\udf32\ud83c\udf33\ud83c\udf34\ud83c\udf35\ud83c\udf36\ud83c\udf37\ud83c\udf38\ud83c\udf39\ud83c\udf3a\ud83c\udf3b\ud83c\udf3c\ud83c\udf3d\ud83c\udf3e\ud83c\udf3f\ud83c\udf40\ud83c\udf41\ud83c\udf42\ud83c\udf43\ud83c\udf44",
			"\ud83c\udf45\ud83c\udf46\ud83c\udf47\ud83c\udf48\ud83c\udf49\ud83c\udf4a\ud83c\udf4b\ud83c\udf4c\ud83c\udf4d\ud83c\udf4e\ud83c\udf4f\ud83c\udf50\ud83c\udf51\ud83c\udf52\ud83c\udf53\ud83c\udf54\ud83c\udf55\ud83c\udf56\ud83c\udf57\ud83c\udf58\ud83c\udf59\ud83c\udf5a\ud83c\udf5b\ud83c\udf5c\ud83c\udf5d\ud83c\udf5e\ud83c\udf5f\ud83c\udf60\ud83c\udf61\ud83c\udf62\ud83c\udf63\ud83c\udf64\ud83c\udf65\ud83c\udf66\ud83c\udf67\ud83c\udf68\ud83c\udf69\ud83c\udf6a\ud83c\udf6b\ud83c\udf6c\ud83c\udf6d\ud83c\udf6e\ud83c\udf6f\ud83c\udf70\ud83c\udf71\ud83c\udf72\ud83c\udf73\ud83c\udf74\ud83c\udf75\ud83c\udf76\ud83c\udf77\ud83c\udf78\ud83c\udf79\ud83c\udf7a\ud83c\udf7b\ud83c\udf7c\ud83c\udf7d\ud83c\udf7e\ud83c\udf7f\ud83e\udd50\ud83e\udd51\ud83e\udd52\ud83e\udd53\ud83e\udd54\ud83e\udd55\ud83e\udd56\ud83e\udd57\ud83e\udd58\ud83e\udd59\ud83e\udd5a\ud83e\udd5b\ud83e\udd5c\ud83e\udd5d\ud83e\udd5e\ud83e\udd5f\ud83e\udd60\ud83e\udd61\ud83e\udd62\ud83e\udd63\ud83e\udd64\ud83e\udd65\ud83e\udd66\ud83e\udd67\ud83e\udd68\ud83e\udd69\ud83e\udd6a\ud83e\udd6b\ud83e\udd6c\ud83e\udd6d\ud83e\udd6e\ud83e\udd6f", "\ud83c\udf80\ud83c\udf81\ud83c\udf82\ud83c\udf83\ud83c\udf84\ud83c\udf85\ud83c\udf86\ud83c\udf87\ud83c\udf88\ud83c\udf89\ud83c\udf8a\ud83c\udf8b\ud83c\udf8c\ud83c\udf8d\ud83c\udf8e\ud83c\udf8f\ud83c\udf90\ud83c\udf91\ud83c\udf92\ud83c\udf93\ud83c\udf96\ud83c\udf97\ud83c\udf99\ud83c\udf9a\ud83c\udf9b\ud83c\udf9e\ud83c\udf9f\ud83c\udfa0\ud83c\udfa1\ud83c\udfa2\ud83c\udfa3\ud83c\udfa4\ud83c\udfa5\ud83c\udfa6\ud83c\udfa7\ud83c\udfa8\ud83c\udfa9\ud83c\udfaa\ud83c\udfab\ud83c\udfac\ud83c\udfad\ud83c\udfae\ud83c\udfaf\ud83c\udfb0\ud83c\udfb1\ud83c\udfb2\ud83c\udfb3\ud83c\udfb5\ud83c\udfb6\ud83c\udfb7\ud83c\udfb8\ud83c\udfb9\ud83c\udfba\ud83c\udfbb\ud83c\udfbc\ud83c\udfbd\ud83c\udfbe\ud83c\udfbf\ud83c\udfc0\ud83c\udfc1\ud83c\udfc2\ud83c\udfc3\ud83c\udfc4\ud83c\udfc5\ud83c\udfc6\ud83c\udfc7\ud83c\udfc8\ud83c\udfc9\ud83c\udfca\ud83c\udfcb\ud83c\udfcc\ud83c\udfcd\ud83c\udfce\ud83c\udfcf\ud83c\udfd0\ud83c\udfd1\ud83c\udfd2\ud83c\udfd3\ud83c\udfd4\ud83c\udfd5\ud83c\udfd6\ud83c\udfd7\ud83c\udfd8\ud83c\udfd9\ud83c\udfda\ud83c\udfdb\ud83c\udfdc\ud83c\udfdd\ud83c\udfde\ud83c\udfdf\ud83c\udff5\ud83c\udff7\ud83c\udff8\ud83c\udff9\ud83c\udffa\ud83d\udc88\ud83d\udc89\ud83d\udc8a\ud83d\udc8b\ud83d\udc8c\ud83d\udc8d\ud83d\udc8e\ud83d\udc8f\ud83d\udc90\ud83d\udc92\ud83d\udca0\ud83d\udca1\ud83d\udca2\ud83d\udca3\ud83d\udca4\ud83d\udca5\ud83d\udca6\ud83d\udca7\ud83d\udca8\ud83d\udca9\ud83d\udcaa\ud83d\udcab\ud83d\udcac\ud83d\udcad\ud83d\udcae\ud83d\udcaf\ud83d\udcb0\ud83d\udcb1\ud83d\udcb2\ud83d\udcb3\ud83d\udcb4\ud83d\udcb5\ud83d\udcb6\ud83d\udcb7\ud83d\udcb8\ud83d\udcb9\ud83d\udcba\ud83d\udcbb\ud83d\udcbc\ud83d\udcbd\ud83d\udcbe\ud83d\udcbf\ud83d\udcc0\ud83d\udcc1\ud83d\udcc2\ud83d\udcc3\ud83d\udcc4\ud83d\udcc5\ud83d\udcc6\ud83d\udcc7\ud83d\udcc8\ud83d\udcc9\ud83d\udcca\ud83d\udccb\ud83d\udccc\ud83d\udccd\ud83d\udcce\ud83d\udccf\ud83d\udcd0\ud83d\udcd1\ud83d\udcd2\ud83d\udcd3\ud83d\udcd4\ud83d\udcd5\ud83d\udcd6\ud83d\udcd7\ud83d\udcd8\ud83d\udcd9\ud83d\udcda\ud83d\udcdb\ud83d\udcdc\ud83d\udcdd\ud83d\udcde\ud83d\udcdf\ud83d\udce0\ud83d\udce1\ud83d\udce2\ud83d\udce3\ud83d\udce4\ud83d\udce5\ud83d\udce6\ud83d\udce7\ud83d\udce8\ud83d\udce9\ud83d\udcea\ud83d\udceb\ud83d\udcec\ud83d\udced\ud83d\udcee\ud83d\udcef\ud83d\udcf0\ud83d\udcf1\ud83d\udcf2\ud83d\udcf3\ud83d\udcf4\ud83d\udcf5\ud83d\udcf6\ud83d\udcf7\ud83d\udcf8\ud83d\udcf9\ud83d\udcfa\ud83d\udcfb\ud83d\udcfc\ud83d\udcfd\ud83d\udcff\ud83d\udd00\ud83d\udd01\ud83d\udd02\ud83d\udd03\ud83d\udd04\ud83d\udd05\ud83d\udd06\ud83d\udd07\ud83d\udd08\ud83d\udd09\ud83d\udd0a\ud83d\udd0b\ud83d\udd0c\ud83d\udd0f\ud83d\udd10\ud83d\udd11\ud83d\udd12\ud83d\udd13\ud83d\udd14\ud83d\udd15\ud83d\udd16\ud83d\udd17\ud83d\udd18\ud83d\udd19\ud83d\udd1a\ud83d\udd1b\ud83d\udd1c\ud83d\udd1d\ud83d\udd1e\ud83d\udd1f\ud83d\udd20\ud83d\udd21\ud83d\udd22\ud83d\udd23\ud83d\udd24\ud83d\udd25\ud83d\udd26\ud83d\udd27\ud83d\udd28\ud83d\udd29\ud83d\udd2a\ud83d\udd2b\ud83d\udd2c\ud83d\udd2d\ud83d\udd2e\ud83d\udd2f\ud83d\udd30\ud83d\udd31\ud83d\udd32\ud83d\udd33\ud83d\udd34\ud83d\udd35\ud83d\udd36\ud83d\udd37\ud83d\udd38\ud83d\udd39\ud83d\udd3a\ud83d\udd3b\ud83d\udd3c\ud83d\udd3d\ud83d\udd49\ud83d\udd4a\ud83d\udd4b\ud83d\udd4c\ud83d\udd4d\ud83d\udd4e\ud83d\udd50\ud83d\udd51\ud83d\udd52\ud83d\udd53\ud83d\udd54\ud83d\udd55\ud83d\udd56\ud83d\udd57\ud83d\udd58\ud83d\udd59\ud83d\udd5a\ud83d\udd5b\ud83d\udd5c\ud83d\udd5d\ud83d\udd5e\ud83d\udd5f\ud83d\udd60\ud83d\udd61\ud83d\udd62\ud83d\udd63\ud83d\udd64\ud83d\udd65\ud83d\udd66\ud83d\udd67\ud83d\udd6f\ud83d\udd70\ud83d\udd73\ud83d\udd74\ud83d\udd75\ud83d\udd76\ud83d\udd77\ud83d\udd78\ud83d\udd79\ud83d\udd7a\ud83d\udd87\ud83d\udd8a\ud83d\udd8b\ud83d\udd8c\ud83d\udd8d\ud83d\udd90\ud83d\udd95\ud83d\udd96\ud83d\udda5\ud83d\udda8\ud83d\uddb1\ud83d\uddb2\ud83d\uddbc\ud83d\uddc2\ud83d\uddc3\ud83d\uddc4\ud83d\uddd1\ud83d\uddd2\ud83d\uddd3\ud83d\udddc\ud83d\udddd\ud83d\uddde\ud83d\udde1\ud83d\udde3\ud83d\udde8\ud83d\uddef\ud83d\uddf3\ud83d\uddfa\ud83d\uddfb\ud83d\uddfc\ud83d\uddfd\ud83d\uddfe\ud83d\uddff\ud83d\udfe0\ud83d\udfe1\ud83d\udfe2\ud83d\udfe3\ud83d\udfe4\ud83d\udfe5\ud83d\udfe6\ud83d\udfe7\ud83d\udfe8\ud83d\udfe9\ud83d\udfea\ud83d\udfeb\ud83d\udff0\ud83e\udd20\ud83e\udd21\ud83e\udd22\ud83e\udd23\ud83e\udd24\ud83e\udd26\ud83e\udd27\ud83e\udd28\ud83e\udd29\ud83e\udd2a\ud83e\udd2b\ud83e\udd2c\ud83e\udd2d\ud83e\udd2e\ud83e\udd2f\ud83e\udd30\ud83e\udd31\ud83e\udd32\ud83e\udd33\ud83e\udd34\ud83e\udd35\ud83e\udd36\ud83e\udd37\ud83e\udd38\ud83e\udd39\ud83e\udd3a\ud83e\udd3c\ud83e\udd3d\ud83e\udd3e\ud83e\udd3f\ud83e\udd40\ud83e\udd41\ud83e\udd42\ud83e\udd43\ud83e\udd44\ud83e\udd45\ud83e\udd47\ud83e\udd48\ud83e\udd49\ud83e\udd4a\ud83e\udd4b\ud83e\udd4c\ud83e\udd4d\ud83e\udd4e\ud83e\udd71\ud83e\udd72\ud83e\udd73\ud83e\udd74\ud83e\udd75\ud83e\udd76\ud83e\udd77\ud83e\udd78\ud83e\udd79\ud83e\udd7a\ud83e\udd7b\ud83e\udd7c\ud83e\udd7d\ud83e\udd7e\ud83e\udd7f\ud83e\uddaf\ud83e\udde0\ud83e\udde2\ud83e\udde3\ud83e\udde4\ud83e\udde5\ud83e\udde6\ud83e\udde7\ud83e\udde8\ud83e\udde9\ud83e\uddea\ud83e\uddeb\ud83e\uddec\ud83e\udded\ud83e\uddee\ud83e\uddef\ud83e\uddf0\ud83e\uddf1\ud83e\uddf2\ud83e\uddf3\ud83e\uddf4\ud83e\uddf5\ud83e\uddf6\ud83e\uddf7\ud83e\uddf8\ud83e\uddf9\ud83e\uddfa\ud83e\uddfb\ud83e\uddfc\ud83e\uddfd\ud83e\uddfe\ud83e\uddff\ud83e\ude70\ud83e\ude71\ud83e\ude72\ud83e\ude73\ud83e\ude74\ud83e\ude78\ud83e\ude79\ud83e\ude7a\ud83e\ude7b\ud83e\ude7c\ud83e\ude80\ud83e\ude81\ud83e\ude82\ud83e\ude83\ud83e\ude84\ud83e\ude85\ud83e\ude86\ud83e\ude87\ud83e\ude88\ud83e\ude90\ud83e\ude91\ud83e\ude92\ud83e\ude93\ud83e\ude94\ud83e\ude95\ud83e\ude96\ud83e\ude97\ud83e\ude98\ud83e\ude99\ud83e\ude9a\ud83e\ude9b\ud83e\ude9c\ud83e\ude9d\ud83e\ude9e\ud83e\ude9f\ud83e\udea0\ud83e\udea1\ud83e\udea2\ud83e\udea3\ud83e\udea4\ud83e\udea5\ud83e\udea6\ud83e\udea7\ud83e\udea8\ud83e\udea9\ud83e\udeaa\ud83e\udeab\ud83e\udeac\ud83e\udead\ud83e\udeae\ud83e\udeaf\ud83e\udeb0\ud83e\udeb1\ud83e\udeb2\ud83e\udeb3\ud83e\udeb4\ud83e\udeb5\ud83e\udeb6\ud83e\udeb7\ud83e\udeb8\ud83e\udeb9\ud83e\udeba\ud83e\udebb\ud83e\udebc\ud83e\udebd\ud83e\udebf\ud83e\udec1\ud83e\udec2\ud83e\udec3\ud83e\udec4\ud83e\udec5\ud83e\udece\ud83e\udecf\ud83e\uded0\ud83e\uded1\ud83e\uded2\ud83e\uded3\ud83e\uded4\ud83e\uded5\ud83e\uded6\ud83e\uded7\ud83e\uded8\ud83e\uded9\ud83e\udeda\ud83e\udedb\ud83e\udee0\ud83e\udee1\ud83e\udee2\ud83e\udee3\ud83e\udee4\ud83e\udee5\ud83e\udee6\ud83e\udee7\ud83e\udee8\ud83e\udef0\ud83e\udef1\ud83e\udef2\ud83e\udef3\ud83e\udef4\ud83e\udef5\ud83e\udef7\ud83e\udef8"
		};

		public static readonly string[][] Names = new string[12][]
		{
			new string[34]
			{
				"LEFTWARDS ARROW", "UPWARDS ARROW", "RIGHTWARDS ARROW", "DOWNWARDS ARROW", "LEFT RIGHT ARROW", "UP DOWN ARROW", "NORTH WEST ARROW", "NORTH EAST ARROW", "SOUTH EAST ARROW", "SOUTH WEST ARROW",
				"LEFTWARDS ARROW WITH HOOK", "RIGHTWARDS ARROW WITH HOOK", "NORTH WEST ARROW TO LONG BAR", "LEFTWARDS ARROW TO BAR OVER RIGHTWARDS ARROW TO BAR", "RIGHTWARDS ARROW OVER LEFTWARDS ARROW", "UPWARDS ARROW LEFTWARDS OF DOWNWARDS ARROW", "LEFTWARDS ARROW OVER RIGHTWARDS ARROW", "LEFTWARDS HARPOON OVER RIGHTWARDS HARPOON", "RIGHTWARDS HARPOON OVER LEFTWARDS HARPOON", "LEFTWARDS DOUBLE ARROW",
				"RIGHTWARDS DOUBLE ARROW", "LEFT RIGHT DOUBLE ARROW", "LEFTWARDS WHITE ARROW", "UPWARDS WHITE ARROW", "RIGHTWARDS WHITE ARROW", "DOWNWARDS WHITE ARROW", "DOWNWARDS ARROW LEFTWARDS OF UPWARDS ARROW", "BLACK RIGHTWARDS ARROW", "ARROW POINTING RIGHTWARDS THEN CURVING UPWARDS", "ARROW POINTING RIGHTWARDS THEN CURVING DOWNWARDS",
				"LEFTWARDS BLACK ARROW", "UPWARDS BLACK ARROW", "DOWNWARDS BLACK ARROW", "RIGHTWARDS BLACK ARROW"
			},
			new string[210]
			{
				"UPPER LEFT OR LOWER RIGHT CURLY BRACKET SECTION", "UPPER RIGHT OR LOWER LEFT CURLY BRACKET SECTION", "BOX DRAWINGS LIGHT HORIZONTAL", "BOX DRAWINGS HEAVY HORIZONTAL", "BOX DRAWINGS LIGHT VERTICAL", "BOX DRAWINGS HEAVY VERTICAL", "BOX DRAWINGS LIGHT TRIPLE DASH HORIZONTAL", "BOX DRAWINGS HEAVY TRIPLE DASH HORIZONTAL", "BOX DRAWINGS LIGHT TRIPLE DASH VERTICAL", "BOX DRAWINGS HEAVY TRIPLE DASH VERTICAL",
				"BOX DRAWINGS LIGHT QUADRUPLE DASH HORIZONTAL", "BOX DRAWINGS HEAVY QUADRUPLE DASH HORIZONTAL", "BOX DRAWINGS LIGHT QUADRUPLE DASH VERTICAL", "BOX DRAWINGS HEAVY QUADRUPLE DASH VERTICAL", "BOX DRAWINGS LIGHT DOWN AND RIGHT", "BOX DRAWINGS DOWN LIGHT AND RIGHT HEAVY", "BOX DRAWINGS DOWN HEAVY AND RIGHT LIGHT", "BOX DRAWINGS HEAVY DOWN AND RIGHT", "BOX DRAWINGS LIGHT DOWN AND LEFT", "BOX DRAWINGS DOWN LIGHT AND LEFT HEAVY",
				"BOX DRAWINGS DOWN HEAVY AND LEFT LIGHT", "BOX DRAWINGS HEAVY DOWN AND LEFT", "BOX DRAWINGS LIGHT UP AND RIGHT", "BOX DRAWINGS UP LIGHT AND RIGHT HEAVY", "BOX DRAWINGS UP HEAVY AND RIGHT LIGHT", "BOX DRAWINGS HEAVY UP AND RIGHT", "BOX DRAWINGS LIGHT UP AND LEFT", "BOX DRAWINGS UP LIGHT AND LEFT HEAVY", "BOX DRAWINGS UP HEAVY AND LEFT LIGHT", "BOX DRAWINGS HEAVY UP AND LEFT",
				"BOX DRAWINGS LIGHT VERTICAL AND RIGHT", "BOX DRAWINGS VERTICAL LIGHT AND RIGHT HEAVY", "BOX DRAWINGS UP HEAVY AND RIGHT DOWN LIGHT", "BOX DRAWINGS DOWN HEAVY AND RIGHT UP LIGHT", "BOX DRAWINGS VERTICAL HEAVY AND RIGHT LIGHT", "BOX DRAWINGS DOWN LIGHT AND RIGHT UP HEAVY", "BOX DRAWINGS UP LIGHT AND RIGHT DOWN HEAVY", "BOX DRAWINGS HEAVY VERTICAL AND RIGHT", "BOX DRAWINGS LIGHT VERTICAL AND LEFT", "BOX DRAWINGS VERTICAL LIGHT AND LEFT HEAVY",
				"BOX DRAWINGS UP HEAVY AND LEFT DOWN LIGHT", "BOX DRAWINGS DOWN HEAVY AND LEFT UP LIGHT", "BOX DRAWINGS VERTICAL HEAVY AND LEFT LIGHT", "BOX DRAWINGS DOWN LIGHT AND LEFT UP HEAVY", "BOX DRAWINGS UP LIGHT AND LEFT DOWN HEAVY", "BOX DRAWINGS HEAVY VERTICAL AND LEFT", "BOX DRAWINGS LIGHT DOWN AND HORIZONTAL", "BOX DRAWINGS LEFT HEAVY AND RIGHT DOWN LIGHT", "BOX DRAWINGS RIGHT HEAVY AND LEFT DOWN LIGHT", "BOX DRAWINGS DOWN LIGHT AND HORIZONTAL HEAVY",
				"BOX DRAWINGS DOWN HEAVY AND HORIZONTAL LIGHT", "BOX DRAWINGS RIGHT LIGHT AND LEFT DOWN HEAVY", "BOX DRAWINGS LEFT LIGHT AND RIGHT DOWN HEAVY", "BOX DRAWINGS HEAVY DOWN AND HORIZONTAL", "BOX DRAWINGS LIGHT UP AND HORIZONTAL", "BOX DRAWINGS LEFT HEAVY AND RIGHT UP LIGHT", "BOX DRAWINGS RIGHT HEAVY AND LEFT UP LIGHT", "BOX DRAWINGS UP LIGHT AND HORIZONTAL HEAVY", "BOX DRAWINGS UP HEAVY AND HORIZONTAL LIGHT", "BOX DRAWINGS RIGHT LIGHT AND LEFT UP HEAVY",
				"BOX DRAWINGS LEFT LIGHT AND RIGHT UP HEAVY", "BOX DRAWINGS HEAVY UP AND HORIZONTAL", "BOX DRAWINGS LIGHT VERTICAL AND HORIZONTAL", "BOX DRAWINGS LEFT HEAVY AND RIGHT VERTICAL LIGHT", "BOX DRAWINGS RIGHT HEAVY AND LEFT VERTICAL LIGHT", "BOX DRAWINGS VERTICAL LIGHT AND HORIZONTAL HEAVY", "BOX DRAWINGS UP HEAVY AND DOWN HORIZONTAL LIGHT", "BOX DRAWINGS DOWN HEAVY AND UP HORIZONTAL LIGHT", "BOX DRAWINGS VERTICAL HEAVY AND HORIZONTAL LIGHT", "BOX DRAWINGS LEFT UP HEAVY AND RIGHT DOWN LIGHT",
				"BOX DRAWINGS RIGHT UP HEAVY AND LEFT DOWN LIGHT", "BOX DRAWINGS LEFT DOWN HEAVY AND RIGHT UP LIGHT", "BOX DRAWINGS RIGHT DOWN HEAVY AND LEFT UP LIGHT", "BOX DRAWINGS DOWN LIGHT AND UP HORIZONTAL HEAVY", "BOX DRAWINGS UP LIGHT AND DOWN HORIZONTAL HEAVY", "BOX DRAWINGS RIGHT LIGHT AND LEFT VERTICAL HEAVY", "BOX DRAWINGS LEFT LIGHT AND RIGHT VERTICAL HEAVY", "BOX DRAWINGS HEAVY VERTICAL AND HORIZONTAL", "BOX DRAWINGS LIGHT DOUBLE DASH HORIZONTAL", "BOX DRAWINGS HEAVY DOUBLE DASH HORIZONTAL",
				"BOX DRAWINGS LIGHT DOUBLE DASH VERTICAL", "BOX DRAWINGS HEAVY DOUBLE DASH VERTICAL", "BOX DRAWINGS DOUBLE HORIZONTAL", "BOX DRAWINGS DOUBLE VERTICAL", "BOX DRAWINGS DOWN SINGLE AND RIGHT DOUBLE", "BOX DRAWINGS DOWN DOUBLE AND RIGHT SINGLE", "BOX DRAWINGS DOUBLE DOWN AND RIGHT", "BOX DRAWINGS DOWN SINGLE AND LEFT DOUBLE", "BOX DRAWINGS DOWN DOUBLE AND LEFT SINGLE", "BOX DRAWINGS DOUBLE DOWN AND LEFT",
				"BOX DRAWINGS UP SINGLE AND RIGHT DOUBLE", "BOX DRAWINGS UP DOUBLE AND RIGHT SINGLE", "BOX DRAWINGS DOUBLE UP AND RIGHT", "BOX DRAWINGS UP SINGLE AND LEFT DOUBLE", "BOX DRAWINGS UP DOUBLE AND LEFT SINGLE", "BOX DRAWINGS DOUBLE UP AND LEFT", "BOX DRAWINGS VERTICAL SINGLE AND RIGHT DOUBLE", "BOX DRAWINGS VERTICAL DOUBLE AND RIGHT SINGLE", "BOX DRAWINGS DOUBLE VERTICAL AND RIGHT", "BOX DRAWINGS VERTICAL SINGLE AND LEFT DOUBLE",
				"BOX DRAWINGS VERTICAL DOUBLE AND LEFT SINGLE", "BOX DRAWINGS DOUBLE VERTICAL AND LEFT", "BOX DRAWINGS DOWN SINGLE AND HORIZONTAL DOUBLE", "BOX DRAWINGS DOWN DOUBLE AND HORIZONTAL SINGLE", "BOX DRAWINGS DOUBLE DOWN AND HORIZONTAL", "BOX DRAWINGS UP SINGLE AND HORIZONTAL DOUBLE", "BOX DRAWINGS UP DOUBLE AND HORIZONTAL SINGLE", "BOX DRAWINGS DOUBLE UP AND HORIZONTAL", "BOX DRAWINGS VERTICAL SINGLE AND HORIZONTAL DOUBLE", "BOX DRAWINGS VERTICAL DOUBLE AND HORIZONTAL SINGLE",
				"BOX DRAWINGS DOUBLE VERTICAL AND HORIZONTAL", "BOX DRAWINGS LIGHT ARC DOWN AND RIGHT", "BOX DRAWINGS LIGHT ARC DOWN AND LEFT", "BOX DRAWINGS LIGHT ARC UP AND LEFT", "BOX DRAWINGS LIGHT ARC UP AND RIGHT", "BOX DRAWINGS LIGHT DIAGONAL UPPER RIGHT TO LOWER LEFT", "BOX DRAWINGS LIGHT DIAGONAL UPPER LEFT TO LOWER RIGHT", "BOX DRAWINGS LIGHT DIAGONAL CROSS", "BOX DRAWINGS LIGHT LEFT", "BOX DRAWINGS LIGHT UP",
				"BOX DRAWINGS LIGHT RIGHT", "BOX DRAWINGS LIGHT DOWN", "BOX DRAWINGS HEAVY LEFT", "BOX DRAWINGS HEAVY UP", "BOX DRAWINGS HEAVY RIGHT", "BOX DRAWINGS HEAVY DOWN", "BOX DRAWINGS LIGHT LEFT AND HEAVY RIGHT", "BOX DRAWINGS LIGHT UP AND HEAVY DOWN", "BOX DRAWINGS HEAVY LEFT AND LIGHT RIGHT", "BOX DRAWINGS HEAVY UP AND LIGHT DOWN",
				"UPPER HALF BLOCK", "LOWER ONE EIGHTH BLOCK", "LOWER ONE QUARTER BLOCK", "LOWER THREE EIGHTHS BLOCK", "LOWER HALF BLOCK", "LOWER FIVE EIGHTHS BLOCK", "LOWER THREE QUARTERS BLOCK", "LOWER SEVEN EIGHTHS BLOCK", "FULL BLOCK", "LEFT SEVEN EIGHTHS BLOCK",
				"LEFT THREE QUARTERS BLOCK", "LEFT FIVE EIGHTHS BLOCK", "LEFT HALF BLOCK", "LEFT THREE EIGHTHS BLOCK", "LEFT ONE QUARTER BLOCK", "LEFT ONE EIGHTH BLOCK", "RIGHT HALF BLOCK", "LIGHT SHADE", "MEDIUM SHADE", "DARK SHADE",
				"UPPER ONE EIGHTH BLOCK", "RIGHT ONE EIGHTH BLOCK", "QUADRANT LOWER LEFT", "QUADRANT LOWER RIGHT", "QUADRANT UPPER LEFT", "QUADRANT UPPER LEFT AND LOWER LEFT AND LOWER RIGHT", "QUADRANT UPPER LEFT AND LOWER RIGHT", "QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER LEFT", "QUADRANT UPPER LEFT AND UPPER RIGHT AND LOWER RIGHT", "QUADRANT UPPER RIGHT",
				"QUADRANT UPPER RIGHT AND LOWER LEFT", "QUADRANT UPPER RIGHT AND LOWER LEFT AND LOWER RIGHT", "BLACK SQUARE", "WHITE SQUARE", "WHITE SQUARE WITH ROUNDED CORNERS", "WHITE SQUARE CONTAINING BLACK SMALL SQUARE", "SQUARE WITH HORIZONTAL FILL", "SQUARE WITH VERTICAL FILL", "SQUARE WITH ORTHOGONAL CROSSHATCH FILL", "SQUARE WITH UPPER LEFT TO LOWER RIGHT FILL",
				"SQUARE WITH UPPER RIGHT TO LOWER LEFT FILL", "SQUARE WITH DIAGONAL CROSSHATCH FILL", "BLACK SMALL SQUARE", "WHITE SMALL SQUARE", "WHITE PARALLELOGRAM", "BLACK UP-POINTING TRIANGLE", "WHITE UP-POINTING TRIANGLE", "BLACK RIGHT-POINTING TRIANGLE", "WHITE RIGHT-POINTING TRIANGLE", "BLACK DOWN-POINTING TRIANGLE",
				"WHITE DOWN-POINTING TRIANGLE", "BLACK LEFT-POINTING TRIANGLE", "WHITE LEFT-POINTING TRIANGLE", "BLACK DIAMOND", "WHITE DIAMOND", "WHITE DIAMOND CONTAINING BLACK SMALL DIAMOND", "FISHEYE", "LOZENGE", "WHITE CIRCLE", "DOTTED CIRCLE",
				"BULLSEYE", "BLACK CIRCLE", "CIRCLE WITH LEFT HALF BLACK", "CIRCLE WITH RIGHT HALF BLACK", "CIRCLE WITH LOWER HALF BLACK", "CIRCLE WITH UPPER HALF BLACK", "BLACK LOWER RIGHT TRIANGLE", "BLACK LOWER LEFT TRIANGLE", "BLACK UPPER LEFT TRIANGLE", "BLACK UPPER RIGHT TRIANGLE",
				"WHITE BULLET", "LARGE CIRCLE", "WHITE MEDIUM SQUARE", "BLACK MEDIUM SQUARE", "WHITE MEDIUM SMALL SQUARE", "BLACK MEDIUM SMALL SQUARE", "DOTTED SQUARE", "BLACK LARGE SQUARE", "WHITE LARGE SQUARE", "HEAVY LARGE CIRCLE"
			},
			new string[99]
			{
				"NOT SIGN", "PLUS-MINUS SIGN", "MULTIPLICATION SIGN", "DIVISION SIGN", "GREEK REVERSED LUNATE EPSILON SYMBOL", "FRACTION SLASH", "COMMERCIAL MINUS SIGN", "SUPERSCRIPT PLUS SIGN", "SUPERSCRIPT MINUS", "SUPERSCRIPT EQUALS SIGN",
				"SUBSCRIPT PLUS SIGN", "SUBSCRIPT MINUS", "SUBSCRIPT EQUALS SIGN", "SCRIPT CAPITAL P", "DOUBLE-STRUCK N-ARY SUMMATION", "TURNED SANS-SERIF CAPITAL G", "TURNED SANS-SERIF CAPITAL L", "REVERSED SANS-SERIF CAPITAL L", "TURNED SANS-SERIF CAPITAL Y", "TURNED AMPERSAND",
				"FOR ALL", "PARTIAL DIFFERENTIAL", "THERE EXISTS", "EMPTY SET", "INCREMENT", "NABLA", "ELEMENT OF", "NOT AN ELEMENT OF", "SMALL ELEMENT OF", "CONTAINS AS MEMBER",
				"N-ARY PRODUCT", "N-ARY SUMMATION", "MINUS SIGN", "MINUS-OR-PLUS SIGN", "DIVISION SLASH", "SQUARE ROOT", "PROPORTIONAL TO", "INFINITY", "RIGHT ANGLE", "ANGLE",
				"DIVIDES", "PARALLEL TO", "NOT PARALLEL TO", "LOGICAL AND", "LOGICAL OR", "INTERSECTION", "UNION", "INTEGRAL", "DOUBLE INTEGRAL", "TRIPLE INTEGRAL",
				"CONTOUR INTEGRAL", "THEREFORE", "BECAUSE", "RATIO", "PROPORTION", "REVERSED TILDE", "ASYMPTOTICALLY EQUAL TO", "APPROXIMATELY EQUAL TO", "ALMOST EQUAL TO", "ALL EQUAL TO",
				"APPROXIMATELY EQUAL TO OR THE IMAGE OF", "NOT EQUAL TO", "IDENTICAL TO", "NOT IDENTICAL TO", "LESS-THAN OR EQUAL TO", "GREATER-THAN OR EQUAL TO", "LESS-THAN OVER EQUAL TO", "GREATER-THAN OVER EQUAL TO", "MUCH LESS-THAN", "MUCH GREATER-THAN",
				"NOT LESS-THAN", "NOT GREATER-THAN", "LESS-THAN OR EQUIVALENT TO", "GREATER-THAN OR EQUIVALENT TO", "LESS-THAN OR GREATER-THAN", "GREATER-THAN OR LESS-THAN", "SUBSET OF", "SUPERSET OF", "NOT A SUBSET OF", "NOT A SUPERSET OF",
				"SUBSET OF OR EQUAL TO", "SUPERSET OF OR EQUAL TO", "SUBSET OF WITH NOT EQUAL TO", "SUPERSET OF WITH NOT EQUAL TO", "CIRCLED PLUS", "CIRCLED MINUS", "CIRCLED TIMES", "CIRCLED DIVISION SLASH", "CIRCLED DOT OPERATOR", "SQUARED TIMES",
				"UP TACK", "RIGHT TRIANGLE", "LESS-THAN EQUAL TO OR GREATER-THAN", "GREATER-THAN EQUAL TO OR LESS-THAN", "MIDLINE HORIZONTAL ELLIPSIS", "MUSIC SHARP SIGN", "CIRCLED BULLET", "DOUBLE PLUS", "TRIPLE PLUS"
			},
			new string[13]
			{
				"BLACK SUN WITH RAYS", "CLOUD", "UMBRELLA", "SNOWMAN", "COMET", "SUN", "UMBRELLA WITH RAIN DROPS", "HIGH VOLTAGE SIGN", "SNOWMAN WITHOUT SNOW", "SUN BEHIND CLOUD",
				"THUNDER CLOUD AND RAIN", "UMBRELLA ON GROUND", "SNOWFLAKE"
			},
			new string[26]
			{
				"WHITE HEART SUIT", "BLACK HEART SUIT", "HEAVY HEART EXCLAMATION MARK ORNAMENT", "HEAVY BLACK HEART", "COUPLE WITH HEART", "BEATING HEART", "BROKEN HEART", "TWO HEARTS", "SPARKLING HEART", "GROWING HEART",
				"HEART WITH ARROW", "BLUE HEART", "GREEN HEART", "YELLOW HEART", "PURPLE HEART", "HEART WITH RIBBON", "REVOLVING HEARTS", "HEART DECORATION", "BLACK HEART", "SMILING FACE WITH SMILING EYES AND THREE HEARTS",
				"ORANGE HEART", "LIGHT BLUE HEART", "GREY HEART", "PINK HEART", "ANATOMICAL HEART", "HEART HANDS"
			},
			new string[140]
			{
				"PROJECTIVE", "PERSPECTIVE", "WAVY LINE", "ARC", "PLACE OF INTEREST SIGN", "WATCH", "HOURGLASS", "KEYBOARD", "LEFT-POINTING ANGLE BRACKET", "RIGHT-POINTING ANGLE BRACKET",
				"RETURN SYMBOL", "EJECT SYMBOL", "EARTH GROUND", "FUSE", "BLACK RIGHT-POINTING DOUBLE TRIANGLE", "BLACK LEFT-POINTING DOUBLE TRIANGLE", "BLACK UP-POINTING DOUBLE TRIANGLE", "BLACK DOWN-POINTING DOUBLE TRIANGLE", "BLACK RIGHT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR", "BLACK LEFT-POINTING DOUBLE TRIANGLE WITH VERTICAL BAR",
				"BLACK RIGHT-POINTING TRIANGLE WITH DOUBLE VERTICAL BAR", "ALARM CLOCK", "STOPWATCH", "TIMER CLOCK", "HOURGLASS WITH FLOWING SAND", "DOUBLE VERTICAL BAR", "BLACK SQUARE FOR STOP", "BLACK CIRCLE FOR RECORD", "BLACK STAR", "WHITE STAR",
				"BLACK TELEPHONE", "WHITE TELEPHONE", "BALLOT BOX WITH CHECK", "HOT BEVERAGE", "SHAMROCK", "WHITE LEFT POINTING INDEX", "WHITE UP POINTING INDEX", "WHITE RIGHT POINTING INDEX", "WHITE DOWN POINTING INDEX", "SKULL AND CROSSBONES",
				"RADIOACTIVE SIGN", "BIOHAZARD SIGN", "PEACE SYMBOL", "WHITE FROWNING FACE", "WHITE SMILING FACE", "FEMALE SIGN", "EARTH", "MALE SIGN", "BLACK CHESS PAWN", "BLACK SPADE SUIT",
				"WHITE DIAMOND SUIT", "BLACK CLUB SUIT", "WHITE SPADE SUIT", "BLACK DIAMOND SUIT", "WHITE CLUB SUIT", "HOT SPRINGS", "QUARTER NOTE", "EIGHTH NOTE", "BEAMED EIGHTH NOTES", "BEAMED SIXTEENTH NOTES",
				"MUSIC FLAT SIGN", "MUSIC NATURAL SIGN", "UNIVERSAL RECYCLING SYMBOL", "RECYCLING SYMBOL FOR TYPE-1 PLASTICS", "RECYCLING SYMBOL FOR TYPE-2 PLASTICS", "RECYCLING SYMBOL FOR TYPE-3 PLASTICS", "RECYCLING SYMBOL FOR TYPE-4 PLASTICS", "RECYCLING SYMBOL FOR TYPE-5 PLASTICS", "RECYCLING SYMBOL FOR TYPE-6 PLASTICS", "RECYCLING SYMBOL FOR TYPE-7 PLASTICS",
				"RECYCLING SYMBOL FOR GENERIC MATERIALS", "BLACK UNIVERSAL RECYCLING SYMBOL", "RECYCLED PAPER SYMBOL", "PARTIALLY-RECYCLED PAPER SYMBOL", "PERMANENT PAPER SIGN", "WHEELCHAIR SYMBOL", "HAMMER AND PICK", "ANCHOR", "CROSSED SWORDS", "STAFF OF AESCULAPIUS",
				"SCALES", "ALEMBIC", "GEAR", "ATOM SYMBOL", "FLEUR-DE-LIS", "WARNING SIGN", "MALE WITH STROKE AND MALE AND FEMALE SIGN", "MEDIUM WHITE CIRCLE", "MEDIUM BLACK CIRCLE", "COFFIN",
				"FUNERAL URN", "SOCCER BALL", "BASEBALL", "PICK", "HELMET WITH WHITE CROSS", "CHAINS", "NO ENTRY", "MOUNTAIN", "FOUNTAIN", "FLAG IN HOLE",
				"FERRY", "SAILBOAT", "SKIER", "ICE SKATE", "PERSON WITH BALL", "TENT", "FUEL PUMP", "BLACK SCISSORS", "WHITE HEAVY CHECK MARK", "AIRPLANE",
				"ENVELOPE", "RAISED FIST", "RAISED HAND", "VICTORY HAND", "WRITING HAND", "PENCIL", "BLACK NIB", "CHECK MARK", "HEAVY CHECK MARK", "HEAVY MULTIPLICATION X",
				"HEAVY GREEK CROSS", "SPARKLES", "EIGHT SPOKED ASTERISK", "EIGHT POINTED BLACK STAR", "HEAVY TEARDROP-SPOKED ASTERISK", "BLACK FLORETTE", "WHITE FLORETTE", "SPARKLE", "CROSS MARK", "NEGATIVE SQUARED CROSS MARK",
				"BLACK QUESTION MARK ORNAMENT", "WHITE QUESTION MARK ORNAMENT", "WHITE EXCLAMATION MARK ORNAMENT", "BLACK DIAMOND MINUS WHITE X", "HEAVY EXCLAMATION MARK SYMBOL", "HEAVY PLUS SIGN", "HEAVY MINUS SIGN", "HEAVY DIVISION SIGN", "CURLY LOOP", "DOUBLE CURLY LOOP"
			},
			new string[298]
			{
				"INVERTED EXCLAMATION MARK", "BROKEN BAR", "SECTION SIGN", "DIAERESIS", "COPYRIGHT SIGN", "LEFT-POINTING DOUBLE ANGLE QUOTATION MARK", "REGISTERED SIGN", "MACRON", "DEGREE SIGN", "ACUTE ACCENT",
				"PILCROW SIGN", "MIDDLE DOT", "CEDILLA", "RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK", "INVERTED QUESTION MARK", "GREEK LOWER NUMERAL SIGN", "GREEK QUESTION MARK", "GREEK TONOS", "GREEK DIALYTIKA TONOS", "GREEK ANO TELEIA",
				"CYRILLIC THOUSANDS SIGN", "DEVANAGARI DANDA", "DEVANAGARI DOUBLE DANDA", "DEVANAGARI ABBREVIATION SIGN", "VEDIC SIGN NIHSHVASA", "GREEK KORONIS", "GREEK PSILI", "GREEK PERISPOMENI", "GREEK DIALYTIKA AND PERISPOMENI", "GREEK PSILI AND VARIA",
				"GREEK PSILI AND OXIA", "GREEK PSILI AND PERISPOMENI", "GREEK DASIA AND VARIA", "GREEK DASIA AND OXIA", "GREEK DASIA AND PERISPOMENI", "GREEK DIALYTIKA AND VARIA", "GREEK DIALYTIKA AND OXIA", "GREEK VARIA", "GREEK OXIA", "GREEK DASIA",
				"HYPHEN", "NON-BREAKING HYPHEN", "FIGURE DASH", "EN DASH", "EM DASH", "HORIZONTAL BAR", "DOUBLE VERTICAL LINE", "DOUBLE LOW LINE", "LEFT SINGLE QUOTATION MARK", "RIGHT SINGLE QUOTATION MARK",
				"SINGLE LOW-9 QUOTATION MARK", "SINGLE HIGH-REVERSED-9 QUOTATION MARK", "LEFT DOUBLE QUOTATION MARK", "RIGHT DOUBLE QUOTATION MARK", "DOUBLE LOW-9 QUOTATION MARK", "DOUBLE HIGH-REVERSED-9 QUOTATION MARK", "DAGGER", "DOUBLE DAGGER", "BULLET", "TRIANGULAR BULLET",
				"ONE DOT LEADER", "TWO DOT LEADER", "HORIZONTAL ELLIPSIS", "HYPHENATION POINT", "PER MILLE SIGN", "PER TEN THOUSAND SIGN", "PRIME", "DOUBLE PRIME", "TRIPLE PRIME", "REVERSED PRIME",
				"REVERSED DOUBLE PRIME", "REVERSED TRIPLE PRIME", "CARET", "SINGLE LEFT-POINTING ANGLE QUOTATION MARK", "SINGLE RIGHT-POINTING ANGLE QUOTATION MARK", "REFERENCE MARK", "DOUBLE EXCLAMATION MARK", "INTERROBANG", "OVERLINE", "UNDERTIE",
				"CHARACTER TIE", "CARET INSERTION POINT", "ASTERISM", "HYPHEN BULLET", "LEFT SQUARE BRACKET WITH QUILL", "RIGHT SQUARE BRACKET WITH QUILL", "DOUBLE QUESTION MARK", "QUESTION EXCLAMATION MARK", "EXCLAMATION QUESTION MARK", "REVERSED PILCROW SIGN",
				"BLACK LEFTWARDS BULLET", "BLACK RIGHTWARDS BULLET", "LOW ASTERISK", "REVERSED SEMICOLON", "CLOSE UP", "TWO ASTERISKS ALIGNED VERTICALLY", "SWUNG DASH", "INVERTED UNDERTIE", "FLOWER PUNCTUATION MARK", "THREE DOT PUNCTUATION",
				"QUADRUPLE PRIME", "FOUR DOT PUNCTUATION", "FIVE DOT PUNCTUATION", "TWO DOT PUNCTUATION", "FOUR DOT MARK", "DOTTED CROSS", "TRICOLON", "VERTICAL FOUR DOTS", "SUPERSCRIPT LEFT PARENTHESIS", "SUPERSCRIPT RIGHT PARENTHESIS",
				"SUBSCRIPT LEFT PARENTHESIS", "SUBSCRIPT RIGHT PARENTHESIS", "ACCOUNT OF", "ADDRESSED TO THE SUBJECT", "DEGREE CELSIUS", "CENTRE LINE SYMBOL", "CARE OF", "CADA UNA", "SCRUPLE", "DEGREE FAHRENHEIT",
				"L B BAR SYMBOL", "NUMERO SIGN", "SOUND RECORDING COPYRIGHT", "PRESCRIPTION TAKE", "RESPONSE", "SERVICE MARK", "TELEPHONE SIGN", "TRADE MARK SIGN", "VERSICLE", "OUNCE SIGN",
				"INVERTED OHM SIGN", "TURNED GREEK SMALL LETTER IOTA", "ESTIMATED SYMBOL", "ROTATED CAPITAL Q", "FACSIMILE SIGN", "PROPERTY LINE", "PER SIGN", "AKTIESELSKAB", "SYMBOL FOR SAMARITAN SOURCE", "OPEN BOX",
				"PARENTHESIZED LATIN SMALL LETTER A", "PARENTHESIZED LATIN SMALL LETTER B", "PARENTHESIZED LATIN SMALL LETTER C", "PARENTHESIZED LATIN SMALL LETTER D", "PARENTHESIZED LATIN SMALL LETTER E", "PARENTHESIZED LATIN SMALL LETTER F", "PARENTHESIZED LATIN SMALL LETTER G", "PARENTHESIZED LATIN SMALL LETTER H", "PARENTHESIZED LATIN SMALL LETTER I", "PARENTHESIZED LATIN SMALL LETTER J",
				"PARENTHESIZED LATIN SMALL LETTER K", "PARENTHESIZED LATIN SMALL LETTER L", "PARENTHESIZED LATIN SMALL LETTER M", "PARENTHESIZED LATIN SMALL LETTER N", "PARENTHESIZED LATIN SMALL LETTER O", "PARENTHESIZED LATIN SMALL LETTER P", "PARENTHESIZED LATIN SMALL LETTER Q", "PARENTHESIZED LATIN SMALL LETTER R", "PARENTHESIZED LATIN SMALL LETTER S", "PARENTHESIZED LATIN SMALL LETTER T",
				"PARENTHESIZED LATIN SMALL LETTER U", "PARENTHESIZED LATIN SMALL LETTER V", "PARENTHESIZED LATIN SMALL LETTER W", "PARENTHESIZED LATIN SMALL LETTER X", "PARENTHESIZED LATIN SMALL LETTER Y", "PARENTHESIZED LATIN SMALL LETTER Z", "CIRCLED LATIN CAPITAL LETTER A", "CIRCLED LATIN CAPITAL LETTER B", "CIRCLED LATIN CAPITAL LETTER C", "CIRCLED LATIN CAPITAL LETTER D",
				"CIRCLED LATIN CAPITAL LETTER E", "CIRCLED LATIN CAPITAL LETTER F", "CIRCLED LATIN CAPITAL LETTER G", "CIRCLED LATIN CAPITAL LETTER H", "CIRCLED LATIN CAPITAL LETTER I", "CIRCLED LATIN CAPITAL LETTER J", "CIRCLED LATIN CAPITAL LETTER K", "CIRCLED LATIN CAPITAL LETTER L", "CIRCLED LATIN CAPITAL LETTER M", "CIRCLED LATIN CAPITAL LETTER N",
				"CIRCLED LATIN CAPITAL LETTER O", "CIRCLED LATIN CAPITAL LETTER P", "CIRCLED LATIN CAPITAL LETTER Q", "CIRCLED LATIN CAPITAL LETTER R", "CIRCLED LATIN CAPITAL LETTER S", "CIRCLED LATIN CAPITAL LETTER T", "CIRCLED LATIN CAPITAL LETTER U", "CIRCLED LATIN CAPITAL LETTER V", "CIRCLED LATIN CAPITAL LETTER W", "CIRCLED LATIN CAPITAL LETTER X",
				"CIRCLED LATIN CAPITAL LETTER Y", "CIRCLED LATIN CAPITAL LETTER Z", "CIRCLED LATIN SMALL LETTER A", "CIRCLED LATIN SMALL LETTER B", "CIRCLED LATIN SMALL LETTER C", "CIRCLED LATIN SMALL LETTER D", "CIRCLED LATIN SMALL LETTER E", "CIRCLED LATIN SMALL LETTER F", "CIRCLED LATIN SMALL LETTER G", "CIRCLED LATIN SMALL LETTER H",
				"CIRCLED LATIN SMALL LETTER I", "CIRCLED LATIN SMALL LETTER J", "CIRCLED LATIN SMALL LETTER K", "CIRCLED LATIN SMALL LETTER L", "CIRCLED LATIN SMALL LETTER M", "CIRCLED LATIN SMALL LETTER N", "CIRCLED LATIN SMALL LETTER O", "CIRCLED LATIN SMALL LETTER P", "CIRCLED LATIN SMALL LETTER Q", "CIRCLED LATIN SMALL LETTER R",
				"CIRCLED LATIN SMALL LETTER S", "CIRCLED LATIN SMALL LETTER T", "CIRCLED LATIN SMALL LETTER U", "CIRCLED LATIN SMALL LETTER V", "CIRCLED LATIN SMALL LETTER W", "CIRCLED LATIN SMALL LETTER X", "CIRCLED LATIN SMALL LETTER Y", "CIRCLED LATIN SMALL LETTER Z", "WHITE MEDIUM STAR", "RIGHT ANGLE SUBSTITUTION MARKER",
				"RIGHT ANGLE DOTTED SUBSTITUTION MARKER", "LEFT SUBSTITUTION BRACKET", "RIGHT SUBSTITUTION BRACKET", "LEFT DOTTED SUBSTITUTION BRACKET", "RIGHT DOTTED SUBSTITUTION BRACKET", "RAISED INTERPOLATION MARKER", "RAISED DOTTED INTERPOLATION MARKER", "DOTTED TRANSPOSITION MARKER", "LEFT TRANSPOSITION BRACKET", "RIGHT TRANSPOSITION BRACKET",
				"RAISED SQUARE", "LEFT RAISED OMISSION BRACKET", "RIGHT RAISED OMISSION BRACKET", "EDITORIAL CORONIS", "PARAGRAPHOS", "FORKED PARAGRAPHOS", "REVERSED FORKED PARAGRAPHOS", "HYPODIASTOLE", "DOTTED OBELOS", "DOWNWARDS ANCORA",
				"UPWARDS ANCORA", "DOTTED RIGHT-POINTING ANGLE", "DOUBLE OBLIQUE HYPHEN", "INVERTED INTERROBANG", "PALM BRANCH", "HYPHEN WITH DIAERESIS", "TILDE WITH RING ABOVE", "LEFT LOW PARAPHRASE BRACKET", "RIGHT LOW PARAPHRASE BRACKET", "TILDE WITH DOT ABOVE",
				"TILDE WITH DOT BELOW", "LEFT VERTICAL BAR WITH QUILL", "RIGHT VERTICAL BAR WITH QUILL", "TOP LEFT HALF BRACKET", "TOP RIGHT HALF BRACKET", "BOTTOM LEFT HALF BRACKET", "BOTTOM RIGHT HALF BRACKET", "LEFT SIDEWAYS U BRACKET", "RIGHT SIDEWAYS U BRACKET", "LEFT DOUBLE PARENTHESIS",
				"RIGHT DOUBLE PARENTHESIS", "TWO DOTS OVER ONE DOT PUNCTUATION", "ONE DOT OVER TWO DOTS PUNCTUATION", "SQUARED FOUR DOT PUNCTUATION", "FIVE DOT MARK", "REVERSED QUESTION MARK", "RING POINT", "WORD SEPARATOR MIDDLE DOT", "TURNED COMMA", "RAISED DOT",
				"RAISED COMMA", "TURNED SEMICOLON", "DAGGER WITH LEFT GUARD", "DAGGER WITH RIGHT GUARD", "TURNED DAGGER", "TOP HALF SECTION SIGN", "TWO-EM DASH", "THREE-EM DASH", "STENOGRAPHIC FULL STOP", "VERTICAL SIX DOTS",
				"WIGGLY VERTICAL LINE", "CAPITULUM", "DOUBLE HYPHEN", "REVERSED COMMA", "DOUBLE LOW-REVERSED-9 QUOTATION MARK", "DASH WITH LEFT UPTURN", "DOUBLE SUSPENSION MARK", "INVERTED LOW KAVYKA", "INVERTED LOW KAVYKA WITH KAVYKA ABOVE", "LOW KAVYKA",
				"LOW KAVYKA WITH DOT", "DOUBLE STACKED COMMA", "DOTTED SOLIDUS", "TRIPLE DAGGER", "MEDIEVAL COMMA", "PARAGRAPHUS MARK", "PUNCTUS ELEVATUS MARK", "CORNISH VERSE DIVIDER"
			},
			new string[111]
			{
				"RAT", "MOUSE", "OX", "WATER BUFFALO", "COW", "TIGER", "LEOPARD", "RABBIT", "CAT", "DRAGON",
				"CROCODILE", "WHALE", "SNAIL", "SNAKE", "HORSE", "RAM", "GOAT", "SHEEP", "MONKEY", "ROOSTER",
				"CHICKEN", "DOG", "PIG", "BOAR", "ELEPHANT", "OCTOPUS", "SPIRAL SHELL", "BUG", "ANT", "HONEYBEE",
				"LADY BEETLE", "FISH", "TROPICAL FISH", "BLOWFISH", "TURTLE", "HATCHING CHICK", "BABY CHICK", "FRONT-FACING BABY CHICK", "BIRD", "PENGUIN",
				"KOALA", "POODLE", "DROMEDARY CAMEL", "BACTRIAN CAMEL", "DOLPHIN", "MOUSE FACE", "COW FACE", "TIGER FACE", "RABBIT FACE", "CAT FACE",
				"DRAGON FACE", "SPOUTING WHALE", "HORSE FACE", "MONKEY FACE", "DOG FACE", "PIG FACE", "FROG FACE", "HAMSTER FACE", "WOLF FACE", "BEAR FACE",
				"PANDA FACE", "PIG NOSE", "PAW PRINTS", "CHIPMUNK", "CRAB", "LION FACE", "SCORPION", "TURKEY", "UNICORN FACE", "EAGLE",
				"DUCK", "BAT", "SHARK", "OWL", "FOX FACE", "BUTTERFLY", "DEER", "GORILLA", "LIZARD", "RHINOCEROS",
				"SHRIMP", "SQUID", "GIRAFFE FACE", "ZEBRA FACE", "HEDGEHOG", "SAUROPOD", "T-REX", "CRICKET", "KANGAROO", "LLAMA",
				"PEACOCK", "HIPPOPOTAMUS", "PARROT", "RACCOON", "LOBSTER", "MOSQUITO", "MICROBE", "BADGER", "SWAN", "MAMMOTH",
				"DODO", "SLOTH", "OTTER", "ORANGUTAN", "SKUNK", "FLAMINGO", "OYSTER", "BEAVER", "BISON", "SEAL",
				"GUIDE DOG"
			},
			new string[121]
			{
				"HOUSE BUILDING", "HOUSE WITH GARDEN", "OFFICE BUILDING", "JAPANESE POST OFFICE", "EUROPEAN POST OFFICE", "HOSPITAL", "BANK", "AUTOMATED TELLER MACHINE", "HOTEL", "LOVE HOTEL",
				"CONVENIENCE STORE", "SCHOOL", "DEPARTMENT STORE", "FACTORY", "IZAKAYA LANTERN", "JAPANESE CASTLE", "EUROPEAN CASTLE", "ROCKET", "HELICOPTER", "STEAM LOCOMOTIVE",
				"RAILWAY CAR", "HIGH-SPEED TRAIN", "HIGH-SPEED TRAIN WITH BULLET NOSE", "TRAIN", "METRO", "LIGHT RAIL", "STATION", "TRAM", "TRAM CAR", "BUS",
				"ONCOMING BUS", "TROLLEYBUS", "BUS STOP", "MINIBUS", "AMBULANCE", "FIRE ENGINE", "POLICE CAR", "ONCOMING POLICE CAR", "TAXI", "ONCOMING TAXI",
				"AUTOMOBILE", "ONCOMING AUTOMOBILE", "RECREATIONAL VEHICLE", "DELIVERY TRUCK", "ARTICULATED LORRY", "TRACTOR", "MONORAIL", "MOUNTAIN RAILWAY", "SUSPENSION RAILWAY", "MOUNTAIN CABLEWAY",
				"AERIAL TRAMWAY", "SHIP", "ROWBOAT", "SPEEDBOAT", "HORIZONTAL TRAFFIC LIGHT", "VERTICAL TRAFFIC LIGHT", "CONSTRUCTION SIGN", "POLICE CARS REVOLVING LIGHT", "TRIANGULAR FLAG ON POST", "DOOR",
				"NO ENTRY SIGN", "SMOKING SYMBOL", "NO SMOKING SYMBOL", "PUT LITTER IN ITS PLACE SYMBOL", "DO NOT LITTER SYMBOL", "POTABLE WATER SYMBOL", "NON-POTABLE WATER SYMBOL", "BICYCLE", "NO BICYCLES", "BICYCLIST",
				"MOUNTAIN BICYCLIST", "PEDESTRIAN", "NO PEDESTRIANS", "CHILDREN CROSSING", "MENS SYMBOL", "WOMENS SYMBOL", "RESTROOM", "BABY SYMBOL", "TOILET", "WATER CLOSET",
				"SHOWER", "BATH", "BATHTUB", "PASSPORT CONTROL", "CUSTOMS", "BAGGAGE CLAIM", "LEFT LUGGAGE", "COUCH AND LAMP", "SLEEPING ACCOMMODATION", "SHOPPING BAGS",
				"BELLHOP BELL", "BED", "PLACE OF WORSHIP", "OCTAGONAL SIGN", "SHOPPING TROLLEY", "HINDU TEMPLE", "HUT", "ELEVATOR", "WIRELESS", "PLAYGROUND SLIDE",
				"WHEEL", "RING BUOY", "HAMMER AND WRENCH", "SHIELD", "OIL DRUM", "MOTORWAY", "RAILWAY TRACK", "MOTOR BOAT", "SMALL AIRPLANE", "AIRPLANE DEPARTURE",
				"AIRPLANE ARRIVING", "SATELLITE", "PASSENGER SHIP", "SCOOTER", "MOTOR SCOOTER", "CANOE", "SLED", "SKATEBOARD", "AUTO RICKSHAW", "PICKUP TRUCK",
				"ROLLER SKATE"
			},
			new string[67]
			{
				"CYCLONE", "FOGGY", "CLOSED UMBRELLA", "NIGHT WITH STARS", "SUNRISE OVER MOUNTAINS", "SUNRISE", "CITYSCAPE AT DUSK", "SUNSET OVER BUILDINGS", "RAINBOW", "BRIDGE AT NIGHT",
				"WATER WAVE", "VOLCANO", "MILKY WAY", "EARTH GLOBE EUROPE-AFRICA", "EARTH GLOBE AMERICAS", "EARTH GLOBE ASIA-AUSTRALIA", "GLOBE WITH MERIDIANS", "NEW MOON SYMBOL", "WAXING CRESCENT MOON SYMBOL", "FIRST QUARTER MOON SYMBOL",
				"WAXING GIBBOUS MOON SYMBOL", "FULL MOON SYMBOL", "WANING GIBBOUS MOON SYMBOL", "LAST QUARTER MOON SYMBOL", "WANING CRESCENT MOON SYMBOL", "CRESCENT MOON", "NEW MOON WITH FACE", "FIRST QUARTER MOON WITH FACE", "LAST QUARTER MOON WITH FACE", "FULL MOON WITH FACE",
				"SUN WITH FACE", "GLOWING STAR", "SHOOTING STAR", "THERMOMETER", "WHITE SUN WITH SMALL CLOUD", "WHITE SUN BEHIND CLOUD", "WHITE SUN BEHIND CLOUD WITH RAIN", "CLOUD WITH RAIN", "CLOUD WITH SNOW", "CLOUD WITH LIGHTNING",
				"CLOUD WITH TORNADO", "FOG", "WIND BLOWING FACE", "HOT DOG", "TACO", "BURRITO", "CHESTNUT", "SEEDLING", "EVERGREEN TREE", "DECIDUOUS TREE",
				"PALM TREE", "CACTUS", "HOT PEPPER", "TULIP", "CHERRY BLOSSOM", "ROSE", "HIBISCUS", "SUNFLOWER", "BLOSSOM", "EAR OF MAIZE",
				"EAR OF RICE", "HERB", "FOUR LEAF CLOVER", "MAPLE LEAF", "FALLEN LEAF", "LEAF FLUTTERING IN WIND", "MUSHROOM"
			},
			new string[91]
			{
				"TOMATO", "AUBERGINE", "GRAPES", "MELON", "WATERMELON", "TANGERINE", "LEMON", "BANANA", "PINEAPPLE", "RED APPLE",
				"GREEN APPLE", "PEAR", "PEACH", "CHERRIES", "STRAWBERRY", "HAMBURGER", "SLICE OF PIZZA", "MEAT ON BONE", "POULTRY LEG", "RICE CRACKER",
				"RICE BALL", "COOKED RICE", "CURRY AND RICE", "STEAMING BOWL", "SPAGHETTI", "BREAD", "FRENCH FRIES", "ROASTED SWEET POTATO", "DANGO", "ODEN",
				"SUSHI", "FRIED SHRIMP", "FISH CAKE WITH SWIRL DESIGN", "SOFT ICE CREAM", "SHAVED ICE", "ICE CREAM", "DOUGHNUT", "COOKIE", "CHOCOLATE BAR", "CANDY",
				"LOLLIPOP", "CUSTARD", "HONEY POT", "SHORTCAKE", "BENTO BOX", "POT OF FOOD", "COOKING", "FORK AND KNIFE", "TEACUP WITHOUT HANDLE", "SAKE BOTTLE AND CUP",
				"WINE GLASS", "COCKTAIL GLASS", "TROPICAL DRINK", "BEER MUG", "CLINKING BEER MUGS", "BABY BOTTLE", "FORK AND KNIFE WITH PLATE", "BOTTLE WITH POPPING CORK", "POPCORN", "CROISSANT",
				"AVOCADO", "CUCUMBER", "BACON", "POTATO", "CARROT", "BAGUETTE BREAD", "GREEN SALAD", "SHALLOW PAN OF FOOD", "STUFFED FLATBREAD", "EGG",
				"GLASS OF MILK", "PEANUTS", "KIWIFRUIT", "PANCAKES", "DUMPLING", "FORTUNE COOKIE", "TAKEOUT BOX", "CHOPSTICKS", "BOWL WITH SPOON", "CUP WITH STRAW",
				"COCONUT", "BROCCOLI", "PIE", "PRETZEL", "CUT OF MEAT", "SANDWICH", "CANNED FOOD", "LEAFY GREEN", "MANGO", "MOON CAKE",
				"BAGEL"
			},
			new string[539]
			{
				"RIBBON", "WRAPPED PRESENT", "BIRTHDAY CAKE", "JACK-O-LANTERN", "CHRISTMAS TREE", "FATHER CHRISTMAS", "FIREWORKS", "FIREWORK SPARKLER", "BALLOON", "PARTY POPPER",
				"CONFETTI BALL", "TANABATA TREE", "CROSSED FLAGS", "PINE DECORATION", "JAPANESE DOLLS", "CARP STREAMER", "WIND CHIME", "MOON VIEWING CEREMONY", "SCHOOL SATCHEL", "GRADUATION CAP",
				"MILITARY MEDAL", "REMINDER RIBBON", "STUDIO MICROPHONE", "LEVEL SLIDER", "CONTROL KNOBS", "FILM FRAMES", "ADMISSION TICKETS", "CAROUSEL HORSE", "FERRIS WHEEL", "ROLLER COASTER",
				"FISHING POLE AND FISH", "MICROPHONE", "MOVIE CAMERA", "CINEMA", "HEADPHONE", "ARTIST PALETTE", "TOP HAT", "CIRCUS TENT", "TICKET", "CLAPPER BOARD",
				"PERFORMING ARTS", "VIDEO GAME", "DIRECT HIT", "SLOT MACHINE", "BILLIARDS", "GAME DIE", "BOWLING", "MUSICAL NOTE", "MULTIPLE MUSICAL NOTES", "SAXOPHONE",
				"GUITAR", "MUSICAL KEYBOARD", "TRUMPET", "VIOLIN", "MUSICAL SCORE", "RUNNING SHIRT WITH SASH", "TENNIS RACQUET AND BALL", "SKI AND SKI BOOT", "BASKETBALL AND HOOP", "CHEQUERED FLAG",
				"SNOWBOARDER", "RUNNER", "SURFER", "SPORTS MEDAL", "TROPHY", "HORSE RACING", "AMERICAN FOOTBALL", "RUGBY FOOTBALL", "SWIMMER", "WEIGHT LIFTER",
				"GOLFER", "RACING MOTORCYCLE", "RACING CAR", "CRICKET BAT AND BALL", "VOLLEYBALL", "FIELD HOCKEY STICK AND BALL", "ICE HOCKEY STICK AND PUCK", "TABLE TENNIS PADDLE AND BALL", "SNOW CAPPED MOUNTAIN", "CAMPING",
				"BEACH WITH UMBRELLA", "BUILDING CONSTRUCTION", "HOUSE BUILDINGS", "CITYSCAPE", "DERELICT HOUSE BUILDING", "CLASSICAL BUILDING", "DESERT", "DESERT ISLAND", "NATIONAL PARK", "STADIUM",
				"ROSETTE", "LABEL", "BADMINTON RACQUET AND SHUTTLECOCK", "BOW AND ARROW", "AMPHORA", "BARBER POLE", "SYRINGE", "PILL", "KISS MARK", "LOVE LETTER",
				"RING", "GEM STONE", "KISS", "BOUQUET", "WEDDING", "DIAMOND SHAPE WITH A DOT INSIDE", "ELECTRIC LIGHT BULB", "ANGER SYMBOL", "BOMB", "SLEEPING SYMBOL",
				"COLLISION SYMBOL", "SPLASHING SWEAT SYMBOL", "DROPLET", "DASH SYMBOL", "PILE OF POO", "FLEXED BICEPS", "DIZZY SYMBOL", "SPEECH BALLOON", "THOUGHT BALLOON", "WHITE FLOWER",
				"HUNDRED POINTS SYMBOL", "MONEY BAG", "CURRENCY EXCHANGE", "HEAVY DOLLAR SIGN", "CREDIT CARD", "BANKNOTE WITH YEN SIGN", "BANKNOTE WITH DOLLAR SIGN", "BANKNOTE WITH EURO SIGN", "BANKNOTE WITH POUND SIGN", "MONEY WITH WINGS",
				"CHART WITH UPWARDS TREND AND YEN SIGN", "SEAT", "PERSONAL COMPUTER", "BRIEFCASE", "MINIDISC", "FLOPPY DISK", "OPTICAL DISC", "DVD", "FILE FOLDER", "OPEN FILE FOLDER",
				"PAGE WITH CURL", "PAGE FACING UP", "CALENDAR", "TEAR-OFF CALENDAR", "CARD INDEX", "CHART WITH UPWARDS TREND", "CHART WITH DOWNWARDS TREND", "BAR CHART", "CLIPBOARD", "PUSHPIN",
				"ROUND PUSHPIN", "PAPERCLIP", "STRAIGHT RULER", "TRIANGULAR RULER", "BOOKMARK TABS", "LEDGER", "NOTEBOOK", "NOTEBOOK WITH DECORATIVE COVER", "CLOSED BOOK", "OPEN BOOK",
				"GREEN BOOK", "BLUE BOOK", "ORANGE BOOK", "BOOKS", "NAME BADGE", "SCROLL", "MEMO", "TELEPHONE RECEIVER", "PAGER", "FAX MACHINE",
				"SATELLITE ANTENNA", "PUBLIC ADDRESS LOUDSPEAKER", "CHEERING MEGAPHONE", "OUTBOX TRAY", "INBOX TRAY", "PACKAGE", "E-MAIL SYMBOL", "INCOMING ENVELOPE", "ENVELOPE WITH DOWNWARDS ARROW ABOVE", "CLOSED MAILBOX WITH LOWERED FLAG",
				"CLOSED MAILBOX WITH RAISED FLAG", "OPEN MAILBOX WITH RAISED FLAG", "OPEN MAILBOX WITH LOWERED FLAG", "POSTBOX", "POSTAL HORN", "NEWSPAPER", "MOBILE PHONE", "MOBILE PHONE WITH RIGHTWARDS ARROW AT LEFT", "VIBRATION MODE", "MOBILE PHONE OFF",
				"NO MOBILE PHONES", "ANTENNA WITH BARS", "CAMERA", "CAMERA WITH FLASH", "VIDEO CAMERA", "TELEVISION", "RADIO", "VIDEOCASSETTE", "FILM PROJECTOR", "PRAYER BEADS",
				"TWISTED RIGHTWARDS ARROWS", "CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS", "CLOCKWISE RIGHTWARDS AND LEFTWARDS OPEN CIRCLE ARROWS WITH CIRCLED ONE OVERLAY", "CLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", "ANTICLOCKWISE DOWNWARDS AND UPWARDS OPEN CIRCLE ARROWS", "LOW BRIGHTNESS SYMBOL", "HIGH BRIGHTNESS SYMBOL", "SPEAKER WITH CANCELLATION STROKE", "SPEAKER", "SPEAKER WITH ONE SOUND WAVE",
				"SPEAKER WITH THREE SOUND WAVES", "BATTERY", "ELECTRIC PLUG", "LOCK WITH INK PEN", "CLOSED LOCK WITH KEY", "KEY", "LOCK", "OPEN LOCK", "BELL", "BELL WITH CANCELLATION STROKE",
				"BOOKMARK", "LINK SYMBOL", "RADIO BUTTON", "BACK WITH LEFTWARDS ARROW ABOVE", "END WITH LEFTWARDS ARROW ABOVE", "ON WITH EXCLAMATION MARK WITH LEFT RIGHT ARROW ABOVE", "SOON WITH RIGHTWARDS ARROW ABOVE", "TOP WITH UPWARDS ARROW ABOVE", "NO ONE UNDER EIGHTEEN SYMBOL", "KEYCAP TEN",
				"INPUT SYMBOL FOR LATIN CAPITAL LETTERS", "INPUT SYMBOL FOR LATIN SMALL LETTERS", "INPUT SYMBOL FOR NUMBERS", "INPUT SYMBOL FOR SYMBOLS", "INPUT SYMBOL FOR LATIN LETTERS", "FIRE", "ELECTRIC TORCH", "WRENCH", "HAMMER", "NUT AND BOLT",
				"HOCHO", "PISTOL", "MICROSCOPE", "TELESCOPE", "CRYSTAL BALL", "SIX POINTED STAR WITH MIDDLE DOT", "JAPANESE SYMBOL FOR BEGINNER", "TRIDENT EMBLEM", "BLACK SQUARE BUTTON", "WHITE SQUARE BUTTON",
				"LARGE RED CIRCLE", "LARGE BLUE CIRCLE", "LARGE ORANGE DIAMOND", "LARGE BLUE DIAMOND", "SMALL ORANGE DIAMOND", "SMALL BLUE DIAMOND", "UP-POINTING RED TRIANGLE", "DOWN-POINTING RED TRIANGLE", "UP-POINTING SMALL RED TRIANGLE", "DOWN-POINTING SMALL RED TRIANGLE",
				"OM SYMBOL", "DOVE OF PEACE", "KAABA", "MOSQUE", "SYNAGOGUE", "MENORAH WITH NINE BRANCHES", "CLOCK FACE ONE OCLOCK", "CLOCK FACE TWO OCLOCK", "CLOCK FACE THREE OCLOCK", "CLOCK FACE FOUR OCLOCK",
				"CLOCK FACE FIVE OCLOCK", "CLOCK FACE SIX OCLOCK", "CLOCK FACE SEVEN OCLOCK", "CLOCK FACE EIGHT OCLOCK", "CLOCK FACE NINE OCLOCK", "CLOCK FACE TEN OCLOCK", "CLOCK FACE ELEVEN OCLOCK", "CLOCK FACE TWELVE OCLOCK", "CLOCK FACE ONE-THIRTY", "CLOCK FACE TWO-THIRTY",
				"CLOCK FACE THREE-THIRTY", "CLOCK FACE FOUR-THIRTY", "CLOCK FACE FIVE-THIRTY", "CLOCK FACE SIX-THIRTY", "CLOCK FACE SEVEN-THIRTY", "CLOCK FACE EIGHT-THIRTY", "CLOCK FACE NINE-THIRTY", "CLOCK FACE TEN-THIRTY", "CLOCK FACE ELEVEN-THIRTY", "CLOCK FACE TWELVE-THIRTY",
				"CANDLE", "MANTELPIECE CLOCK", "HOLE", "MAN IN BUSINESS SUIT LEVITATING", "SLEUTH OR SPY", "DARK SUNGLASSES", "SPIDER", "SPIDER WEB", "JOYSTICK", "MAN DANCING",
				"LINKED PAPERCLIPS", "LOWER LEFT BALLPOINT PEN", "LOWER LEFT FOUNTAIN PEN", "LOWER LEFT PAINTBRUSH", "LOWER LEFT CRAYON", "RAISED HAND WITH FINGERS SPLAYED", "REVERSED HAND WITH MIDDLE FINGER EXTENDED", "RAISED HAND WITH PART BETWEEN MIDDLE AND RING FINGERS", "DESKTOP COMPUTER", "PRINTER",
				"THREE BUTTON MOUSE", "TRACKBALL", "FRAME WITH PICTURE", "CARD INDEX DIVIDERS", "CARD FILE BOX", "FILE CABINET", "WASTEBASKET", "SPIRAL NOTE PAD", "SPIRAL CALENDAR PAD", "COMPRESSION",
				"OLD KEY", "ROLLED-UP NEWSPAPER", "DAGGER KNIFE", "SPEAKING HEAD IN SILHOUETTE", "LEFT SPEECH BUBBLE", "RIGHT ANGER BUBBLE", "BALLOT BOX WITH BALLOT", "WORLD MAP", "MOUNT FUJI", "TOKYO TOWER",
				"STATUE OF LIBERTY", "SILHOUETTE OF JAPAN", "MOYAI", "LARGE ORANGE CIRCLE", "LARGE YELLOW CIRCLE", "LARGE GREEN CIRCLE", "LARGE PURPLE CIRCLE", "LARGE BROWN CIRCLE", "LARGE RED SQUARE", "LARGE BLUE SQUARE",
				"LARGE ORANGE SQUARE", "LARGE YELLOW SQUARE", "LARGE GREEN SQUARE", "LARGE PURPLE SQUARE", "LARGE BROWN SQUARE", "HEAVY EQUALS SIGN", "FACE WITH COWBOY HAT", "CLOWN FACE", "NAUSEATED FACE", "ROLLING ON THE FLOOR LAUGHING",
				"DROOLING FACE", "FACE PALM", "SNEEZING FACE", "FACE WITH ONE EYEBROW RAISED", "GRINNING FACE WITH STAR EYES", "GRINNING FACE WITH ONE LARGE AND ONE SMALL EYE", "FACE WITH FINGER COVERING CLOSED LIPS", "SERIOUS FACE WITH SYMBOLS COVERING MOUTH", "SMILING FACE WITH SMILING EYES AND HAND COVERING MOUTH", "FACE WITH OPEN MOUTH VOMITING",
				"SHOCKED FACE WITH EXPLODING HEAD", "PREGNANT WOMAN", "BREAST-FEEDING", "PALMS UP TOGETHER", "SELFIE", "PRINCE", "MAN IN TUXEDO", "MOTHER CHRISTMAS", "SHRUG", "PERSON DOING CARTWHEEL",
				"JUGGLING", "FENCER", "WRESTLERS", "WATER POLO", "HANDBALL", "DIVING MASK", "WILTED FLOWER", "DRUM WITH DRUMSTICKS", "CLINKING GLASSES", "TUMBLER GLASS",
				"SPOON", "GOAL NET", "FIRST PLACE MEDAL", "SECOND PLACE MEDAL", "THIRD PLACE MEDAL", "BOXING GLOVE", "MARTIAL ARTS UNIFORM", "CURLING STONE", "LACROSSE STICK AND BALL", "SOFTBALL",
				"YAWNING FACE", "SMILING FACE WITH TEAR", "FACE WITH PARTY HORN AND PARTY HAT", "FACE WITH UNEVEN EYES AND WAVY MOUTH", "OVERHEATED FACE", "FREEZING FACE", "NINJA", "DISGUISED FACE", "FACE HOLDING BACK TEARS", "FACE WITH PLEADING EYES",
				"SARI", "LAB COAT", "GOGGLES", "HIKING BOOT", "FLAT SHOE", "PROBING CANE", "BRAIN", "BILLED CAP", "SCARF", "GLOVES",
				"COAT", "SOCKS", "RED GIFT ENVELOPE", "FIRECRACKER", "JIGSAW PUZZLE PIECE", "TEST TUBE", "PETRI DISH", "DNA DOUBLE HELIX", "COMPASS", "ABACUS",
				"FIRE EXTINGUISHER", "TOOLBOX", "BRICK", "MAGNET", "LUGGAGE", "LOTION BOTTLE", "SPOOL OF THREAD", "BALL OF YARN", "SAFETY PIN", "TEDDY BEAR",
				"BROOM", "BASKET", "ROLL OF PAPER", "BAR OF SOAP", "SPONGE", "RECEIPT", "NAZAR AMULET", "BALLET SHOES", "ONE-PIECE SWIMSUIT", "BRIEFS",
				"SHORTS", "THONG SANDAL", "DROP OF BLOOD", "ADHESIVE BANDAGE", "STETHOSCOPE", "X-RAY", "CRUTCH", "YO-YO", "KITE", "PARACHUTE",
				"BOOMERANG", "MAGIC WAND", "PINATA", "NESTING DOLLS", "MARACAS", "FLUTE", "RINGED PLANET", "CHAIR", "RAZOR", "AXE",
				"DIYA LAMP", "BANJO", "MILITARY HELMET", "ACCORDION", "LONG DRUM", "COIN", "CARPENTRY SAW", "SCREWDRIVER", "LADDER", "HOOK",
				"MIRROR", "WINDOW", "PLUNGER", "SEWING NEEDLE", "KNOT", "BUCKET", "MOUSE TRAP", "TOOTHBRUSH", "HEADSTONE", "PLACARD",
				"ROCK", "MIRROR BALL", "IDENTIFICATION CARD", "LOW BATTERY", "HAMSA", "FOLDING HAND FAN", "HAIR PICK", "KHANDA", "FLY", "WORM",
				"BEETLE", "COCKROACH", "POTTED PLANT", "WOOD", "FEATHER", "LOTUS", "CORAL", "EMPTY NEST", "NEST WITH EGGS", "HYACINTH",
				"JELLYFISH", "WING", "GOOSE", "LUNGS", "PEOPLE HUGGING", "PREGNANT MAN", "PREGNANT PERSON", "PERSON WITH CROWN", "MOOSE", "DONKEY",
				"BLUEBERRIES", "BELL PEPPER", "OLIVE", "FLATBREAD", "TAMALE", "FONDUE", "TEAPOT", "POURING LIQUID", "BEANS", "JAR",
				"GINGER ROOT", "PEA POD", "MELTING FACE", "SALUTING FACE", "FACE WITH OPEN EYES AND HAND OVER MOUTH", "FACE WITH PEEKING EYE", "FACE WITH DIAGONAL MOUTH", "DOTTED LINE FACE", "BITING LIP", "BUBBLES",
				"SHAKING FACE", "HAND WITH INDEX FINGER AND THUMB CROSSED", "RIGHTWARDS HAND", "LEFTWARDS HAND", "PALM DOWN HAND", "PALM UP HAND", "INDEX POINTING AT THE VIEWER", "LEFTWARDS PUSHING HAND", "RIGHTWARDS PUSHING HAND"
			}
		};
	}
	[BepInPlugin("com.vhmod.plankwright", "Painted Signs", "0.1.7")]
	public class Plugin : BaseUnityPlugin
	{
		public const string PluginGuid = "com.vhmod.plankwright";

		public const string PluginName = "Painted Signs";

		public const string PluginVersion = "0.1.7";

		private Harmony _harmony;

		internal static Plugin Instance { get; private set; }

		private void Awake()
		{
			//IL_000c: Unknown result type (might be due to invalid IL or missing references)
			//IL_0016: Expected O, but got Unknown
			Instance = this;
			_harmony = new Harmony("com.vhmod.plankwright");
			try
			{
				_harmony.PatchAll();
				((BaseUnityPlugin)this).Logger.LogInfo((object)"Painted Signs 0.1.7 loaded");
			}
			catch (Exception ex)
			{
				((BaseUnityPlugin)this).Logger.LogError((object)("Harmony patch failed: " + ex.Message));
			}
		}

		internal static void LogInfo(string message)
		{
			if ((Object)(object)Instance != (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogInfo((object)message);
			}
		}

		internal static void LogWarning(string message)
		{
			if ((Object)(object)Instance != (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogWarning((object)message);
			}
		}

		internal static void LogError(string message)
		{
			if ((Object)(object)Instance != (Object)null)
			{
				((BaseUnityPlugin)Instance).Logger.LogError((object)message);
			}
		}
	}
	internal sealed class SignBoard : MonoBehaviour
	{
		public const int Pad = 24;

		public const int Gap = 16;

		public const int Cell = 40;

		public const int CellGap = 8;

		public const int GridCols = 8;

		public const int GridRows = 5;

		private static SignBoard _instance;

		private Sign _sign;

		private int _limit;

		private GameObject _root;

		private TMP_InputField _editor;

		private TMP_InputField _nameField;

		private TextMeshProUGUI _preview;

		private TextMeshProUGUI _counter;

		private TextMeshProUGUI _status;

		private TextMeshProUGUI _pageLabel;

		private Transform _grid;

		private Transform _saved;

		private Button _confirmButton;

		private TMP_FontAsset _font;

		private TMP_FontAsset _signFont;

		private TMP_SpriteAsset _signSprites;

		private SignStore _store;

		private int _groupIndex;

		private int _page;

		private int _size = 30;

		private int _offset = 30;

		private string _search = "";

		private List<SignSymbol> _visible = new List<SignSymbol>();

		private readonly List<Button> _tabButtons = new List<Button>();

		private string _selectedId;

		private int _wheelLatch;

		internal static bool IsOpen
		{
			get
			{
				if ((Object)(object)_instance != (Object)null && (Object)(object)_instance._root != (Object)null)
				{
					return _instance._root.activeSelf;
				}
				return false;
			}
		}

		internal static void Open(Sign sign, string topic, int charLimit)
		{
			if (!((Object)(object)sign == (Object)null))
			{
				Ensure();
				_instance.Show(sign, topic, charLimit);
			}
		}

		internal static void Close()
		{
			if ((Object)(object)_instance != (Object)null)
			{
				_instance.Hide();
			}
		}

		private static bool Alive(Object obj)
		{
			return obj != (Object)null;
		}

		private bool UiAlive()
		{
			if (Alive((Object)(object)_root) && Alive((Object)(object)_saved) && Alive((Object)(object)_grid))
			{
				return Alive((Object)(object)_status);
			}
			return false;
		}

		private static void Ensure()
		{
			//IL_0041: Unknown result type (might be due to invalid IL or missing references)
			//IL_0046: Unknown result type (might be due to invalid IL or missing references)
			//IL_004c: Expected O, but got Unknown
			if (!((Object)(object)_instance != (Object)null) || !_instance.UiAlive())
			{
				if ((Object)(object)_instance != (Object)null)
				{
					Object.Destroy((Object)(object)((Component)_instance).gameObject);
					_instance = null;
				}
				GameObject val = new GameObject("Plankwright");
				Object.DontDestroyOnLoad((Object)val);
				_instance = val.AddComponent<SignBoard>();
				_instance.Build();
			}
		}

		private void Build()
		{
			//IL_006e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0073: Unknown result type (might be due to invalid IL or missing references)
			//IL_0078: Unknown result type (might be due to invalid IL or missing references)
			//IL_007d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0082: Unknown result type (might be due to invalid IL or missing references)
			//IL_00a9: Unknown result type (might be due to invalid IL or missing references)
			//IL_00b8: 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_00d6: Unknown result type (might be due to invalid IL or missing references)
			//IL_00e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Unknown result type (might be due to invalid IL or missing references)
			//IL_0116: Unknown result type (might be due to invalid IL or missing references)
			//IL_0125: Unknown result type (might be due to invalid IL or missing references)
			//IL_0134: Unknown result type (might be due to invalid IL or missing references)
			//IL_0144: Unknown result type (might be due to invalid IL or missing references)
			//IL_0154: Unknown result type (might be due to invalid IL or missing references)
			//IL_0159: Unknown result type (might be due to invalid IL or missing references)
			//IL_0168: Unknown result type (might be due to invalid IL or missing references)
			//IL_0177: Unknown result type (might be due to invalid IL or missing references)
			//IL_0186: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_01b7: 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_01d5: Unknown result type (might be due to invalid IL or missing references)
			//IL_01e5: Unknown result type (might be due to invalid IL or missing references)
			//IL_0206: Unknown result type (might be due to invalid IL or missing references)
			//IL_020b: Unknown result type (might be due to invalid IL or missing references)
			//IL_021a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0229: Unknown result type (might be due to invalid IL or missing references)
			//IL_0259: Unknown result type (might be due to invalid IL or missing references)
			//IL_0268: Unknown result type (might be due to invalid IL or missing references)
			//IL_0277: Unknown result type (might be due to invalid IL or missing references)
			//IL_0286: Unknown result type (might be due to invalid IL or missing references)
			//IL_0298: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a2: Expected O, but got Unknown
			//IL_02bf: Unknown result type (might be due to invalid IL or missing references)
			//IL_02c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02d3: Unknown result type (might be due to invalid IL or missing references)
			//IL_02e2: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_02fe: Expected O, but got Unknown
			//IL_030a: Unknown result type (might be due to invalid IL or missing references)
			//IL_030f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0314: Unknown result type (might be due to invalid IL or missing references)
			//IL_0323: Unknown result type (might be due to invalid IL or missing references)
			//IL_0332: Unknown result type (might be due to invalid IL or missing references)
			//IL_0362: Unknown result type (might be due to invalid IL or missing references)
			//IL_0369: Expected O, but got Unknown
			//IL_037b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0380: Unknown result type (might be due to invalid IL or missing references)
			//IL_038f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0394: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ea: Unknown result type (might be due to invalid IL or missing references)
			//IL_03f4: Expected O, but got Unknown
			//IL_0414: Unknown result type (might be due to invalid IL or missing references)
			//IL_0423: Unknown result type (might be due to invalid IL or missing references)
			//IL_0432: Unknown result type (might be due to invalid IL or missing references)
			//IL_0441: Unknown result type (might be due to invalid IL or missing references)
			//IL_0450: Unknown result type (might be due to invalid IL or missing references)
			//IL_0475: Unknown result type (might be due to invalid IL or missing references)
			//IL_047a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0489: Unknown result type (might be due to invalid IL or missing references)
			//IL_0498: Unknown result type (might be due to invalid IL or missing references)
			//IL_04eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_051f: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_053d: Unknown result type (might be due to invalid IL or missing references)
			//IL_054c: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a5: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b4: Unknown result type (might be due to invalid IL or missing references)
			//IL_05c3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05ed: Unknown result type (might be due to invalid IL or missing references)
			//IL_0614: Unknown result type (might be due to invalid IL or missing references)
			//IL_0623: Unknown result type (might be due to invalid IL or missing references)
			//IL_0632: Unknown result type (might be due to invalid IL or missing references)
			//IL_0641: Unknown result type (might be due to invalid IL or missing references)
			//IL_065c: Unknown result type (might be due to invalid IL or missing references)
			//IL_066c: Unknown result type (might be due to invalid IL or missing references)
			//IL_067b: Unknown result type (might be due to invalid IL or missing references)
			//IL_0680: Unknown result type (might be due to invalid IL or missing references)
			//IL_068f: Unknown result type (might be due to invalid IL or missing references)
			//IL_069e: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ce: Unknown result type (might be due to invalid IL or missing references)
			//IL_06dd: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ec: Unknown result type (might be due to invalid IL or missing references)
			//IL_06fb: Unknown result type (might be due to invalid IL or missing references)
			//IL_070d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0717: Expected O, but got Unknown
			//IL_0730: Unknown result type (might be due to invalid IL or missing references)
			//IL_073f: Unknown result type (might be due to invalid IL or missing references)
			//IL_074e: Unknown result type (might be due to invalid IL or missing references)
			//IL_075d: Unknown result type (might be due to invalid IL or missing references)
			//IL_076f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0779: Expected O, but got Unknown
			_store = new SignStore(SignStore.DefaultPath());
			Transform parent = OwnCanvas();
			_font = FindFont();
			if ((Object)(object)_font != (Object)null)
			{
				Plugin.LogInfo("Sign board font: " + ((Object)_font).name);
			}
			else
			{
				Plugin.LogWarning("No UI font found. Sign board text will be blank.");
			}
			Image val = UiKit.Panel(parent, "PlankwrightRoot", new Color(0f, 0f, 0f, 0.55f), Vector2.zero, Vector2.one, Vector2.zero, Vector2.zero);
			_root = ((Component)val).gameObject;
			Transform transform = ((Component)UiKit.Panel(_root.transform, "Frame", UiKit.WoodDark, new Vector2(0.5f, 0.5f), new Vector2(0.5f, 0.5f), new Vector2(-720f, -360f), new Vector2(720f, 360f))).transform;
			((Graphic)UiKit.Label(transform, "Title", "Painted Signs", 28, (TextAlignmentOptions)514, new Vector2(0f, 1f), Vector2.one, new Vector2(24f, -56f), new Vector2(-24f, -24f), _font)).color = UiKit.Cream;
			Image val2 = UiKit.Panel(transform, "Saved", UiKit.WoodMid, Vector2.zero, new Vector2(0f, 1f), new Vector2(24f, 24f), new Vector2(244f, -72f));
			((Graphic)UiKit.Label(((Component)val2).transform, "SavedTitle", "Saved layouts", 18, (TextAlignmentOptions)513, new Vector2(0f, 1f), Vector2.one, new Vector2(12f, -36f), new Vector2(-12f, -8f), _font)).color = UiKit.Cream;
			_nameField = MakeField(((Component)val2).transform, "Name", new Vector2(0f, 1f), Vector2.one, new Vector2(12f, -76f), new Vector2(-12f, -40f), "Layout name");
			UiKit.TextButton(((Component)val2).transform, "Save", "Save layout", 16, new Vector2(0f, 1f), new Vector2(0.5f, 1f), new Vector2(12f, -116f), new Vector2(-4f, -80f), _font, new UnityAction(SaveCurrent));
			UiKit.TextButton(((Component)val2).transform, "Delete", "Delete", 16, new Vector2(0.5f, 1f), Vector2.one, new Vector2(4f, -116f), new Vector2(-12f, -80f), _font, new UnityAction(DeleteSelected));
			Image val3 = UiKit.Panel(((Component)val2).transform, "List", UiKit.WoodDark, Vector2.zero, Vector2.one, new Vector2(12f, 12f), new Vector2(-12f, -128f));
			ScrollRect val4 = ((Component)val3).gameObject.AddComponent<ScrollRect>();
			GameObject val5 = new GameObject("Content", new Type[1] { typeof(RectTransform) });
			RectTransform content = UiKit.Rect(val5, ((Component)val3).transform, new Vector2(0f, 1f), Vector2.one, new Vector2(0f, -400f), Vector2.zero);
			val4.content = content;
			val4.viewport = ((Component)val3).GetComponent<RectTransform>();
			val4.horizontal = false;
			val4.movementType = (MovementType)2;
			_saved = val5.transform;
			VerticalLayoutGroup obj = val5.AddComponent<VerticalLayoutGroup>();
			((HorizontalOrVerticalLayoutGroup)obj).spacing = 8f;
			((LayoutGroup)obj).padding = new RectOffset(8, 8, 8, 8);
			((HorizontalOrVerticalLayoutGroup)obj).childForceExpandHeight = false;
			((HorizontalOrVerticalLayoutGroup)obj).childForceExpandWidth = true;
			val5.AddComponent<ContentSizeFitter>().verticalFit = (FitMode)2;
			Image val6 = UiKit.Panel(transform, "Board", UiKit.WoodLight, new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(260f, -280f), new Vector2(-500f, -72f));
			_preview = UiKit.Label(((Component)val6).transform, "Preview", "", 32, (TextAlignmentOptions)514, Vector2.zero, Vector2.one, new Vector2(12f, 12f), new Vector2(-12f, -12f), _font);
			((TMP_Text)_preview).richText = true;
			((TMP_Text)_preview).parseCtrlCharacters = true;
			((MaskableGraphic)_preview).maskable = false;
			((TMP_Text)_preview).margin = new Vector4(8f, 36f, 8f, 36f);
			((TMP_Text)_preview).textWrappingMode = (TextWrappingModes)1;
			((TMP_Text)_preview).overflowMode = (TextOverflowModes)0;
			_editor = MakeField(transform, "Editor", new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(260f, -380f), new Vector2(-500f, -292f), "Type sign text here");
			_editor.lineType = (LineType)2;
			((UnityEvent<string>)(object)_editor.onValueChanged).AddListener((UnityAction<string>)delegate
			{
				RefreshPreview();
			});
			_counter = UiKit.Label(transform, "Counter", "0 / 50", 18, (TextAlignmentOptions)516, new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(260f, -416f), new Vector2(-500f, -384f), _font);
			((Graphic)_counter).color = UiKit.Cream;
			_status = UiKit.Label(transform, "Status", "", 16, (TextAlignmentOptions)513, new Vector2(0f, 1f), new Vector2(1f, 1f), new Vector2(260f, -448f), new Vector2(-500f, -420f), _font);
			((Graphic)_status).color = UiKit.Cream;
			Image val7 = UiKit.Panel(transform, "Tools", UiKit.WoodMid, new Vector2(1f, 0f), Vector2.one, new Vector2(-484f, 24f), new Vector2(-24f, -72f));
			BuildTools(((Component)val7).transform);
			UiKit.TextButton(transform, "Cancel", "Cancel  B", 18, new Vector2(0f, 0f), new Vector2(0.5f, 0f), new Vector2(260f, 24f), new Vector2(-8f, 64f), _font, new UnityAction(Hide));
			_confirmButton = UiKit.TextButton(transform, "Confirm", "Write to sign  A", 18, new Vector2(0.5f, 0f), new Vector2(1f, 0f), new Vector2(8f, 24f), new Vector2(-500f, 64f), _font, new UnityAction(Confirm));
			FillMissingFonts();
			_root.SetActive(false);
		}

		private void BuildTools(Transform tools)
		{
			//IL_0022: Unknown result type (might be due to invalid IL or missing references)
			//IL_0027: Unknown result type (might be due to invalid IL or missing references)
			//IL_0038: Unknown result type (might be due to invalid IL or missing references)
			//IL_0043: Unknown result type (might be due to invalid IL or missing references)
			//IL_0053: Unknown result type (might be due to invalid IL or missing references)
			//IL_0157: Unknown result type (might be due to invalid IL or missing references)
			//IL_0166: 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_0182: Unknown result type (might be due to invalid IL or missing references)
			//IL_0195: Unknown result type (might be due to invalid IL or missing references)
			//IL_019f: Expected O, but got Unknown
			//IL_01d4: Unknown result type (might be due to invalid IL or missing references)
			//IL_020d: Unknown result type (might be due to invalid IL or missing references)
			//IL_021c: Unknown result type (might be due to invalid IL or missing references)
			//IL_022d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0238: Unknown result type (might be due to invalid IL or missing references)
			//IL_024a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0254: Expected O, but got Unknown
			//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_0282: Unknown result type (might be due to invalid IL or missing references)
			//IL_028d: Unknown result type (might be due to invalid IL or missing references)
			//IL_029f: Unknown result type (might be due to invalid IL or missing references)
			//IL_02a9: Expected O, but got Unknown
			//IL_02c9: 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_02e9: Unknown result type (might be due to invalid IL or missing references)
			//IL_02f4: Unknown result type (might be due to invalid IL or missing references)
			//IL_0306: Unknown result type (might be due to invalid IL or missing references)
			//IL_0310: Expected O, but got Unknown
			//IL_0328: Unknown result type (might be due to invalid IL or missing references)
			//IL_0337: Unknown result type (might be due to invalid IL or missing references)
			//IL_0348: Unknown result type (might be due to invalid IL or missing references)
			//IL_0353: Unknown result type (might be due to invalid IL or missing references)
			//IL_0365: Unknown result type (might be due to invalid IL or missing references)
			//IL_036f: Expected O, but got Unknown
			//IL_0387: Unknown result type (might be due to invalid IL or missing references)
			//IL_0396: Unknown result type (might be due to invalid IL or missing references)
			//IL_03a7: Unknown result type (might be due to invalid IL or missing references)
			//IL_03b2: Unknown result type (might be due to invalid IL or missing references)
			//IL_03c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_03ce: Expected O, but got Unknown
			//IL_03e6: Unknown result type (might be due to invalid IL or missing references)
			//IL_03eb: Unknown result type (might be due to invalid IL or missing references)
			//IL_03fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0407: Unknown result type (might be due to invalid IL or missing references)
			//IL_0419: Unknown result type (might be due to invalid IL or missing references)
			//IL_0423: Expected O, but got Unknown
			//IL_0448: Unknown result type (might be due to invalid IL or missing references)
			//IL_044d: Unknown result type (might be due to invalid IL or missing references)
			//IL_045e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0469: Unknown result type (might be due to invalid IL or missing references)
			//IL_0479: Unknown result type (might be due to invalid IL or missing references)
			//IL_0501: Unknown result type (might be due to invalid IL or missing references)
			//IL_0510: Unknown result type (might be due to invalid IL or missing references)
			//IL_051f: Unknown result type (might be due to invalid IL or missing references)
			//IL_052e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0541: Unknown result type (might be due to invalid IL or missing references)
			//IL_054b: Expected O, but got Unknown
			//IL_0593: Unknown result type (might be due to invalid IL or missing references)
			//IL_05a2: Unknown result type (might be due to invalid IL or missing references)
			//IL_05b3: Unknown result type (might be due to invalid IL or missing references)
			//IL_05be: Unknown result type (might be due to invalid IL or missing references)
			//IL_05d0: Unknown result type (might be due to invalid IL or missing references)
			//IL_05da: Expected O, but got Unknown
			//IL_05f2: Unknown result type (might be due to invalid IL or missing references)
			//IL_0601: Unknown result type (might be due to invalid IL or missing references)
			//IL_0612: Unknown result type (might be due to invalid IL or missing references)
			//IL_061d: Unknown result type (might be due to invalid IL or missing references)
			//IL_062f: Unknown result type (might be due to invalid IL or missing references)
			//IL_0639: Expected O, but got Unknown
			//IL_0657: Unknown result type (might be due to invalid IL or missing references)
			//IL_065c: Unknown result type (might be due to invalid IL or missing references)
			//IL_066d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0678: Unknown result type (might be due to invalid IL or missing references)
			//IL_0693: Unknown result type (might be due to invalid IL or missing references)
			//IL_06ab: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b0: Unknown result type (might be due to invalid IL or missing references)
			//IL_06b5: Unknown result type (might be due to invalid IL or missing references)
			//IL_06c4: Unknown result type (might be due to invalid IL or missing references)
			//IL_06cf: Unknown result type (might be due to invalid IL or missing references)
			float num = -12f;
			((Graphic)UiKit.Label(tools, "Colors", "Colors", 16, (TextAlignmentOptions)513, new Vector2(0f, 1f), Vector2.one, new Vector2(12f, num - 24f), new Vector2(-12f, num), _font)).color = UiKit.Cream;
			num -= 28f;
			int[][] array = new int[8][]
			{
				new int[3],
				new int[3] { 255, 255, 255 },
				new int[3] { 255, 0, 0 },
				new int[3] { 255, 136, 0 },
				new int[3] { 255, 255, 0 },
				new int[3] { 0, 255, 0 },
				new int[3] { 0, 0, 255 },
				new int[3] { 255, 0, 255 }
			};
			for (int i = 0; i < array.Length; i++)
			{
				int[] rgb = array[i];
				float num2 = 12 + i * 54;
				((Graphic)UiKit.FillOf(UiKit.TextButton(tools, "C" + i, "", 12, new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(num2, num - 40f), new Vector2(num2 + 48f, num), _font, (UnityAction)delegate
				{
					Insert(SignColor.ShortestHex(rgb[0], rgb[1], rgb[2]));
				}))).color = new Color((float)rgb[0] / 255f, (float)rgb[1] / 255f, (float)rgb[2] / 255f);
			}
			num -= 52f;
			UiKit.TextButton(tools, "Size", "Size 30", 16, new Vector2(0f, 1f), new Vector2(0.5f, 1f), new Vector2(12f, num - 36f), new Vector2(-4f, num), _font, (UnityAction)delegate
			{
				Insert("<size=" + _size + ">");
			});
			UiKit.TextButton(tools, "Offset", "Offset 30", 16, new Vector2(0.5f, 1f), Vector2.one, new Vector2(4f, num - 36f), new Vector2(-12f, num), _font, (UnityAction)delegate
			{
				Insert("<voffset=" + _offset + ">");
			});
			num -= 44f;
			UiKit.TextButton(tools, "I", "Italic", 16, new Vector2(0f, 1f), new Vector2(0.25f, 1f), new Vector2(12f, num - 36f), new Vector2(-2f, num), _font, (UnityAction)delegate
			{
				Insert("<i>");
			});
			UiKit.TextButton(tools, "U", "Under", 16, new Vector2(0.25f, 1f), new Vector2(0.5f, 1f), new Vector2(2f, num - 36f), new Vector2(-2f, num), _font, (UnityAction)delegate
			{
				Insert("<u>");
			});
			UiKit.TextButton(tools, "S", "Strike", 16, new Vector2(0.5f, 1f), new Vector2(0.75f, 1f), new Vector2(2f, num - 36f), new Vector2(-2f, num), _font, (UnityAction)delegate
			{
				Insert("<s>");
			});
			UiKit.TextButton(tools, "Br", "Line", 16, new Vector2(0.75f, 1f), Vector2.one, new Vector2(2f, num - 36f), new Vector2(-12f, num), _font, (UnityAction)delegate
			{
				Insert("\\n");
			});
			num -= 48f;
			((Graphic)UiKit.Label(tools, "TabsHint", "LB / RB groups.  Prev / Next, PgUp / PgDn, wheel, LT / RT pages.", 14, (TextAlignmentOptions)513, new Vector2(0f, 1f), Vector2.one, new Vector2(12f, num - 22f), new Vector2(-12f, num), _font)).color = UiKit.Cream;
			num -= 28f;
			_tabButtons.Clear();
			string[] groups = SignCatalog.Groups;
			int num3 = 4;
			for (int num4 = 0; num4 < groups.Length; num4++)
			{
				int num5 = num4 % num3;
				int num6 = num4 / num3;
				float num7 = 12 + num5 * 110;
				float num8 = num - (float)(num6 * 32);
				int captured = num4;
				Button item = UiKit.TextButton(tools, "Tab" + num4, groups[num4], 14, new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(num7, num8 - 28f), new Vector2(num7 + 104f, num8), _font, (UnityAction)delegate
				{
					SetGroup(captured);
				});
				_tabButtons.Add(item);
			}
			num -= (float)((groups.Length + num3 - 1) / num3 * 32 + 8);
			UiKit.TextButton(tools, "PagePrev", "Prev", 14, new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(12f, num - 28f), new Vector2(84f, num), _font, (UnityAction)delegate
			{
				ShiftPage(-1);
			});
			UiKit.TextButton(tools, "PageNext", "Next", 14, new Vector2(1f, 1f), new Vector2(1f, 1f), new Vector2(-84f, num - 28f), new Vector2(-12f, num), _font, (UnityAction)delegate
			{
				ShiftPage(1);
			});
			_pageLabel = UiKit.Label(tools, "Page", "1 / 1", 14, (TextAlignmentOptions)514, new Vector2(0f, 1f), Vector2.one, new Vector2(88f, num - 28f), new Vector2(-88f, num), _font);
			((Graphic)_pageLabel).color = UiKit.Cream;
			num -= 28f;
			Image val = UiKit.Panel(tools, "Grid", UiKit.WoodDark, Vector2.zero, Vector2.one, new Vector2(12f, 12f), new Vector2(-12f, num));
			_grid = ((Component)val).transform;
		}

		private TMP_InputField MakeField(Transform parent, string name, Vector2 min, Vector2 max, Vector2 offMin, Vector2 offMax, string placeholder)
		{
			//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_0064: 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_0068: 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_009b: Unknown result type (might be due to invalid IL or missing references)
			//IL_00aa: Unknown result type (might be due to invalid IL or missing references)
			//IL_00fc: Unknown result type (might be due to invalid IL or missing references)
			//IL_0106: Expected O, but got Unknown
			//IL_0107: Unknown result type (might be due to invalid IL or missing references)
			//IL_0111: Expected O, but got Unknown
			//IL_0112: Unknown result type (might be due to invalid IL or missing references)
			//IL_011c: Expected O, but got Unknown
			//IL_011d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0127: Expected O, but got Unknown
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Expected O, but got Unknown
			//IL_0044: Unknown result type (might be due to invalid IL or missing references)
			//IL_0045: Unknown result type (might be due to invalid IL or missing references)
			//IL_0047: 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)
			TMP_InputField val;
			if ((Object)(object)TextInput.instance != (Object)null && (Object)(object)TextInput.instance.m_inputField != (Object)null)
			{
				GameObject obj = Object.Instantiate<GameObject>(((Component)TextInput.instance.m_inputField).gameObject, parent);
				((Object)obj).name = name;
				obj.SetActive(true);
				UiKit.Rect(obj, parent, min, max, offMin, offMax);
				val = obj.GetComponent<TMP_InputField>();
			}
			else
			{
				Image val2 = UiKit.Panel(parent, name, UiKit.Paper, min, max, offMin, offMax);
				TextMeshProUGUI val3 = UiKit.Label(((Component)val2).transform, "Text", "", 18, (TextAlignmentOptions)257, Vector2.zero, Vector2.one, new Vector2(8f, 8f), new Vector2(-8f, -8f), _font);
				((Graphic)val3).raycastTarget = true;
				val = ((Component)val2).gameObject.AddComponent<TMP_InputField>();
				val.textViewport = ((Component)val2).GetComponent<RectTransform>();
				val.textComponent = (TMP_Text)(object)val3;
				val.fontAsset = _font;
			}
			val.characterLimit = 0;
			((Selectable)val).interactable = true;
			val.onValueChanged = new OnChangeEvent();
			val.onEndEdit = new SubmitEvent();
			val.onSubmit = new SubmitEvent();
			val.onSelect = new SelectionEvent();
			val.onDeselect = new SelectionEvent();
			val.text = "";
			DisableRichText(val);
			SetPlaceholder(val, placeholder);
			return val;
		}

		private static void SetPlaceholder(TMP_InputField field, string placeholder)
		{
			TMP_Text val = (TMP_Text)(((Object)(object)field != (Object)null) ? /*isinst with value type is only supported in some contexts*/: null);
			if (!((Object)(object)val == (Object)null))
			{
				val.richText = false;
				val.parseCtrlCharacters = false;
				val.text = placeholder ?? "";
			}
		}

		private TMP_FontAsset SignFont()
		{
			if (!((Object)(object)_signFont != (Object)null))
			{
				return _font;
			}
			return _signFont;
		}

		private void ApplySignLook(Sign sign)
		{
			_signFont = null;
			_signSprites = null;
			if ((Object)(object)sign != (Object)null && (Object)(object)sign.m_textWidget != (Object)null)
			{
				if ((Object)(object)((TMP_Text)sign.m_textWidget).font != (Object)null)
				{
					_signFont = ((TMP_Text)sign.m_textWidget).font;
				}
				_signSprites = ((TMP_Text)sign.m_textWidget).spriteAsset;
			}
			TMP_FontAsset val = SignFont();
			ApplyFieldLook(_editor, val, _signSprites);
			if ((Object)(object)_preview != (Object)null)
			{
				if ((Object)(object)val != (Object)null)
				{
					((TMP_Text)_preview).font = val;
				}
				if ((Object)(object)_signSprites != (Object)null)
				{
					((TMP_Text)_preview).spriteAsset = _signSprites;
				}
			}
		}

		private static void ApplyFieldLook(TMP_InputField field, TMP_FontAsset font, TMP_SpriteAsset sprites)
		{
			if ((Object)(object)field == (Object)null)
			{
				return;
			}
			if ((Object)(object)font != (Object)null)
			{
				field.fontAsset = font;
				if ((Object)(object)field.textComponent != (Object)null)
				{
					field.textComponent.font = font;
				}
			}
			if ((Object)(object)sprites != (Object)null && (Object)(object)field.textComponent != (Object)null)
			{
				field.textComponent.spriteAsset = sprites;
			}
		}

		private static void DisableRichText(TMP_InputField field)
		{
			if (!((Object)(object)field == (Object)null))
			{
				field.richText = false;
				if ((Object)(object)field.textComponent != (Object)null)
				{
					field.textComponent.richText = false;
				}
				Graphic placeholder = field.placeholder;
				TMP_Text val = (TMP_Text)(object)((placeholder is TMP_Text) ? placeholder : null);
				if ((Object)(object)val != (Object)null)
				{
					val.richText = false;
				}
			}
		}

		private void Show(Sign sign, string topic, int charLimit)
		{
			_sign = sign;
			_limit = ((charLimit > 0) ? charLimit : 50);
			if ((Object)(object)_font == (Object)null)
			{
				_font = FindFont();
			}
			FillMissingFonts();
			ApplySignLook(sign);
			if ((Object)(object)_editor != (Object)null)
			{
				DisableRichText(_editor);
				WriteEditor(sign.GetText() ?? "");
				_editor.ActivateInputField();
			}
			DisableRichText(_nameField);
			_groupIndex = 0;
			_page = 0;
			string text = topic ?? "Sign";
			if (text.StartsWith("$"))
			{
				text = "Sign";
			}
			if ((Object)(object)_status != (Object)null)
			{
				((TMP_Text)_status).text = text;
			}
			RefreshSaved();
			RebuildGrid();
			RefreshPreview();
			if ((Object)(object)_root != (Object)null)
			{
				_root.SetActive(true);
			}
			if (ZInput.IsGamepadActive() && (Object)(object)EventSystem.current != (Object)null && (Object)(object)_confirmButton != (Object)null)
			{
				EventSystem.current.SetSelectedGameObject(((Component)_confirmButton).gameObject);
			}
		}

		private void Hide()
		{
			if ((Object)(object)_root != (Object)null)
			{
				_root.SetActive(false);
			}
			_sign = null;
		}

		private void Confirm()
		{
			if ((Object)(object)_sign == (Object)null)
			{
				Hide();
				return;
			}
			_sign.SetText(SignText.ForGame(ReadEditor()));
			Hide();
		}

		private void Insert(string snippet)
		{
			if (!((Object)(object)_editor == (Object)null) && snippet != null)
			{
				string text = ReadEditor();
				int num = ((_editor.selectionAnchorPosition < _editor.selectionFocusPosition) ? _editor.selectionAnchorPosition : _editor.selectionFocusPosition);
				if (_editor.selectionAnchorPosition == _editor.selectionFocusPosition)
				{
					num = _editor.caretPosition;
				}
				if (num < 0 || num > text.Length)
				{
					num = text.Length;
				}
				DisableRichText(_editor);
				WriteEditor(text.Insert(num, snippet));
				int num2 = num + snippet.Length;
				_editor.caretPosition = num2;
				_editor.selectionAnchorPosition = num2;
				_editor.selectionFocusPosition = num2;
				_editor.ActivateInputField();
				RefreshPreview();
			}
		}

		private string ReadEditor()
		{
			if ((Object)(object)_editor == (Object)null)
			{
				return "";
			}
			string text = _editor.text ?? "";
			string text2 = (((Object)(object)_editor.textComponent != (Object)null) ? (_editor.textComponent.text ?? "") : "");
			if (text2.Length <= text.Length)
			{
				return text;
			}
			return text2;
		}

		private void WriteEditor(string value)
		{
			if (!((Object)(object)_editor == (Object)null))
			{
				string text = value ?? "";
				_editor.text = text;
				if ((Object)(object)_editor.textComponent != (Object)null)
				{
					_editor.textComponent.text = text;
				}
				_editor.ForceLabelUpdate();
			}
		}

		private string ReadName()
		{
			if ((Object)(object)_nameField == (Object)null)
			{
				return "";
			}
			string text = _nameField.text ?? "";
			string text2 = (((Object)(object)_nameField.textComponent != (Object)null) ? (_nameField.textComponent.text ?? "") : "");
			if (text2.Length <= text.Length)
			{
				return text;
			}
			return text2;
		}

		private void SetGroup(int index)
		{
			_groupIndex = index;
			_page = 0;
			RebuildGrid();
		}

		private int PageCount()
		{
			int num = ((_visible != null) ? _visible.Count : 0);
			int num2 = 40;
			if (num != 0)
			{
				return (num + num2 - 1) / num2;
			}
			return 1;
		}

		private void ShiftPage(int delta)
		{
			int num = SignCatalog.Step(_page, delta, PageCount());
			if (num != _page)
			{
				_page = num;
				RebuildGrid();
			}
		}

		private bool Typing()
		{
			if (!((Object)(object)_editor != (Object)null) || !_editor.isFocused)
			{
				if ((Object)(object)_nameField != (Object)null)
				{
					return _nameField.isFocused;
				}
				return false;
			}
			return true;
		}

		private void RebuildGrid()
		{
			//IL_017a: Unknown result type (might be due to invalid IL or missing references)
			//IL_0189: 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_01a7: 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_01c4: Expected O, but got Unknown
			//IL_0235: Unknown result type (might be due to invalid IL or missing references)
			//IL_022e: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_grid == (Object)null)
			{
				return;
			}
			for (int num = _grid.childCount - 1; num >= 0; num--)
			{
				Object.Destroy((Object)(object)((Component)_grid.GetChild(num)).gameObject);
			}
			string text = SignCatalog.Groups[_groupIndex];
			_visible = SignCatalog.Search(_search, text);
			int num2 = 40;
			int num3 = ((_visible.Count == 0) ? 1 : ((_visible.Count + num2 - 1) / num2));
			if (_page >= num3)
			{
				_page = num3 - 1;
			}
			if (_page < 0)
			{
				_page = 0;
			}
			((TMP_Text)_pageLabel).text = _page + 1 + " / " + num3 + "   " + text;
			int num4 = _page * num2;
			for (int i = 0; i < num2 && num4 + i < _visible.Count; i++)
			{
				SignSymbol signSymbol = _visible[num4 + i];
				int num5 = i % 8;
				int num6 = i / 8;
				float num7 = 8 + num5 * 48;
				float num8 = -8 - num6 * 48;
				string captured = signSymbol.Char;
				TextMeshProUGUI componentInChildren = ((Component)UiKit.TextButton(_grid, "S" + i, signSymbol.Char, 20, new Vector2(0f, 1f), new Vector2(0f, 1f), new Vector2(num7, num8 - 40f), new Vector2(num7 + 40f, num8), SignFont(), (UnityAction)delegate
				{
					Insert(captured);
				})).GetComponentInChildren<TextMeshProUGUI>();
				((TMP_Text)componentInChildren).textWrappingMode = (TextWrappingModes)0;
				if ((Object)(object)_signSprites != (Object)null)
				{
					((TMP_Text)componentInChildren).spriteAsset = _signSprites;
				}
			}
			for (int num9 = 0; num9 < _tabButtons.Count; num9++)
			{
				((Graphic)UiKit.FillOf(_tabButtons[num9])).color = ((num9 == _groupIndex) ? UiKit.WoodLight : UiKit.WoodMid);
			}
		}

		private void RefreshPreview()
		{
			//IL_0087: 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)
			string text = ReadEditor();
			if ((Object)(object)_preview != (Object)null)
			{
				((TMP_Text)_preview).text = SignText.ForGame(text);
			}
			int num = SignCounter.Utf16Len(text);
			if ((Object)(object)_counter != (Object)null)
			{
				((TMP_Text)_counter).text = num + " / " + _limit;
				((Graphic)_counter).color = (Color)((num > _limit) ? new Color(0.95f, 0.35f, 0.35f) : UiKit.Cream);
			}
		}

		private void RefreshSaved()
		{
			//IL_00c8: Unknown result type (might be due to invalid IL or missing references)
			//IL_00cd: Unknown result type (might be due to invalid IL or missing references)
			//IL_00df: 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_0114: Unknown result type (might be due to invalid IL or missing references)
			//IL_0119: Unknown result type (might be due to invalid IL or missing references)
			//IL_0128: Unknown result type (might be due to invalid IL or missing references)
			//IL_0132: Expected O, but got Unknown
			//IL_0138: Unknown result type (might be due to invalid IL or missing references)
			//IL_0143: Unknown result type (might be due to invalid IL or missing references)
			//IL_014e: Unknown result type (might be due to invalid IL or missing references)
			//IL_0158: Unknown result type (might be due to invalid IL or missing references)
			if ((Object)(object)_saved == (Object)null)
			{
				return;
			}
			for (int num = _saved.childCount - 1; num >= 0; num--)
			{
				Object.Destroy((Object)(object)((Component)_saved.GetChild(num)).gameObject);
			}
			string message;
			List<SavedSign> list = _store.Load(out message);
			if (message != null)
			{
				((TMP_Text)_status).text = message;
			}
			for (int i = 0; i < list.Count; i++)
			{
				SavedSign savedSign = list[i];
				string id = savedSign.Id;
				string body = savedSign.Text;
				string title = savedSign.Name;
				GameObject val = new GameObject("Row", new Type[2]
				{
					typeof(RectTransform),
					typeof(LayoutElement)
				});
				val.transform.SetParent(_saved, false);
				val.GetComponent<LayoutElement>().preferredHeight = 36f;
				RectTransform component = ((Component)UiKit.TextButton(font: SignFont(), parent: val.transform, name: "B", text: title, size: 16, min: Vector2.zero, max: Vector2.one, offMin: Vector2.zero, offMax: Vector2.zero, onClick: (UnityAction)delegate
				{
					_selectedId = id;
					WriteEditor(body);
					if ((Object)(object)_nameField != (Object)null)
					{
						_nameField.text = title;
					}
					if ((Object)(object)_status != (Object)null)
					{
						((TMP_Text)_status).text = "Loaded " + title + ". Write to sign to put it on this plank.";
					}
					RefreshPreview();
					if ((Object)(object)_editor != (Object)null)
					{
						_editor.ActivateInputField();
					}
				})).GetComponent<RectTransform>();
				component.anchorMin = Vector2.zero;
				component.anchorMax = Vector2.one;
				component.offsetMin = Vector2.zero;
				component.offsetMax = Vector2.zero;
			}
		}

		private void SaveCurrent()
		{
			string text = ReadEditor();
			string text2 = ReadName();
			if (text2.Trim().Length == 0)
			{
				text2 = SignText.SuggestName(text);
				if ((Object)(object)_nameField != (Object)null)
				{
					_nameField.text = text2;
				}
			}
			try
			{
				_selectedId = _store.SaveSign(text2, text);
				((TMP_Text)_status).text = "Saved \"" + text2 + "\". Write to sign still puts it on this plank.";
				RefreshSaved();
			}
			catch (ArgumentException)
			{
				((TMP_Text)_status).text = "Name the layout first.";
				if ((Object)(object)_nameField != (Object)null)
				{
					_nameField.ActivateInputField();
				}
			}
		}

		private void DeleteSelected()
		{
			if (!string.IsNullOrEmpty(_selectedId))
			{
				_store.Delete(_selectedId);
				_selectedId = null;
				RefreshSaved();
			}
		}

		private void Update()
		{
			if (!IsOpen)
			{
				return;
			}
			if (ZInput.GetKeyDown((KeyCode)27, true) || ZInput.GetButtonDown("JoyButtonB"))
			{
				Hide();
				return;
			}
			if (ZInput.GetButtonDown("JoyTabLeft"))
			{
				SetGroup((_groupIndex + SignCatalog.Groups.Length - 1) % SignCatalog.Groups.Length);
			}
			if (ZInput.GetButtonDown("JoyTabRight"))
			{
				SetGroup((_groupIndex + 1) % SignCatalog.Groups.Length);
			}
			if (ZInput.GetButtonDown("JoyLTrigger") || ZInput.GetKeyDown((KeyCode)280, true))
			{
				ShiftPage(-1);
			}
			if (ZInput.GetButtonDown("JoyRTrigger") || ZInput.GetKeyDown((KeyCode)281, true))
			{
				ShiftPage(1);
			}
			if (!Typing())
			{
				if (ZInput.GetKeyDown((KeyCode)276, true) || ZInput.GetKeyDown((KeyCode)273, true))
				{
					ShiftPage(-1);
				}
				if (ZInput.GetKeyDown((KeyCode)275, true) || ZInput.GetKeyDown((KeyCode)274, true))
				{
					ShiftPage(1);
				}
			}
			TryWheelPage();
		}

		private void TryWheelPage()
		{
			//IL_0056: Unknown result type (might be due to invalid IL or missing references)
			//IL_005b: Unknown result type (might be due to invalid IL or missing references)
			float mouseScrollWheel = ZInput.GetMouseScrollWheel();
			if (Mathf.Abs(mouseScrollWheel) < 0.01f)
			{
				_wheelLatch = 0;
				return;
			}
			int num = ((!(mouseScrollWheel > 0f)) ? 1 : (-1));
			if (_wheelLatch != num && !((Object)(object)_grid == (Object)null))
			{
				Transform grid = _grid;
				RectTransform val = (RectTransform)(object)((grid is RectTransform) ? grid : null);
				if (!((Object)(object)val == (Object)null) && RectTransformUtility.RectangleContainsScreenPoint(val, Vector2.op_Implicit(Input.mousePosition)))
				{
					_wheelLatch = num;
					ShiftPage(num);
				}
			}
		}

		private Transform OwnCanvas()
		{
			//IL_0057: Unknown result type (might be due to invalid IL or missing references)
			//IL_008d: Unknown result type (might be due to invalid IL or missing references)
			//IL_0099: 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)
			if ((Object)(object)((Component)this).gameObject.GetComponent<Canvas>() == (Object)null)
			{
				Canvas obj = ((Component)this).gameObject.AddComponent<Canvas>();
				obj.renderMode = (RenderMode)0;
				obj.overrideSorting = true;
				obj.sortingOrder = 30000;
				CanvasScaler val = ((Component)this).gameObject.AddComponent<CanvasScaler>();
				val.uiScaleMode = (ScaleMode)1;
				val.referenceResolution = new Vector2(1920f, 1080f);
				val.matchWidthOrHeight = 1f;
				Transform val2 = FindUiParent();
				if ((Object)(object)val2 != (Object)null)
				{
					CanvasScaler componentInParent = ((Component)val2).GetComponentInParent<CanvasScaler>();
					if ((Object)(object)componentInParent != (Object)null)
					{
						val.uiScaleMode = componentInParent.uiScaleMode;
						val.refer